1
/
5

【新米エンジニア向け】ログ調査に便利なLinuxコマンド

はじめに

はじめまして。開発エンジニアのwest-cです。
ラクスに新卒で入社し、今年で4年目になります。ラクスでもエンジニアブログをはじめることになりました。
記念すべき1エントリ目を書くことになり光栄です。

本題

そんな1エントリ目のテーマですが、現在、私自身が新卒メンバーの育成を担当していることもあり、今年入社した新米エンジニアを対象にお話をしたいと思います。大学や会社の研修でプログラムは学ぶかと思いますが、ログの見方・調査方法についてしっかり学んだことのある方は少ないのではないでしょうか。個人で作成したプログラムであればエラーが発生したとき程度しか見ないログですが、お客様に提供するアプリケーションとなると話はちょっと変わってきます。
ログは、ユーザがとった行動の証跡(証拠)となることから、利用状況の把握から問題が発生した場合の原因特定まで非常に重要な役割を担います。ログの形式はソフトウェアによって異なるためそれぞれの公式ドキュメントに譲るとして、ここではログ調査にあたり知っておくと便利なLinuxコマンドを紹介したいと思います。
なお、今回は Apache のアクセスログを例として説明を行います。リアルタイムでログを監視したい

ファイルの末尾が更新されると自動的に追加分が表示されます。
例えば、検証環境にて画面遷移をした瞬間のログを確認したい場合などに重宝します。
長いスタックトレースを確認する場合は、予めEnterキーでいくつか改行を入れておくとログの切れ目が分かりやすくなり便利です。

ログをスクロールして表示したい行数の長いファイルの場合、 cat でファイルの中身を見ようとすると画面に収まり切らず、目的のログに辿り着くのにひと苦労します。
そのようなときに less を利用すると、スクロールしながら閲覧することができます。
less コマンド内で利用できる操作のうち、個人的によく使うものは以下になります。

表示する行を絞り込みたい

以降は、以下のようなアクセスログを前提として説明を行います。
(GET or POST の前の数値はリクエスト処理にかかった時間(単位:秒)、末尾の数値はレスポンスサイズと解釈してください)

特定の文字列が含まれる行のみを抽出したい場合は grep の出番です。

ファイルから「login」という文字列が含まれる行のみが抽出されました。逆に「login」という文字列を含まない行を表示する場合は、-v オプションを付けましょう。

grep -E または egrep を利用すると、検索文字列に正規表現を利用することができます。上記を組み合わせると、画像ファイル(*.jpg, *.gif, *.png)を除外したログを表示したい場合に、以下のように記述することができます。

表示する列を絞り込みたい

例えば以下の3つの情報がログ調査に必要であるとします。

  • アクセス日時
  • リクエストURL
  • リクエストにかかった時間

この3つ以外の情報は今回は必要の無いノイズ情報ですので、awk
で表示する列を絞り込みましょう。awk で列を絞り込む場合、デフォルトでは空白(スペース)またはタブ単位で区切られます。
今回の例だと、4列目(アクセス日時)・6列目(リクエストURL)・8列目(リクエストにかかった時間)だけを表示したいことになります。

必要な情報のみが表示され、見通しが良くなりました。$ の後の数字には、区切り文字で行を分割した際の順番が入ります(1始まり)。
区切り文字を変更したい場合は、-F '区切り文字' とオプションを付与すれば良いです。ちなみにcut コマンドでも同様のことは実現できますが、次に紹介する話との関連で、ログの確認時にはawk を利用することをおすすめします。

条件に合致するログのみを抽出したい

ひとつ前の例に追加して「リクエストに3秒以上かかったログのみを抽出したい」場合を考えてみましょう。
awk はプログラミング言語なので、条件分岐を記述することもできます。

このように「○番目の項目が□□だった場合」と記述することができるため、単純な文字列一致の条件の場合でもgrep よりも細かく絞り込みを行うことができます。

まとめ

私自身、入社したての頃にログファイルをviで開いて怒られたりログファイルを根こそぎExcelに貼り付けてちまちま絞り込みを行ったりと苦い経験があったため、今回このテーマを選ぶことにしました。今回取り上げた内容は基本的なものであり、さらに高度なログ集計を行おうとすると、sort やuniq 、sed なども必要になるかと思います。
まずはこの記事を足がかりに、その他のコマンドも習得してステップアップしてもらえると嬉しいです!

株式会社ラクスでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!
同じタグの記事
今週のランキング