LoginSignup
28
14

More than 5 years have passed since last update.

fluent-plugin-prometheusをリリースしました

Posted at

ソースコード: https://github.com/kazegusuri/fluent-plugin-prometheus
Gem: https://rubygems.org/gems/fluent-plugin-prometheus

Prometheusは最近できたOSSのモニタリングシステムです。発表当時は少し触っている人がいましたが今はあまり聞かなくなりました。開発自体は順調に進んでいるようです。日本語ではこのあたりで紹介されています。

PrometheusはGraphiteと同様にメトリクスを収集してグラフ化やアラートなどができるものです。
今回作ったfluent-plugin-prometheusはFluentdでメトリクスを収集してPrometheusと連携するものです。少し異なるのはFluentdからPrometheusに送信するのではなく、PrometheusからFluentdにメトリクスを取得しにいくという違いがあります。

余談ですがなぜPrometheusを使っているかというと、Kubernetesがシステム内部のメトリクス収集にPrometheusを使っているからです。まだPrometheus自体微妙なところもありますが、これから盛り上がるかもしれません。

使い方

fluent-plugin-prometheusは4つのプラグインを内蔵しているのでそれぞれを説明します。

prometheus input plugin

プラグインで収集したメトリクスをPrometheusに渡すためのエンドポイントを設定するプラグインです。必ず設定しておく必要があります。

<source>
  type prometheus
</source>

これでポート23231でLISTENされるのでPrometheusからメトリクスが取得できるようになります。

prometheus_monitor input plugin

Fluentd本体に組み込みで入っているmonitor_agentプラグインの情報を自動的に取得してPrometheusに渡すプラグインです。

現在取得できるものはBufferedOutputプラグインの以下の情報です。

  • キューの長さ
  • 全データサイズ
  • 現在のリトライ数

prometheus output/filter plugin

メインとなるメトリクスを収集するためのプラグインです。OutputとFilterの両方をサポートしています。使い勝手はほぼ同じです。ここではFilterでの使い方を説明します。

<filter message>
  type prometheus

  ## レコード中のfooの値をcounterメトリクスとして収集
  <metric>
    name message_foo_counter                 ## Prometheusのmetric名
    type counter                             ## Prometheusのmetric type
    desc The total number of foo in message. ## Prometheusのmetricの説明文
    key foo                                  ## どのkeyの値を収集するか
    <labels>                                 ## 付与するラベル
      key foo                                ## key=foo でラベルを追加
      data_type ${type}                      ## レコード中のtypeの値をラベルの値として利用
    </labels>
  </metric>

  ## レコード中のbarの値をcounterメトリクスとして収集
  <metric>
    name message_bar_counter
    type counter
    desc The total number of bar in message.
    key bar
    <labels>
      key foo
    </labels>
  </metric>

  ## 2つのメトリクスの共通のラベル
  <labels>
    host ${hostname}
    tag ${tag}
  </labels>
</filter>

<match message>
  type stdout
</match>

上記のようにメトリクスを収集したいレコードに処理を挟むようにFilterを追加するだけです。Filterプラグインですが元のレコードの値を変更することはありません。

この状態でmessageというタグ名でfooやbarを含むレコードを送信するとmessage_foo_countermessage_bar_counterというメトリクスが生成され、Prometheusから収集されるようになります。

Prometheusで重要な概念であるラベルも自由に設定できるようにしてあります。レコードの中から値を設定できるので、例えばHTTPのレスポンスコードをラベルの値として追加してレスポンスコード毎の比率をグラフ化なども可能です。

チュートリアル

データを用意したり、Prometheusのセットアップが面倒という場合はチュートリアルも用意してあるので試してみて下さい。

prom.png

28
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
14