prometheus-nginxlog-exporterでNginxのアクセスログを集計してみた

はじめに

タイトルの通り,Nginxのアクセスログをいい感じに可視化したかったのでやってみました.
データの収集にはprometheusを,可視化にはGrafanaを使用しました.

環境

  • Ubuntu 18.04
  • nginx/1.19.4
  • prometheus-nginxlog-exporter 1.8.0

prometheus-nginxlog-exporterのインストール

github.com
ドキュメントのとおりにインストールすればOKです.
今回はdebパッケージをダウンロードしてaptでインストールしました.
インストール後は/etc/prometheus-nginxlog-exporter.hclに設定ファイルが置かれるので,これを編集します.
設定は以下のように書きました.

listen {
  port = 4040
  metrics_endpoint = "/metrics"
}

namespace "nginx" {
  source = {
    files = [
      "/var/log/nginx/access.log"
    ]
  }

  format = "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" \"$http_x_forwarded_for\""

  labels {
    app = "default"
  }
}

ほとんどすべてデフォルト設定です.

prometheusの設定

以下のように,prometheusの設定にexporterの設定を追記します.

  - job_name: 'nginxlog'
    static_configs:
    - targets:
      - 'example.com:4040'

Grafanaの設定

いい感じに設定するといい感じに可視化できます.
例えば,リクエストメソッドとステータスコードごとに可視化するには,以下のようなクエリを書けばOKです.

sum(rate(nginx_http_response_count_total[1m])) without (job,app)

他にも,「5xxが一定数を超えたらアラートを出す」みたいなのも簡単にできます.

おわりに

意外と簡単にアクセスログの集計ができたので良かったです.
さらに高度な集計を行う場合には,Fluentd等を使うのが良さそうです.
FluentdもGrafanaで可視化ができます.
www.fluentd.org
最近はGrafana Lokiを使うのが流行りみたいですね.
grafana.com
こちらもいつか使ってみたいと思います.