GrafanaとPrometheusを使ってFluent Bitのデータパイプラインを監視する

# はじめに
ログ収集ツールには様々な選択肢がありますが、その中でもFluentdやFluent Bitを利用した経験がある方もいらっしゃるのではないでしょうか。特にFluent Bitは、軽量でシンプルな設計が特徴で、リソースが限られた環境でも運用しやすいツールとして注目されています。

さらに、Fluentdと同様に独自プラグインを開発できるなど、ユーザ側のカスタマイズ性が高い点も大きな特徴です。これにより、様々なニーズに合わせた柔軟なログ収集パイプラインを構築することが可能です。

一方で、開発や運用中に、ログが正常に収集されているか、どの程度リソースが使われているかなど、様々なメトリクスを監視したいと思うことも多いのではないでしょうか。

本記事では、GrafanaとPrometheusを使ってサクッとFluent Bitのデータパイプラインを監視する方法をご紹介します。

# Fluent Bitのメトリクスについて

Fluent Bitは自身のパイプラインに関するメトリクスを提供してくれています。実際にどんなメトリクスを提供しているかは公式ドキュメントをご参照ください。

https://docs.fluentbit.io/manual/administration/monitoring

# Fluent Bitの設定ファイルを準備

今回は、適当にCPU使用率(cpu)を内部メトリクスに基づいて監視したいと思います。
Prometheus Exporterはメトリクスプラグインのみでしか動作しないことに注意してください。
``` fluent-bit.conf
[SERVICE]
    flush           1
    log_level       info

[INPUT]
    name            fluentbit_metrics
    tag             internal_metrics
    scrape_interval 5

[INPUT]
    name            cpu
    tag             cpu_metrics
    interval_sec    5

[OUTPUT]
    name            prometheus_exporter
    match           *
    host            0.0.0.0
    port            2021
```

# Prometheusの設定ファイルの準備
なるべくリアルタイムで監視したいので、収集間隔を5秒にしておきます。また今回は同一のDockerネットワーク内で動かすため、targetsの箇所をcomposeファイルのサービス名と合わせます。

```prometheus.yaml
global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "fluentbit"
    static_configs:
      - targets: ["fluentbit:2021"]
```
# Docker Composeの準備
こんな感じでcomposeファイルを準備します。なんとなくFluent Bitはdebugありのイメージを持ってきています。リリース版はDistoless imageゆえにshellなどがないのでご注意ください。
``` compose.yaml
version: '3.8'
services:
  fluentbit:
    image: fluent/fluent-bit:3.0.3-debug
    ports:
      - "2021:2021"
    volumes:
      - "./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf"
    command: ["/fluent-bit/bin/fluent-bit", "-c", "/fluent-bit/etc/fluent-bit.conf"]

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - "./prometheus.yaml:/etc/prometheus/prometheus.yaml"

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin # ここはお好きに
      - GF_SECURITY_ADMIN_PASSWORD=admin # ここもお好きにどうぞ。どうせローカルです。
    volumes:
      - grafana-data:/var/lib/grafana

volumes:
  grafana-data:

```

# 環境を立ち上げる
以下のようなディレクトリ構造でファイルを配置し、環境を立ち上げます。
```
$ tree .
.
├── compose.yaml
├── fluent-bit.conf
└── prometheus.yaml
```
```
$ docker compose up -d
```

# Grafana上で監視する

`localhost:3000`に繋ぐとGrafanaが起動しているので確認しに行きましょう。初回起動時には、ユーザ名とパスワードが求められるので、上のcomposeファイルで設定したパラメータを入力します。

今回の場合だと両方`admin`です。
ログインできたら、パスワードを変えろとか言ってきますが、所詮ローカルなので無視します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924204/949d4f75-fcf1-3118-9402-57c77d924bf1.png)

左らへんにある`Data Sources`を選択後、`Add new Data source`を選択。
connectionの箇所にprometheusのURLを記載します。

今回の場合だと`http://prometheus:9090`です。
![FireShot Capture 052 - prometheus - Data sources - Connections - Grafana - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924204/ca021634-4149-dc30-365f-6e2afcba748d.png)

あとはDashboardsのセクションからお好きなメトリクスを監視するダッシュボードを作るだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924204/cc4d76be-ab76-feb3-141c-ff5727371b0f.png)

こんな感じの良さげなグラフができます。PromQLも使えて便利！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924204/68a91ba0-9ee7-d948-0b7f-99481bb641af.png)


公式配布されている[設定ファイル](https://github.com/fluent/fluent-bit-docs/blob/8172a24d278539a1420036a9434e9f56d987a040/monitoring/dashboard.json)を読み込むとなんかいい感じになります。(どうやらKubernetes用の設定ファイルっぽいのでグラフ上の箇所がちゃんと読み取れてなさそう）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924204/770a4538-0b4d-ac2b-a3a5-43b30a2d3863.png)


# 参考
https://prometheus.io/

https://grafana.com/

https://docs.fluentbit.io/manual