この記事は、Mackerel アドベントカレンダー(全部CRE)の13日目の記事です。
今回は、昨年の「全部CRE」アドベントカレンダーに敬意を表して、そのフォーマットにならい、Mackerelの公式プラグインのうちのひとつ・mackerel-plugin-accesslog について解説をしていきたいと思います!
当記事が前提とするバージョン
この記事を書いている今の最新版である、mackerel-agent-plugins の v0.53.0 を前提としています。
Releases · mackerelio/mackerel-agent-plugins · GitHub
どんなプラグイン?
mackerel-plugin-accesslog は、Apacheログフォーマット、もしくはLTSV形式で出力されたアクセスログを解析し、各種グラフを出力できるプラグインです。いわゆる nginx や Apache などのWebサーバーのアクセスログの解析にもってこいのプラグインです。
インストールと設定手順
mackerel-plugin-accesslog プラグインは、プラグイン集として提供しているパッケージ、 mackerel-agent-plugins
に含まれています。以下のようなコマンドでインストールすることができます。
$ yum install mackerel-agent-plugins
$ apt-get install mackerel-agent-plugins
詳細は下記ヘルプページも参照してください。
https://mackerel.io/ja/docs/entry/howto/mackerel-agent-plugins
インストール先は /usr/bin/mackerel-plugin-accesslog
です(他のプラグインも同じ場所にインストールされています)。
このプラグインに限らず、Mackerelのプラグインは要はコマンドですので、手動で実行する事ができます。
$ mackerel-plugin-accesslog /var/log/nginx/access.log accesslog.access_rate.5xx_percentage 0 1544513887 accesslog.access_rate.4xx_percentage 0 1544513887 accesslog.access_rate.3xx_percentage 0 1544513887 accesslog.access_rate.2xx_percentage 100 1544513887 accesslog.latency.99_percentile 0.001000 1544513887 accesslog.latency.95_percentile 0.001000 1544513887 accesslog.latency.90_percentile 0.001000 1544513887 accesslog.latency.average 0.000600 1544513887 accesslog.access_num.total_count 5 1544513887 accesslog.access_num.5xx_count 0 1544513887 accesslog.access_num.4xx_count 0 1544513887 accesslog.access_num.3xx_count 0 1544513887 accesslog.access_num.2xx_count 5 1544513887
設定ファイルである mackerel-agent.conf は、デフォルトでは /etc/mackerel-agent/mackerel-agent.conf
にインストールされます。mackerel-plugin-acceslog を使う際の conf への追記内容などは、README.md に記載されていますので、ご確認ください。
mackerel-agent-plugins/README.md at master · mackerelio/mackerel-agent-plugins · GitHub
conf への追記ができたら、mackerel-agentを再起動することで設定完了です。
取得されるメトリック
このプラグインにより取得され、Mackerelにグラフ描画されるメトリックについて、以下に各グラフ定義ごとに説明します。
Access Num
ラベル名 | メトリック名 | 説明 |
---|---|---|
total_count | custom.accesslog.access_num.total_count |
1分間での総アクセス回数。 |
5xx_count | custom.accesslog.access_num.5xx_count |
1分間にあったアクセスのうち、ステータスコード 5xx で返したものの数。 |
4xx_count | custom.accesslog.access_num.4xx_count |
1分間にあったアクセスのうち、ステータスコード 4xx で返したものの数。 |
3xx_count | custom.accesslog.access_num.3xx_count |
1分間にあったアクセスのうち、ステータスコード 3xx で返したものの数。 |
2xx_count | custom.accesslog.access_num.2xx_count |
1分間にあったアクセスのうち、ステータスコード 2xx で返したものの数。 |
グラフはこんなかんじなものが描画されます。
Access Rate
ラベル名 | メトリック名 | 説明 |
---|---|---|
5xx_rate | custom.accesslog.access_rate.5xx_percentage |
1分間にあったアクセスのうち、ステータスコード 5xx で返したものの割合。 |
4xx_rate | custom.accesslog.access_rate.4xx_percentage |
1分間にあったアクセスのうち、ステータスコード 4xx で返したものの割合。 |
3xx_rate | custom.accesslog.access_rate.3xx_percentage |
1分間にあったアクセスのうち、ステータスコード 3xx で返したものの割合。 |
2xx_rate | custom.accesslog.access_rate.2xx_percentage |
1分間にあったアクセスのうち、ステータスコード 2xx で返したものの割合。 |
グラフはこんなん↓です。
Latency
ラベル名 | メトリック名 | 説明 |
---|---|---|
Average | custom.accesslog.latency.average |
1分間にあったアクセスのレイテンシの平均値。 |
90 Percentile | custom.accesslog.latency.90_percentile |
1分間にあったアクセスのレイテンシの、90パーセンタイル値。 |
95 Percentile | custom.accesslog.latency.95_percentile |
1分間にあったアクセスのレイテンシの、95パーセンタイル値。 |
99 Percentile | custom.accesslog.latency.99_percentile |
1分間にあったアクセスのレイテンシの、99パーセンタイル値。 |
こちらもグラフをどうぞ!
利用可能なオプション
-metric-key-prefix
このプラグインで取得されるメトリック、描画されるグラフのラベルなどに prefix を付与することができます。これを活用することにより、ひとつのホスト内で複数のアクセスログを解析することも可能です。こんな↓かんじ。
[plugin.metrics.accesslog] command = "mackerel-plugin-accesslog /var/log/nginx/access.log" [plugin.metrics.accesslog_test] command = "mackerel-plugin-accesslog -metric-key-prefix test /var/log/nginx/access_test.log"
パース対象のアクセスログファイルは必ず最後に指定しなければいけない(ログファイルは引数として指定されることを期待している(最初の引数を対象ファイルとする))ので、その点は要注意です。
-format
ちょっと内部実装の話になってしまいますが、このプラグインが対象のログファイルを読み込む際、その内容のパースだけでなく「これは Apache ログフォーマットか」「LTSVフォーマットか」というところの類推も含めて、Songmu/axslogparser を用いています。
フォーマットの類推は意外に(?)シンプルで、 \thost:
か \ttime:
の文字列が含まれていれば LTSV フォーマット・それ以外なら Apache ログフォーマット、としてパースを試みます。もしこれでうまく識別ができない、といった場合には、-format
オプションを使って監視対象ログファイルの形式を外部から指定することができます。
[plugin.metrics.accesslog] command = "mackerel-plugin-accesslog -format ltsv /var/log/nginx/access.log"
Apache ログフォーマットとして指定したい場合は -format apache
と指定してください。
-no-posfile
mackerel-agent に設定された mackerel-plugin-accesslog は、基本的に毎分、エージェントにより起動され、前回走査した位置(これを posfile として tmp に出力しています)から最後に出力されている情報までを対象に各種メトリックを計算して出力しています。
このオプションを指定すると、posfile を使わなくなります。つまり、毎回の走査をアクセスログ全件に対して実施する形になります。
[plugin.metrics.accesslog] command = "mackerel-plugin-accesslog -no-posfile /var/log/nginx/access.log"
基本的には使用しないオプションかと思いますが、動作確認にはご利用いただけるかと思います。
まとめ
Webサーバーのアクセスログを解析するのに便利なプラグイン、mackerel-plugin-accesslog を解説しました。そのサーバーへのアクセス状況がカラフルなグラフで描画される様子は、見ているだけでとても楽しいものです。知らなかった・導入していなかった、という方は、ぜひこの機会にお試しいただけたらと思います!