エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Windowsでの効率的なログ解析

きっかけ

Syslogを見ることが多くなって、なんか効率的に検索できる方法ないか考えた結果をまとめる。

ログを見る県境

たぶん、普通のWindows環境じゃ無理。

まずは、MinGW入れる。
やっぱりログ調査となると、LinuxUNIX系の環境がないと辛い。

MinGW使えないときの対応

やるならエディタで正規表現を上手く使ってやるしかない。

該当する文字の検索は簡単なハズ。
問題は、特定文字に該当しない行を抽出する時。

正規表現では、以下の通り。

^(?!.*(XXX|WWW)).+$

上記例では、XXXかWWWを含まない行が抽出される。
大抵の場合は、検索したいワードを指定して、それ以外の行を削除するのが、いつもの使い方。

あとは、ガンバって解析しましょう。

MinGW環境が用意できる場合

使うスキルは、grep、less、正規表現
これらを使えばなんとかなる。

grep

特によく使うのは、下記のコマンド

grep -E 検索正規表現 検索したいテキストファイル

利用できる正規表現

.                    改行文字以外の任意の1文字
*                    直前の1文字の0回以上の繰り返しに一致。直前の文字は正規表現でも構わない
^                    行の先頭
$                    行の末尾
[ ]                  かっこ内の任意の1文字に一致。ハイフン(-)で範囲指定もできる
[^ ]                 かっこ内の任意の1文字に不一致。ハイフン(-)で範囲指定もできる
\+                   直前の文字の1個以上の繰り返しに一致
\?                   直前の文字の0または1文字に一致
\{n\}                直前の文字のn個の繰り返しに一致
\{n,\}               直前の文字のn個以上の繰り返しに一致
\{,m\}               直前の文字のm個以下の繰り返しに一致
\{n,m\}              直前の文字のn個以上,m個以下の繰り返しに一致
pattern1\|pattern2   pattern1またはpattern2のいずれかに一致
\(pattern\)          patternをグループ化する。マッチした内容は\numで参照できる
\                    正規表現に使われる記号を普通の文字として扱う

やってることはエディタでやってるのと一緒。
コレだけだと、やってることはエディタと一緒。
lessと組み合わせることで、ものすごく解析が捗る。
説明はlessで。

あと、ログはタイムスタンプを必ずつける。
時間の価値は偉大。
あるとないとではうんていの差が出る。
整合性確認のためにも、タイムスタンプは必須。

less

コマンドの基本的な使い方は、ITproで。

Linuxコマンド集 - 【 less 】 テキスト・ファイルの内容を閲覧する:ITpro

grepとの連携は、パイプラインで繋げる。

grep -E "XXX" | less

コイツのいいところは、表示後に色々できること。

例えば、表示後に行番号欲しいなぁ~って思ったら、-Nを入力。
一旦どこかに検索結果を保存して置きたいなぁ~って思ったら、-o ファイル名 ※表示中に一度しか使えないので注意
そもそも抽出が検討ちがいだったら、一旦終了してgrep条件考え直す。

less+grepのいいところ

エディタで調査していた頃より、余計な情報でイライラすることが少なくなった。
ある程度、関係しそうな情報を抽出できるので、原因特定がしやすい。
エディタでもできなくはないけど、新規ウィンドウかタブを立ち上げて、全部コピペ→抽出は、正直言って面倒くさい。
やれることは、MinGWない環境でも一緒だけど、手間が増えるってのがネック。

意外とちょっとした面倒なことって、続かないもんだぜ!

参考サイト

エンジニアなら知っておきたい lessコマンドtips 11選 - Qiita