a stray sheep

お仕事周りの雑記帳

grok_exporterとExample

概要

grok_exporterを使ってみる

  • 対象のバージョンは、grok_exporter-1.0.0.RC3 (現時点の最新)
  • exampleで確認

grok_exporterとは?

  • 任意の非構造化ログデータから、Prometheusのメトリクスをエクスポートする
  • 非構造化ログデータをパースするのにGrokを使う

インストール

$ cd /opt/prometheus
$ sudo wget https://github.com/fstab/grok_exporter/releases/download/v1.0.0.RC3/grok_exporter-1.0.0.RC3.linux-amd64.zip
$ sudo unzip grok_exporter-1.0.0.RC3.linux-amd64.zip
$ sudo ln -s grok_exporter-1.0.0.RC3.linux-amd64 grok_exporter

フォルダの中身

grok_exporter //本体
example/   //grok_exporterを理解するためのサンプル
pattens/    //grokのパターンファイル置き場

example

このサンプルでは、サンプルログ example/exim-rejected-RCPT-examles.log をconfig.yml に従ってパースし、Prometheusのメトリクスにする。

設定ファイル

global:
    config_version: 3
input: 
    type: file
    path: ./example/exim-rejected-RCPT-examples.log
    readall: true
imports:
    - type: grok_patterns
       dir: ./patterns
grok_patterns:
    - 'EXIM_MESSAGE [a-zA-Z]*'
metrics:
    - type: counter
      name: exim_rejected_rcpt_total
      help: Total number of rejected recipients, partioned by error message
      match: '%{EXIM_DATE} %{EXIM_REMOTE_HOST} F=<%{EMAILADDRESS}> rejected RCPT <%{EMAILADDRESS}>: %{EXIM_MESSAGE:message}'
      labels:
          error_message: '{{.message}}'
          logfile: '{{base .logfile}}
server:
    protocol: http
    port: 9144

パラメータについてのさらっとした説明(恐らく)

  • input: -> readall:  trueはファイルの先頭から読み込む(検証、デバッグならこっち)、falseは新しい行から読む(運用ならこっち)
  • imports: 定義済みのgrok_patternsを使う場合。入れておけばいい。
  • grok_patterns: ここにカスタムのGROKパターン(正規表現)を直書きできる。patterns/ 配下にファイルを作ってそこに書いてもいい。
  • metrics: 読み込んだログ行を変数(メトリクス)に入れるところ
    • name: 変数名(メトリクス名)
    • match: ここが取りたいログの正規表現を作るところ。%{PATTERN: message} のようにすると、以降のlabelsで .message で呼び出せる
    • labels: メトリクス内のラベル
  • logfile: '{{base. logfile}} logifleは、GROKパターンに依存しないラベル変数でファイルのフルパスを表す。base はGoテンプレート関数でフルパスのうちファイル名を取り出すもの。いずれもマニュアルに書かれている。

match: について

match: '%{EXIM_DATE} %{EXIM_REMOTE_HOST} F=<%{EMAILADDRESS}> rejected RCPT <%{EMAILADDRESS}>: %{EXIM_MESSAGE:message}'
  • EXIM_DATE、EXIM_REMOTE_HOSTは、patterns/exim に定義されている
  • EMAILADDRESSは、patterns/grok_patterns に定義されている
  • EXIM_MESSAGEは、config.ymlのgrok_patterns に定義したもの

実行する

./grok_exporter -config example/config.yml

実行結果を確認する

http://localhost:9144/metrics にアクセスすると、以下のように表示される

exim_rejected_rcpt_total {error_message="Sender verify failed"} 2000
exim_rejected_rcpt_total {error_message="Unrouteable address"} 32
exim_rejected_rcpt_total {error_message="relay not permitted"} 165