Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

GNU awk (gawk) を用いた Apache ログ解析方法

11.977 Aufrufe

Veröffentlicht am

  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH }
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

GNU awk (gawk) を用いた Apache ログ解析方法

  1. 1. GNU awk (gawk) を用いた ログ解析方法 Apache ログ解析方法 斉藤 博文
  2. 2. 自己紹介斉藤博文 日本 GNU AWK ユーザー会主宰。 hi_saito@yk.rim.or.jp @hi_saito http://gauc.no-ip.org/awk-users-jp/ さて、今回の課題です。
  3. 3. 目的Apache のログを簡単に整理したい。 combined 形式でも common 形式でも手 軽に処理したい。 項目分割を簡単にしたい。 コードの量を少なく、分かりやすくしたい。 でも awk は Apache の処理が苦手です。
  4. 4. 何故、苦手なのか何故、苦手なのか? Apache のログ項目は 3 つの形式がある。 スペース区切。 → awk で処理できる。 ダブルクォートで囲まれて中身にスペースが含ま れる。 大括弧で囲まれて中身にスペースが含まれる。 そんな時には GNU awk (gawk) です!
  5. 5. 形式のcombined 形式のログ***.***.***.*** - - [25/Mar/2012:12:08:28 +0900]***.***.***.*** - - [25/Mar/2012:12:08:28 +0900]***.***.***.******.***.***.*** ¥ ¥"GET http://gauc.no-ip.org/ HTTP/1.1""GET http://gauc.no-ip.org/ HTTP/1.1" http://gauc.no-ip.org/ http://gauc.no-ip.org/ ¥ ¥200 492200 492 ¥ ¥"http://gauc.no-ip.org/" http://gauc.no-ip.org/" http://gauc.no-ip.org/""http://gauc.no-ip.org/" ¥ ¥"Mozilla/5.0 Gecko/20100101 Firefox/11.0""Mozilla/5.0 Gecko/20100101 Firefox/11.0" awk の FS では分割できない。 FS を用いない分割を行う必要がある。
  6. 6. gawk で何ができるか? 今回紹介する方法は 2 つ。 gensub() 関数で後方参照を使った方法。 gawk4 から導入された FPAT でフィールド自 体の正規表現を記述する方法。 それぞれを説明します。
  7. 7. 関数で後方参照を いる場合gensub() 関数で後方参照を用いる場合 メリットとデメリット sed や Perl と同じような記述で分割できる。 combined 形式と common 形式を分けなく てはいけない。 フィールドに分割されるのではなく、配列または 変数として分割される。 例を示します。
  8. 8. った例gensub() を使った例{{ log_str = gensub(/^([^ ]+) ([^ ]+) ([^ ]+) log_str = gensub(/^([^ ]+) ([^ ]+) ([^ ]+) gensub(/^([^ gensub(/^([^ [[^¥]]+¥(¥[[^¥]]+¥]) ("[^"]+") ([^ ]+) ([^ ]+) ("[^"]+")(¥[[^¥]]+¥]) ("[^"]+") ([^ ]+) ([^ ]+) ("[^"]+") [[^¥]]+¥("[^"]+")$/,("[^"]+")$/,"¥¥1¥034¥¥2¥034¥¥3¥034¥¥4¥034¥¥5¥034¥¥6¥034¥¥7¥034¥¥8 034¥ 034¥ 034¥ 034¥ 034¥ 034¥ 034¥"¥¥1¥034¥¥2¥034¥¥3¥034¥¥4¥034¥¥5¥034¥¥6¥034¥¥7¥034¥¥8 034¥ 034¥ 034¥ 034¥ 034¥ 034¥ 034¥ 034¥¥034¥¥9", 1, $0); 034¥¥034¥¥9", 1, $0); num_log = split(log_str, arr_log, "¥ 034"); num_log = split(log_str, arr_log, "¥034"); split(log_str, arr_log, "¥ split(log_str, arr_log, "¥ for (i = 1; i <= num_log; i++) { for (i = 1; i <= num_log; i++) { num_log; num_log; print "Item " i " = " arr_log[i]; print "Item " i " = " arr_log[i]; arr_log[i]; arr_log[i]; } }}} 分かりやすいような、分かりにくいような・・・。
  9. 9. フィールド自体 指定するFPAT でフィールド自体を指定する場合 メリットとデメリット コードが短い。 combined 形式と common 形式で変える 必要がない。 $1, $2... というフィールドに分割される。 まだメジャーじゃない。 例を示します。
  10. 10. った例FPAT を使った例BEGIN {BEGIN { FPAT = "(¥¥[[^¥¥[¥¥]]+¥¥])|(¥"[^¥"]+¥")|([^ ]+)"; FPAT = "(¥ ¥[[^¥¥[¥¥]]+¥¥])|(¥"[^¥"]+¥")|([^ ]+)"; "(¥ [[^¥ "(¥ [[^¥ ]]+¥ ])|(¥"[^¥"]+¥ ]]+¥ ])|(¥"[^¥"]+¥}} 大括弧で ダブルクォートで スペース区切 括られた部分 括られた部分{{ for (i = 1; i <= NF; i++) { for (i = 1; i <= NF; i++) { print "Item " i " = " $i; print "Item " i " = " $i; } }}} 大括弧のエスケープに注意してください。 短い。分かりやすい (?)
  11. 11. デモ デモします。 gensub() 関数を用いた例。 FPAT を用いた例。 どうでしょうか?
  12. 12. 応用例CSV ファイルでも FPAT は使えます。 FPAT = "([^,]+)|(¥"[^¥"]+¥")"; ただし、改行を含むものは使えません。 小さな努力で大きな成果を生み出す。
  13. 13. まとめ Apache のログは gawk4 でやろう。 時間があれば、おまけをやります。
  14. 14. おまけ gawk でスタートスクリプトを書こう。 変数のデフォルト設定の書き方。 switch 文の使い方。 RETVAL の取得方法。 gawk ならできるよ
  15. 15. おまけBEGIN {BEGIN { # デフォルト変数 の代入には条件演算子が便利 デフォルト変数 代入には条件演算子が 変数の # デフォルト変数の代入には条件演算子が便利 デフォルト変数 代入には条件演算子が 変数の には条件演算子 には条件演算子 cmd = ENVIRON["cmd"] ? ENVIRON["cmd"] : "ls "; ENVIRON["cmd"] ENVIRON["cmd"] "ls ENVIRON["cmd"] ENVIRON["cmd"] "ls ls"; cmd = ENVIRON["cmd"] ? ENVIRON["cmd"] : "ls"; ls"; # gawk4 では switch 文も使えます # gawk4 では switch 文も使えます switch (ARGV[1]) { switch (ARGV[1]) { case "start": case "start": start_prog(cmd); start_prog(cmd); start_prog(cmd); start_prog(cmd); break; break; default: default: exit 0; exit 0; } }}}コンパイルオプションで gawk3 でも利用可能。
  16. 16. おまけfunction start_prog(cmd) {function start_prog(cmd) { start_prog(cmd) start_prog(cmd) # system() 関数は戻り値を返す (ただし OS 依存) # system() 関数は 戻り値を返す (ただし OS 依存) 関数は 関数は 依存) 依存) RETVAL = system(cmd); RETVAL = system(cmd); system(cmd); system(cmd); if (RETVAL != 0) { if (RETVAL != 0) { print "Error." > "/dev/stderr "; stderr"; print "Error." > "/dev/stderr"; "/dev/stderr stderr"; "/dev/stderr exit RETVAL; exit RETVAL; } }}} Shell よりも分かりやすいかも?
  17. 17. おまけ awk は Unix の「純文学」です。 いろいろなところで便利に使っていきましょう。 ご清聴ありがとうございました。

×