Linux基礎

Linuxログ解析〜messages,access(apache/squid),ldapのlogをgrep,cut&sort&uniqでお手軽本格解析~

messages ログの調査方法

エラー系の文字列が含まれていないかを確認するコマンド

# cat /var/log/messages | grep -i -e emerg -e alert -e crit -e error -e warn -e fail -e fatal | more

grepは複数行ある入力から、特定文字列を含む行を抽出するコマンドです(-v コマンドは特定文字列を含まない行を抽出します)。

grep の -i オプション

grep の -i オプションは case Insensitive つまり大文字小文字の区別を行わない、というオプションです。

grep の -e オプション

grep の -e オプションはor条件を並べるときに使います。-i だけでなく、-v にも使えます。例えば cron が動くたびに出力される Starting user-0.slice や Started Session や Starting Session 等を除外した場合は以下のようにコマンドを打ちます。

# cat /var/log/messages | grep -v -e " systemd: Started " -e " systemd: Starting " | more

Apache や SQUID(Proxy) のアクセスログの解析方法

各ページでどれくらいアクセスがあるかを確認するコマンド

# cat /var/log/httpd/access_log | grep GET | cut -d " " -f 7 | sort | uniq -c | sort -nr

cut コマンドは1行の文字列から区切り文字を元に文字列を切り取るコマンドです。

cut の -d オプション および -f オプション

cut の -d オプションの後には区切り文字を指定します。ここではスペースを指定しています。(デフォルトではタブが区切り文字)

また、cut の -f オプションはフィールド位置の指定です。-d でスペースを指定しているので、先頭から6つ目のスペースと7つ目のスペースの間の文字列が抽出されます。

この cut コマンドが、スペースの連続数が異なるたにうまく行かない場合は、grep とcut の間に | tr -s |を挟み、重複するスペースを1つにしてからcutします。

また、-f 以降の値は環境によって異なります(例えばsyslogサーバに溜まったログを見てる場合等)ので、どの数値が当てはまるかは、ログのフォーマットを確認して適切な数値を入れます。

uniq の -c オプション

uniq コマンドは重複した行を抽出するコマンドですが、連続して重複している必要があるので、sortコマンドで並べ替えをした後に使うことが多いです。

-c オプションを使うと重複した数を表示することができます。

sort の -n オプション および -r オプション

sort コマンドはデフォルトでは文字列を昇順に並べ替えします。a,b,cの場合は分かり易いですが、数字については、文字列として扱うと、例えば 2 と 11 を昇順で並べ替えると 11 の方が先になってしまいます。

-n オプションを付けると 文字列ではなく数字として扱うので、 2のほうが先になります。

また、-r オプションを使うと昇順ではなく降順で表示することができます。

今回はカウント数が多いほう(つまりアクセス数の多いページ)を上に表示させたいので、-nr オプションを付け加えます。

なお、これらを組み合わせればOpenLDAPのログも同様の解析が可能で、どのような IP から LDAP サーバへアクセスしているかを調査することができます。

つまり cat /var/log/ldap.log | grep "ACCEPT from IP=" でLDAPクライアントのIPアドレスを含む行のみを抽出し、上記コマンドを組み合わせるわけです。

OpenLDAP のもう少し具体的なログ検索については以下をご参照下さい。

OpenLDAP のログの見方、確認、解析方法
前提知識 BIND DN と Base DN についての知識が必要になりますので...

コメント

タイトルとURLをコピーしました