apache

apachenのアクセスログを見やすく整形するコマンド5選

apacheのログファイルは見づらいと感じることも多いですが、
とあるコマンドを使うことで自分の意のままに出力結果を操ることが可能です。

今回は、Linux標準搭載のコマンドで出力結果を見やすくしてゆきます。

apacheの設定

今回コマンドの使い方を紹介するにあたり、
下記のようなログフォーマットを設定している前提で進めます。

一般的なapacheのログフォーマットだとX-Forwarded-Forは設定に入ってないはずですので、
その点も考慮して読み進めていただければと思います。

使えるコマンド

grep

grepコマンドは文字列を検索するためのコマンドです。
ログファイルで使うときは、特定の文字列があるかを確認するために用います。
また、正規表現が使用できるので複雑なコマンド形式でも
検索を行うことが可能です。

使い方

grepコマンドは引数にファイル名を指定して使うこともできますが、
ここではあえてパイプで繋いで出力したものを操作してみます。
※grep以外のコマンド使う際にもパイプは使うので、
慣れて覚えちゃいましょう!

このコマンド例では、hogeという文字がマッチしたらその行全体を出力するようになっています。
実際のログではどのように扱えるのか見てみましょう。

これは、自宅で作成しているアプリケーションをテストした時のログです。
この中で「2020:23:40:20」に該当する箇所だけをgrepで抽出してみます。

ちゃんと抽出できましたね。
grepは特定の文字列が存在する行をまるごと出力できるので、
1行にどのような情報があるのかを見ることもできますね。

sed

文字列の中から特定箇所の文字を抽出可能で、
抽出された文字列を別の文字列に置換することが可能です。
ログファイルに使うときは、特定のIPアドレスを一括で「sample」といった
任意の文字に変えたいときに使えます。
試しに先ほどのログの出力を書き換えてみましょう。

左側にあったIPアドレスがsampleという文字に置きかわりました。
このsedというコマンドは文字列を置換するときに重宝するコマンドです。
sed -e で正規表現を使った置換が可能になります。
\'\'(シングルクォート)で囲まれている部分が置換対象になり、
s//の中にある部分が対象文字列です。
//gの中にある部分が置換後の文字列なので、
任意の文字に変えることが可能になります。
ここではIPアドレスを変えてみましたが、
もちろん他の文字も置換することができますよ。

awk

awkコマンドは奥が深いコマンドで、できることは多岐にわたります。
列の概念があるので出力したい列を指定することができます。
例えば、Apacheのようなサーバログではスペースが空いている個所がたくさんありますが、
「スペースで区切られた○列目を表示」といった出力の指定方法があります。

使い方

awk \'{print $?}\'とすることで、入力された文字列の
スペース区切りを識別して?列目の文字だけを出力することが可能です。
今回の例では、2列目・5列目・6列目・7列目・8列目を出力させるようにしてます。
こうやって整形することで、少し分かりやすくなったと思います。
awk \'{print $2,$5,$6,$7,$8}\'のようにカンマ区切りで指定すると、
スペースを空けたままで出力できます。
カンマ区切りを無くせばスペースを消して結合した状態にできます。

-apache
-