Prometheus の使用

Prometheus は、Kubernetes でよく使用されるオプションのモニタリング ツールです。Prometheus のサポートを使用して Stackdriver Kubernetes Engine Monitoring を構成すると、Prometheus データモデルで指標を公開するサービスをクラスタからエクスポートして、Stackdriver の外部指標として表示できるようになります。

このページでは、Stackdriver が Stackdriver Kubernetes Engine Monitoring とともに動作する Prometheus クライアントからデータを収集する仕組みを示します。統合のソースコードは一般公開されています。

始める前に

ここで説明する Prometheus サポートは、Stackdriver Monitoring で説明されているレガシーの Stackdriver サポートと一緒には使用できません。

コレクタのインストール

Stackdriver によって提供されるコレクタを、Prometheus サーバーと同じ Kubernetes ポッドにサイドカーとしてデプロイする必要があります。次のシェルコマンドを使用して、Stackdriver Kubernetes Engine Monitoring を使用している新しいクラスタに Stackdriver コレクタをインストールします。

クラスタにログインし、必要な環境変数を設定して次のスクリプトを実行します。

  • KUBE_NAMESPACE: スクリプトを実行する名前空間
  • KUBE_CLUSTER: サイドカーのクラスタ名パラメータ
  • GCP_REGION: サイドカーの GCP リージョン パラメータ
  • GCP_PROJECT: サイドカーの GCP プロジェクト パラメータ
  • DATA_DIR: サイドカーのデータ ディレクトリ
  • DATA_VOLUME: Prometheus のデータが格納されるボリュームの名前
  • SIDECAR_IMAGE_TAG: Prometheus サイドカーの Docker のイメージ バージョン。Container Registry の最新リリースを使用することをおすすめします。
#!/bin/sh

set -e
set -u

usage() {
  echo -e "Usage: $0 <deployment|statefulset> <name>\n"
}

if [  $# -le 1 ]; then
  usage
  exit 1
fi

# Override to use a different Docker image name for the sidecar.
export SIDECAR_IMAGE_NAME=${SIDECAR_IMAGE_NAME:-'gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar'}

kubectl -n "${KUBE_NAMESPACE}" patch "$1" "$2" --type strategic --patch "
spec:
  template:
    spec:
      containers:
      - name: sidecar
        image: ${SIDECAR_IMAGE_NAME}:${SIDECAR_IMAGE_TAG}
        imagePullPolicy: Always
        args:
        - \"--stackdriver.project-id=${GCP_PROJECT}\"
        - \"--prometheus.wal-directory=${DATA_DIR}/wal\"
        - \"--stackdriver.kubernetes.location=${GCP_REGION}\"
        - \"--stackdriver.kubernetes.cluster-name=${KUBE_CLUSTER}\"
        #- \"--stackdriver.generic.location=${GCP_REGION}\"
        #- \"--stackdriver.generic.namespace=${KUBE_CLUSTER}\"
        ports:
        - name: sidecar
          containerPort: 9091
        volumeMounts:
        - name: ${DATA_VOLUME}
          mountPath: ${DATA_DIR}
"

構成の検証

Prometheus を構成したら、次のコマンドを実行してインストールを検証します。

kubectl -n "${KUBE_NAMESPACE}" get <deployment|statefulset> <name> -o=go-template='{{$output := "stackdriver-prometheus-sidecar does not exists."}}{{range .spec.template.spec.containers}}{{if eq .name "stackdriver-prometheus-sidecar"}}{{$output = (print "stackdriver-prometheus-sidecar exists. Image: " .image)}}{{end}}{{end}}{{printf $output}}{{"\n"}}'

Prometheus サイドカーが正常にインストールされると、スクリプトの出力は次のようになります。

stackdriver-prometheus-sidecar exists. Image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.3.2

Prometheus サイドカーが正常にインストールされなかった場合、スクリプトの出力は次のようになります。

stackdriver-prometheus-sidecar does not exist.

ワークロードが最新の状態で、利用可能かどうかを確認するには、次のコマンドを実行します。

kubectl -n "${KUBE_NAMESPACE}" get <deployment|statefulset> <name>

構成の更新

コレクタが正常にインストールされたことを確認したら、クラスタの構成を更新して変更を適用します。

  1. Prometheus サーバーの書き込み先を共有ボリュームにします。

    1. Prometheus ポッドに共有ボリュームがあることを確認します。

      volumes:
        - name: data-volume
          emptyDir: {}
      
    2. Prometheus に /data の下のボリュームをマウントします。

      volumeMounts:
      - name: data-volume
        mountPath: /data
      
    3. Prometheus サーバーに対して、/data 内の共有ボリュームに書き込むように指示します。そのコンテナの args に以下を追加します。

      --storage.tsdb.path=/data
      
  2. コレクタ コンテナをサイドカーとして追加します。

    - name: sidecar
      image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:[SIDECAR_IMAGE_TAG]
      args:
      - "--stackdriver.project-id=[GCP_PROJECT]"
      - "--prometheus.wal-directory=/data/wal"
      - "--stackdriver.kubernetes.location=[GCP_REGION]"
      - "--stackdriver.kubernetes.cluster-name=[KUBE_CLUSTER]"
      ports:
      - name: sidecar
        containerPort: 9091
      volumeMounts:
      - name: data-volume
        mountPath: /data
    

コレクタの詳細については、Stackdriver Prometheus サイドカーのドキュメントをご覧ください。

指標の表示

インストールした Prometheus ソフトウェアは、指標を外部指標として Monitoring へのエクスポートを開始するように構成されています。これらの指標は、[Stackdriver] > [Resources] > [Metrics Explorer] で表示できます。

Metrics Explorer に移動

モニタリング対象リソースのタイプ Kubernetes Containerk8s_container)で、external/prometheus/... という指標を探します。興味深いデータがある指標は external/prometheus/go_memstats_alloc_bytes です。ワークスペースに複数のクラスタがある場合は、次のスクリーンショットに示しているように、クラスタ名でグラフをフィルタリングできます。

Prometheus グラフ

Prometheus の統合に関する問題

Stackdriver にデータが表示されません。

インストール手順を完了した後で Stackdriver にデータが表示されない場合は、コレクタログで問題の可能性を表すエラー メッセージを調べてください。

エラーを明確に示すメッセージがログに含まれていない場合は、-log.level=debug フラグを指定してコレクタを再起動し、デバッグ ロギングを有効にします。コレクタの再起動後、問題の原因を示す新しいメッセージが表示されることがあります。

記録ルールを使用していますが、指標が Stackdriver に表示されません。

記録ルールを使用するには、特別な処理が必要になります。可能であれば、クエリ実行時にデータを集計できるように、Stackdriver と Stackdriver Monitoring の機能(グラフやダッシュボードなど)に未加工の指標を取り込むことをおすすめします。

未加工の指標を取り込むことができない場合は、コレクタの構成に static_metadata エントリを追加します(ドキュメントを参照)。このオプションを使用するには、job ラベルと instance ラベルを維持する必要があります。たとえば、次のような構成が有効です。

Prometheus Server の構成:

groups:
- name: my-groups
  rules:
  - record: backlog_avg_10m
    expr: avg_over_time(backlog_k8s[10m])
  - record: backlog_k8s
    expr: sum(total_lag) by (app, job, instance)

Stackdriver Prometheus コレクタの構成:

static_metadata:
  - metric: backlog_avg_10m
    type: gauge

現在、job ラベルや instance ラベルを変更または削除する記録ルールはサポートされていません。

指標に jobinstance の Prometheus ラベルがありません。

Stackdriver Prometheus コレクタは、よく知られている Prometheus ラベルから Kubernetes オブジェクト用の Stackdriver MonitoredResource を作成します。ラベル記述子を誤って変更した場合、コレクタはその指標を Stackdriver に書き込むことができません。

ログに「重複した時系列」エラーや「順序どおりでない書き込み」エラーがあります。

これらのエラーは、指標データが同じ時系列に 2 回書き込まれたことによって発生することがあります。Prometheus のエンドポイントで、1 つの Stackdriver モニタリング対象リソースからの同じ指標データ(指標ラベル値の同じセット)が 2 回公開されている場合に発生することがあります。

たとえば、Kubernetes コンテナは複数のポートで Prometheus 指標を公開することがあります。Stackdriver の k8s_container モニタリング対象リソースでは、ポートごとのリソースは区別されないため、Stackdriver は同じ時系列に 2 つのポイントが書き込まれていることを検出します。この問題の回避策は、時系列を区別するための指標ラベルを Prometheus で追加することです。たとえば、コンテナを再起動しても変わらない __meta_kubernetes_pod_annotation_prometheus_io_port というラベルを使用します。

[metric kind must be X, but is Y] エラーがログに記録されています。

このエラーは、コード内で Prometheus の指標の種類(ゲージ、カウンタなど)を変更したことによって発生することがあります。データのセマンティクスは指標の種類によって異なるため、Stackdriver では指標の種類が厳密に決められており、それが厳密に適用されます。

指標の種類を変更する場合は、対応する指標記述子を削除することで、既存の時系列データにアクセスできないようにする必要があります。

以前は Prometheus 指標の種類が表示されていましたが、見つかりません。

インストールした Prometheus ソフトウェアは、指標を外部指標として Stackdriver Monitoring にエクスポートするように構成されています。データがエクスポートされると、Monitoring は外部指標に対して適切な指標記述子を作成します。この種類の指標のデータが少なくとも 6 週間以上書き込まれていない場合、指標記述子は削除対象となります。

未使用の指標記述子が 6 週間後に必ず削除されるという保証はありませんが、Monitoring は過去 6 週間未使用の Prometheus 指標記述子を削除する仕様になっています。

非推奨ポリシー

Stackdriver と Prometheus の統合は Stackdriver エージェントの非推奨ポリシーの対象です。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。