ログ解析する時のコマンド

はじめに

いつもの業務でシステムからアラートが上がった時に、ログを解析して問題がないか調査しなければいけない時がある。アラートが上がっても大体いつもと同じ内容で時間にして多いと1日2時間、ログの解析作業に時間を取られてしまう。

いつもは以下のようにcatコマンドを使用して、ログを解析しているが、他のコマンドで便利なものがないか調べてみることにした。

cat system.log | grep Id=12345 | grep "APIのパス"

システムの前提

  • FEとBEが分かれていて、APIを介してFEに必要なデータを渡している。
  • マルチテナントのシステムで、複数ユーザーのデータが1つのDBを共有している。
  • IDとAPIのパスをgrepで指定するというような感じでいつもログを調べている。

ログファイルの例(system.log)

2024-04-20 12:05:32 [TenantId: 123456] INFO: Received request: POST /api/resource
2024-04-20 12:05:35 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:05:38 [TenantId: 123456] INFO: Request successfully processed: POST /api/resource (200 OK)
2024-04-20 12:10:21 [TenantId: 789012] INFO: Received request: GET /api/resource/123
2024-04-20 12:10:24 [TenantId: 789012] INFO: Processing request: GET /api/resource/123
2024-04-20 12:10:28 [TenantId: 789012] INFO: Request successfully processed: DELETE /api/resource/789 (200 OK)
2024-04-20 12:12:45 [TenantId: 123456] INFO: Received request: GET /api/resource/456
2024-04-20 12:12:48 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:12:51 [TenantId: 123456] INFO: Request successfully processed: PUT /api/resource/456 (201 Created)
2024-04-20 12:15:09 [TenantId: 456789] INFO: Received request: POST /api/resource/789
2024-04-20 12:15:12 [TenantId: 456789] INFO: Processing request: DELETE /api/resource/789
2024-04-20 12:15:15 [TenantId: 456789] INFO: Request successfully processed: GET /api/resource/123 (404 Not Found)

ログを解析するコマンド

grepコマンドのみ
$ grep "TenantId: 123456" server.log | grep GET
2024-04-20 12:12:45 [TenantId: 123456] INFO: Received request: GET /api/resource/456

この結果を見るとcatは不要な気がする。

lessコマンド
less server.log

画面上には以下のログが表示されます。

2024-04-20 12:05:32 [TenantId: 123456] INFO: Received request: POST /api/resource
2024-04-20 12:05:35 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:05:38 [TenantId: 123456] INFO: Request successfully processed: POST /api/resource (200 OK)
2024-04-20 12:10:21 [TenantId: 789012] INFO: Received request: GET /api/resource/123
2024-04-20 12:10:24 [TenantId: 789012] INFO: Processing request: GET /api/resource/123
2024-04-20 12:10:28 [TenantId: 789012] INFO: Request successfully processed: DELETE /api/resource/789 (200 OK)
2024-04-20 12:12:45 [TenantId: 123456] INFO: Received request: GET /api/resource/456
2024-04-20 12:12:48 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:12:51 [TenantId: 123456] INFO: Request successfully processed: PUT /api/resource/456 (201 Created)
2024-04-20 12:15:09 [TenantId: 456789] INFO: Received request: POST /api/resource/789
2024-04-20 12:15:12 [TenantId: 456789] INFO: Processing request: DELETE /api/resource/789
2024-04-20 12:15:15 [TenantId: 456789] INFO: Request successfully processed: GET /api/resource/123 (404 Not Found)

テナントIDが123456の行をフィルタリングするために TenantId: 123456 と入力し、Enter

2024-04-20 12:05:32 [TenantId: 123456] INFO: Received request: POST /api/resource
2024-04-20 12:05:35 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:05:38 [TenantId: 123456] INFO: Request successfully processed: POST /api/resource (200 OK)
2024-04-20 12:12:45 [TenantId: 123456] INFO: Received request: GET /api/resource/456
2024-04-20 12:12:48 [TenantId: 123456] INFO: Processing request: PUT /api/resource/456
2024-04-20 12:12:51 [TenantId: 123456] INFO: Request successfully processed: PUT /api/resource/456 (201 Created)

APIがGETリクエストである行をフィルタリングするために GET と入力し、Enter
結果として、ログファイル内の該当する行が表示される。

2024-04-20 12:12:45 [TenantId: 123456] INFO: Received request: GET /api/resource/456

まとめ

今までcatを使っていたが、使用する意味はなさそう。grep、lessの使い分けのポイントは以下のようになりそう。個人的にはgrepコマンドのみで今のところはログ解析が問題なくできると思う。
lessコマンドは慣れるのに時間がかかりそう。

grep: ログファイル内の特定のパターンや文字列を検索するために使用する。例えば、特定のエラーメッセージやリクエストのパス、特定のテキストパターンなどを見つけるために使われる。
less: ログファイル全体を閲覧したり、スクロールして確認するために使用されます。lessはページング機能を提供し、大きなログファイルを閲覧できる。また、less内での検索機能も利用できるので、grepと組み合わせてより詳細な解析を行うこともできる。

コメント

タイトルとURLをコピーしました