MakingSenseofStreamProcessing / Simple Log Analysis with Unix Tools


Chapter 4. The Unix Philosophy of Distributed Data / Simple Log Analysis with Unix Tools

要約

  • unix ツールのことはご存知だと思うけど、知らない人のために例を説明する
  • リクエストをすべて記録する http サーバーがあるとしよう
    • nginx のアクセスログをイメージして欲しい
  • ログを解析してWebサイトのトラフィックを分析するツールはいろいろある
  • ここでは、練習も兼ねてアクセスの多い順に5番目までを抽出するツールを自作してみよう。awk で。
  • awk は nginx のアクセスログの書式を知らない
  • 1行読み込んで空白で分割するだけ(Figure 4-1)
  • というわけでこんなスクリプトを書くといいだろう
    • #1 空白で分割して7つ目を取り出す
    • #2 同じURLが並ぶようにする
    • #3 同じURLの登場数を数える
    • #4 登場数の降順で並び替える
    • #5 先頭の5つを取り出す
awk '{print $7}' access.log | #1
  sort      | #2
  uniq -c   |  #3
  sort -rn  | #4
  head -n 5 #5
  • 次のような出力になる
4189 /favicon.ico
3631 /2013/05/24/improving-security-of-ssh-private-keys.html
2124 /2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html
1369 /
915 /css/typography.css
  • 慣れていないと、コマンドの羅列に目がくらむかもしれないけど、これが unix ツールの強みなので頑張ろう
  • このスクリプトは GB オーダーのログファイルを数秒で処理できる
    • カスタマイズも簡単
    • クライアントのIPアドレスが欲しければ awk '{print $1}' とすればよい
  • unix の設計哲学
    • 1960年くらいから続く歴史の積み重ね
  • これらの哲学は、プログラムをパイプで連結して複雑な処理を実現するための基礎となる
  • 重要なこと
    • プログラムは入力元のことを知らない
    • プログラムは出力先のことを知らない

担当者のつぶやき

みんなの突っ込み