はじめに
いつもの業務でシステムからアラートが上がった時に、ログを解析して問題がないか調査しなければいけない時がある。アラートが上がっても大体いつもと同じ内容で時間にして多いと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と組み合わせてより詳細な解析を行うこともできる。
コメント