概要
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が収集可能なメトリクスを公開するようになります.