mtailによるログからのPrometheusメトリクス生成と公開

概要

mtail は、Googleが開発したオープンソースのログパースツールです。ログファイルから特定のパターンに一致する行を抽出し、それに基づいてメトリクスを生成し、/metrics エンドポイントにPrometheus形式で公開することができます。これにより、既存のログからビジネスメトリクスやシステムの状態をPrometheusで収集・監視することが可能になります。

mtailの使い方

mtailを利用するには、mtailプログラム(デーモン)を起動し、監視対象のログファイルと、メトリクスを定義するmtailプログラム(設定ファイル)を指定する必要があります。

mtailプログラム(設定ファイル)の例: sample.mtail

mtailプログラムは、Go言語に似た独自の構文で記述されます。

# メトリクスの定義と初期化
# 'errors_total' という名前のカウンタータイプのメトリクスを定義
counter errors_total

# ログファイル内のパターンマッチングルール
# 各行が「error」を含む場合に、errors_totalカウンターをインクリメント
/error/ {
  errors_total++
}

# 例: HTTPリクエストのステータスコードをカウント
# 正規表現でステータスコードをキャプチャし、ラベルとして使用
/^HTTP\/1\.[01] (\d{3})/ {
  http_requests_total[$1]++
}
counter http_requests_total by status_code
  • counter errors_total: Prometheusで使用するメトリクスを定義しています。counter はカウンタータイプのメトリクスで、値は単調増加します。
  • /error/ { errors_total++ }: ログの各行が正規表現 /error/ にマッチした場合に、errors_total カウンターを1増加させます。
  • counter http_requests_total by status_code: http_requests_total というカウンターメトリクスを定義し、status_code というラベルを持つことを示しています。
  • /^HTTP\/1\.[01] (\d{3})/ { http_requests_total[$1]++ }: HTTPアクセスログからステータスコード(例: 200, 404, 500)を抽出し、そのステータスコードをラベルとして http_requests_total カウンターをインクリメントします。

Dockerでmtailを起動する

mtailをDockerコンテナとして実行することで、環境構築の手間を省き、簡単にデプロイできます。

# ベースイメージとしてCentOS 7を使用
FROM centos:7

# wgetをインストールし、キャッシュをクリア
RUN yum install -y wget && yum clean all

# 作業ディレクトリを/tmpに設定
WORKDIR /tmp

# mtailのバイナリをダウンロードし、展開、実行権限を付与
# リリースバージョンは適宜最新のものに更新してください
RUN wget -O mtail.tar.gz https://github.com/google/mtail/releases/download/v3.0.0-rc52/mtail_3.0.0-rc52_linux_amd64.tar.gz && \
    tar xzvf mtail.tar.gz && \
    chmod +x mtail

# コンテナ起動時に実行されるコマンド
# -progs: mtailプログラム(設定ファイル)のパスを指定
# -logs: mtailが監視するログファイルのパスを指定
# 例: CMD ["/tmp/mtail", "-progs", "/etc/mtail/sample.mtail", "-logs", "/var/log/nginx/access.log"]
CMD ["/tmp/mtail", "-progs", "/path/to/sample.mtail", "-logs", "/path/to/logfile"]

# mtailがメトリクスを公開するデフォルトポート (Prometheusがスクレイピングするポート)
EXPOSE 3903

CMD 命令の引数

  • -progs /path/to/sample.mtail: mtailが使用する設定ファイル(mtailプログラム)のパスを指定します。コンテナ内に配置したmtailプログラムのパスを指定してください。
  • -logs /path/to/logfile: mtailが監視するログファイルのパスを指定します。mtailはこのログファイルを監視し、設定に定義されたパターンに一致する行を検出して対応するメトリクスを生成します。このログファイルは、Dockerのボリュームマウントなどを使ってコンテナ内に提供する必要があります。

このDockerイメージをビルドし、実行することで、mtailがログを監視し、Prometheusが収集可能なメトリクスを公開するようになります.