A Day In The Life

とあるプログラマの備忘録

Prometheusで収集したメトリクスを使ってCloud Monitoringのダッシュボードを作成する

Prometheus で収集した GKE アプリケーションのメトリクスを GCP の Cloud Monitoring(旧Stackdriver Monitoring) にエクスポートして Cloud Monitoring のダッシュボードを作成する方法を紹介します。Prometheus といえば Grafana を使ってダッシュボードを作成することが多いですが GCP 環境では Cloud Monitoring に一元化して監視できたほうが何かと便利です。あえて Grafana を使わず Cloud Monitoring でメトリクスを可視化します。

以下の記事で GKE 上に構築した Redis のメトリクスを Prometheus を使って収集しました。この環境を利用して Prometheus から Cloud Monitoring にメトリクスをエクスポートする方法を紹介します。

glassonion.hatenablog.com

メトリクスを Cloud Monitoring にエクスポートする方法

Prometheus のメトリクスを Cloud Monitoring にエクスポートする方法は以下の2つがあります。

  • prometheus-to-sd
  • stackdriver-prometheus-sidecar

prometheus-to-sd は prometheus text format (Prometheusのメトリクスデータの形式)を Cloud Monitoring 形式に変換してエクスポートすることができるツールです。ただし prometheus-to-sd は GoogleKubernetes チームが必要とする指標のみをサポートするように開発されたもので使用用途が限定されているのとドキュメントが少ないのであまりおすすめしません(使ったことがないので実際のところどうなのかわかりませんが)。

一方の stackdriver-prometheus-sidecar は Stackdriver が開発した Prometheus のメトリクスを Cloud Monitoring にエクスポートするためのツールです。GCP の公式ドキュメントでも stackdriver-prometheus-sidecar を使って Cloud Monitoring に指標をエクスポートする方法が紹介されています。

この記事ではドキュメントも多く情報が充実している stackdriver-prometheus-sidecar を使います。

メトリクスを Cloud Monitoring にエクスポートするためのポイント

ポイントは3つあります。

  • Prometheus のメトリクス収集は static_config ではなくサービスディスカバリを使って行う
  • Prometheus のメトリクスデータを共有ボリュームに書き込むように設定する
  • stackdriver-prometheus-sidecar のコンテナを Prometheus のサイドカーとして配置する

Prometheus のメトリクス収集は static_config ではなくサービスディスカバリを使って行う

static_config だと stackdriver-prometheus-sidecar が Prometheus から情報を読み出せないので Prometheus のメトリクス収集は static_config ではなく サービスディスカバリで行ってください。

Prometheus のメトリクスデータを共有ボリュームに書き込むように設定する

stackdriver-prometheus-sidecar は共有ボリュームにある WAL(write-ahead-log) ファイルにアクセスしてメトリクスをエクスポートするので Prometheus が共有ボリュームに対してメトリクスデータを書き出すように設定する必要があります。WAL については以下のページに詳細があるので気になる方は参照してみてください。

stackdriver-prometheus-sidecar のコンテナを Prometheus のサイドカーとして配置する

stackdriver-prometheus-sidecar は Prometheus の収集したメトリクスを読み出して Cloud Monitoring にエクスポートするので、stackdriver-prometheus-sidecar を Prometheus のサイドカーとして配置します。

構成

今回の Kubernetes の構成は以下のようになります。

sequence dialog

Prometheus の Deployment の設定

それでは実際に Prometheus のメトリクスを Cloud Monitoring にエクスポートする環境を構築してみます。Prometheus と stackdriver-prometheus-sidecar のコンテナを配置する Deployment ファイルを以下のように作成してください。

Deployment ファイルの重要な設定をみていきましょう。

共有ボリュームにデータを書き出すための設定

以下はPrometheus のデータ書き込みを共有ボリュームにするための設定です。23行目部分の storage.tsdb.path=/data で指定しています。

args:
  - '--config.file=/etc/prometheus/config/prometheus.yaml'
  - '--storage.tsdb.path=/data' #共有ボリュームに書き込むための設定

stackdriver-prometheus-sidecarコンテナの配置

以下の31行目から44行目が stackdriver-prometheus-sidecar コンテナの配置設定になります。 {{GCPプロジェクトID}}{{クラスタ名}} はお使いの GCP プロジェクトの環境に合わせて変更してください。

- name: sidecar
  image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.7.3
  args: [
    "--stackdriver.project-id", "{{GCPプロジェクトID}}",
    "--stackdriver.kubernetes.cluster-name", "{{クラスタ名}}",
    "--stackdriver.kubernetes.location", "asia-northeast1",
    "--prometheus.wal-directory", "/data/wal",
    "--prometheus.api-address", "http://127.0.0.1:9090",
  ]
  ports:
  - containerPort: 9091
  volumeMounts: # 共有ボリュームのマウント
  - name: data-volume
     mountPath: /data

こちらの記事で作成した prom-deployment.yaml ファイルを今回作成した yaml ファイルに置き換えて Kubernetes にデプロイすれば構築は完了です。

Metrics explorerでグラフを作成する

ここまでの設定で Prometheus のメトリクスを Cloud Monitoring の外部指標として取得できるようになりました。Cloud Monitoring で外部指標をグラフ化する手順は以下のようになります。

  1. GCP の Cloud Console で、[Monitoring] を選択します
  2. [Monitoring] のナビゲーションパネルで、[Metrics explorer] をクリックします
  3. [Find resource type and metric] メニューで、次(4と5)の手順を行います
  4. [Resource type] として [Kubernetes Container](k8s_container)を選択します(gke_containerではないので注意)
  5. [Metric] フィールドには、接頭辞 external.googleapis.com/prometheus/ を含む指標を選択します

以下は外部指標 external.googleapis.com/prometheus/redis_cpu_user_seconds_total をグラフ化したイメージです。

f:id:glass-_-onion:20200529192144p:plain

参考