私の接続プーリングツールに問題があるようです。データベース接続を取得するには膨大な遅延があります。
私が達成したいのは、このイベントが発生したときにログファイルからすべてのケースをインポートすることです。
関連ログエントリは次のとおりです。
...
2018-03-12 16:18:44,070 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtaining JDBC connection
...
2018-03-12 16:20:23,172 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtained JDBC connection
...
それからパターンDEBUG JDBC接続のインポート「発生後に日付を抽出します」2018-03-12 16:18:44,070「そしていつモード」DEBUG JDBC接続のインポート'検索して日付を抽出し、2つの日付を比較します。差が2秒を超えると記録します。
1行のコードでこの問題を解決するのはかなり複雑ですが、プログラムを書かなくてもこの問題を解決できますか?
ベストアンサー1
これを処理するには、次のawkスクリプトを使用します。スクリプトは「取得」および「取得」文字列を検索します。一般的なケースは、最初に「取得」文字列を検索し、次に「取得」文字列を検索することです。 「取得した」行が最初に見つかった場合、その行はd1
設定されていないかゼロになるため報告されません。それ以外の場合は、日付の主要部分(カンマの前)を抽出してそれをエポックの後の秒に変換し、ミリ秒を再度追加します。値がに保存されますd1
。
「得られた」文字列を見ると、その日付が同じ方法で計算され、違いを確認して2秒を超えると報告します。どちらかをリセットしてd1
プロセスを再起動します。
以下をスクリプトに保存し、必要に応じて名前を付けることができalert-jdbc.awk
ますawk -f alert-jdbc.awk < log-file-here
。
このスクリプトでは、任意の日付を変換するためにGNU日付ユーティリティが必要です。
/DEBUG Obtaining JDBC connection/ {
split($1 " " $2, dates, /,/)
"date -d \"" dates[1]"\" +%s" | getline seconds
d1=seconds + dates[2]/1000
}
/DEBUG Obtained JDBC connection/ {
if (d1) {
split($1 " " $2, dates, /,/)
"date -d \"" dates[1]"\" +%s" | getline seconds
d2=seconds + dates[2]/1000
if (d2 - d1 > 2) {
print "More than 2 seconds for: " $0
}
d1=0
}
}