Movatterモバイル変換


[0]ホーム

URL:


博文 斉藤, profile picture
Uploaded by博文 斉藤
PDF, PPTX6,676 views

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

Embed presentation

Download as PDF, PPTX
GNU awk (gawk) を用いた         ログ解析方法  Apache ログ解析方法               斉藤 博文
自己紹介斉藤博文  日本 GNU AWK ユーザー会主宰。  hi_saito@yk.rim.or.jp  @hi_saito  http://gauc.no-ip.org/awk-users-jp/                 さて、今回の課題です。
目的Apache のログを簡単に整理したい。     combined 形式でも common 形式でも手     軽に処理したい。     項目分割を簡単にしたい。     コードの量を少なく、分かりやすくしたい。 でも awk は Apache の処理が苦手です。
何故、苦手なのか何故、苦手なのか? Apache のログ項目は 3 つの形式がある。   スペース区切。 → awk で処理できる。   ダブルクォートで囲まれて中身にスペースが含ま   れる。   大括弧で囲まれて中身にスペースが含まれる。   そんな時には GNU awk (gawk) です!
形式の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 を用いない分割を行う必要がある。
gawk で何ができるか? 今回紹介する方法は 2 つ。  gensub() 関数で後方参照を使った方法。  gawk4 から導入された FPAT でフィールド自  体の正規表現を記述する方法。            それぞれを説明します。
関数で後方参照を いる場合gensub() 関数で後方参照を用いる場合 メリットとデメリット   sed や Perl と同じような記述で分割できる。   combined 形式と common 形式を分けなく   てはいけない。   フィールドに分割されるのではなく、配列または   変数として分割される。                   例を示します。
った例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];    }    }}}    分かりやすいような、分かりにくいような・・・。
フィールド自体 指定するFPAT でフィールド自体を指定する場合 メリットとデメリット   コードが短い。   combined 形式と common 形式で変える   必要がない。   $1, $2... というフィールドに分割される。   まだメジャーじゃない。                    例を示します。
った例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;  }  }}}  大括弧のエスケープに注意してください。                         短い。分かりやすい (?)
デモ デモします。     gensub() 関数を用いた例。     FPAT を用いた例。                     どうでしょうか?
応用例CSV ファイルでも FPAT は使えます。  FPAT = "([^,]+)|(¥"[^¥"]+¥")";  ただし、改行を含むものは使えません。      小さな努力で大きな成果を生み出す。
まとめ Apache のログは gawk4 でやろう。        時間があれば、おまけをやります。
おまけ gawk でスタートスクリプトを書こう。   変数のデフォルト設定の書き方。   switch 文の使い方。   RETVAL の取得方法。                   gawk ならできるよ
おまけ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 でも利用可能。
おまけ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 よりも分かりやすいかも?
おまけ awk は Unix の「純文学」です。   いろいろなところで便利に使っていきましょう。         ご清聴ありがとうございました。

Recommended

PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PDF
Branded Interaction Design – Digitale Markenerlebnisse planen und gestalten. ...
PDF
確実に良くするUI/UX設計
PDF
Googleの創業と発展
PDF
サービス開発とその進め方
PDF
Cyta.jp_サービスEC説明資料
PDF
T TIME 滞在時間割キャンペーン(第4回販促会議企画コンペティション)
PDF
แผนFlashหน่วย1
PDF
【企画書】omiai:IVS_LAUNCH PAD用資料
PDF
CleanArchitecture with AssemblyDefinition in unity
PDF
メルカリ_サービス説明資料
PDF
PIXTA_シードラウンド用事業プラン説明資料
PDF
ストリートアカデミー_ローンチ前企画書
PDF
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
PDF
アプリを生み出す現場でUI/UXデザイナーが意識するべきこと:RoomClip
PDF
これからはじめるサービスデザイン
PDF
【企画書】ReceReco:新規事業討議用社内資料
KEY
テスト駆動開発入門
PDF
RDRAモデリングを見てみよう
PDF
デザインのためのデザイン
PDF
事業成長にコミットするエンジニア組織への道のり
PDF
心地よいUIの温度 - 言葉と気遣いで高めるUI -
PDF
UXデザインワークショップ資料 by ATOMOS DESIGN
PDF
【freee】プロダクトマネージャーの仕事と魅力
PDF
WBSを始めよう
PDF
โครงงานระบบปฏิบัติการ
PDF
UX / UI สำหรับเว็บไทย
PDF
โครงงานพัฒนาเครื่องมือ
PDF
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
PDF
Linux女子部第二回勉強会usp友の会

More Related Content

PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PDF
Branded Interaction Design – Digitale Markenerlebnisse planen und gestalten. ...
PDF
確実に良くするUI/UX設計
PDF
Googleの創業と発展
PDF
サービス開発とその進め方
PDF
Cyta.jp_サービスEC説明資料
PDF
T TIME 滞在時間割キャンペーン(第4回販促会議企画コンペティション)
PDF
แผนFlashหน่วย1
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Branded Interaction Design – Digitale Markenerlebnisse planen und gestalten. ...
確実に良くするUI/UX設計
Googleの創業と発展
サービス開発とその進め方
Cyta.jp_サービスEC説明資料
T TIME 滞在時間割キャンペーン(第4回販促会議企画コンペティション)
แผนFlashหน่วย1

What's hot

PDF
【企画書】omiai:IVS_LAUNCH PAD用資料
PDF
CleanArchitecture with AssemblyDefinition in unity
PDF
メルカリ_サービス説明資料
PDF
PIXTA_シードラウンド用事業プラン説明資料
PDF
ストリートアカデミー_ローンチ前企画書
PDF
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
PDF
アプリを生み出す現場でUI/UXデザイナーが意識するべきこと:RoomClip
PDF
これからはじめるサービスデザイン
PDF
【企画書】ReceReco:新規事業討議用社内資料
KEY
テスト駆動開発入門
PDF
RDRAモデリングを見てみよう
PDF
デザインのためのデザイン
PDF
事業成長にコミットするエンジニア組織への道のり
PDF
心地よいUIの温度 - 言葉と気遣いで高めるUI -
PDF
UXデザインワークショップ資料 by ATOMOS DESIGN
PDF
【freee】プロダクトマネージャーの仕事と魅力
PDF
WBSを始めよう
PDF
โครงงานระบบปฏิบัติการ
PDF
UX / UI สำหรับเว็บไทย
PDF
โครงงานพัฒนาเครื่องมือ
【企画書】omiai:IVS_LAUNCH PAD用資料
CleanArchitecture with AssemblyDefinition in unity
メルカリ_サービス説明資料
PIXTA_シードラウンド用事業プラン説明資料
ストリートアカデミー_ローンチ前企画書
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
アプリを生み出す現場でUI/UXデザイナーが意識するべきこと:RoomClip
これからはじめるサービスデザイン
【企画書】ReceReco:新規事業討議用社内資料
テスト駆動開発入門
RDRAモデリングを見てみよう
デザインのためのデザイン
事業成長にコミットするエンジニア組織への道のり
心地よいUIの温度 - 言葉と気遣いで高めるUI -
UXデザインワークショップ資料 by ATOMOS DESIGN
【freee】プロダクトマネージャーの仕事と魅力
WBSを始めよう
โครงงานระบบปฏิบัติการ
UX / UI สำหรับเว็บไทย
โครงงานพัฒนาเครื่องมือ

Viewers also liked

PDF
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
PDF
Linux女子部第二回勉強会usp友の会
PPTX
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
PDF
awk入門
PDF
Log解析の基礎@phpcon2014
PDF
恐怖!シェルショッカー1号男
PPTX
中年以降エンジニアの成長戦略
PDF
jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
PDF
Good Parts of PHP and the UNIX Philosophy
PDF
サーバ攻撃されてみた
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
Linux女子部第二回勉強会usp友の会
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
awk入門
Log解析の基礎@phpcon2014
恐怖!シェルショッカー1号男
中年以降エンジニアの成長戦略
jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
Good Parts of PHP and the UNIX Philosophy
サーバ攻撃されてみた

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

PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PPTX
Windowsでも使えるシェル
PDF
シェル芸初心者によるシェル芸入門 (修正版)
 
PDF
Awk勉強会用資料
PDF
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
PPTX
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
PDF
Unix 基礎
 
PPTX
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
PDF
Usptomonokai 20111028
PDF
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
PDF
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
PDF
mlr-grep - レコード指向grep
PDF
業務報告会
PDF
誰得コマンド&オプション35連発
PDF
OSC2012 Tokyo Spring, USP lab. presentation
PDF
2012年10月27日 Hbstudy#38
PDF
20130223 OSC Tokyo/Spring
PDF
StatGenSummerSchool2023_Linux.pdf
awk v.s. bashどっちが強い?@OSC2011Tokyo
Windowsでも使えるシェル
シェル芸初心者によるシェル芸入門 (修正版)
 
Awk勉強会用資料
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Unix 基礎
 
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
Usptomonokai 20111028
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
mlr-grep - レコード指向grep
業務報告会
誰得コマンド&オプション35連発
OSC2012 Tokyo Spring, USP lab. presentation
2012年10月27日 Hbstudy#38
20130223 OSC Tokyo/Spring
StatGenSummerSchool2023_Linux.pdf

More from 博文 斉藤

PDF
お手軽並列処理
PDF
Obsidian Talk JP 資料 - 2021-10-15
PDF
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
PDF
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
PPTX
curl で iPhone にプッシュ通知しよう
PPTX
USP 友の会 LT 資料 20130413
PDF
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
PPTX
Shell で制限付き並列処理をしよう
PDF
Markdown で行こう!
PPT
「やっちまったぁ!」を防ごう!
お手軽並列処理
Obsidian Talk JP 資料 - 2021-10-15
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
curl で iPhone にプッシュ通知しよう
USP 友の会 LT 資料 20130413
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
Shell で制限付き並列処理をしよう
Markdown で行こう!
「やっちまったぁ!」を防ごう!

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

  • 1.
    GNU awk (gawk)を用いた ログ解析方法 Apache ログ解析方法 斉藤 博文
  • 2.
    自己紹介斉藤博文 日本GNU AWK ユーザー会主宰。 hi_saito@yk.rim.or.jp @hi_saito http://gauc.no-ip.org/awk-users-jp/ さて、今回の課題です。
  • 3.
    目的Apache のログを簡単に整理したい。 combined 形式でも common 形式でも手 軽に処理したい。 項目分割を簡単にしたい。 コードの量を少なく、分かりやすくしたい。 でも awk は Apache の処理が苦手です。
  • 4.
    何故、苦手なのか何故、苦手なのか? Apache のログ項目は3 つの形式がある。 スペース区切。 → awk で処理できる。 ダブルクォートで囲まれて中身にスペースが含ま れる。 大括弧で囲まれて中身にスペースが含まれる。 そんな時には GNU awk (gawk) です!
  • 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.
    gawk で何ができるか? 今回紹介する方法は2 つ。 gensub() 関数で後方参照を使った方法。 gawk4 から導入された FPAT でフィールド自 体の正規表現を記述する方法。 それぞれを説明します。
  • 7.
    関数で後方参照を いる場合gensub() 関数で後方参照を用いる場合メリットとデメリット sed や Perl と同じような記述で分割できる。 combined 形式と common 形式を分けなく てはいけない。 フィールドに分割されるのではなく、配列または 変数として分割される。 例を示します。
  • 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.
    フィールド自体 指定するFPAT でフィールド自体を指定する場合メリットとデメリット コードが短い。 combined 形式と common 形式で変える 必要がない。 $1, $2... というフィールドに分割される。 まだメジャーじゃない。 例を示します。
  • 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.
    デモ デモします。 gensub() 関数を用いた例。 FPAT を用いた例。 どうでしょうか?
  • 12.
    応用例CSV ファイルでも FPATは使えます。 FPAT = "([^,]+)|(¥"[^¥"]+¥")"; ただし、改行を含むものは使えません。 小さな努力で大きな成果を生み出す。
  • 13.
    まとめ Apache のログはgawk4 でやろう。 時間があれば、おまけをやります。
  • 14.
    おまけ gawk でスタートスクリプトを書こう。 変数のデフォルト設定の書き方。 switch 文の使い方。 RETVAL の取得方法。 gawk ならできるよ
  • 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.
    おまけfunction start_prog(cmd) {functionstart_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.
    おまけ awk はUnix の「純文学」です。 いろいろなところで便利に使っていきましょう。 ご清聴ありがとうございました。

[8]ページ先頭

©2009-2025 Movatter.jp