Cloud Monitoring への Connect エージェントの指標のエクスポート

このページでは、Connect Agent の指標を、GKE on VMware、GKE on AWS、その他の登録済み Kubernetes クラスタから、Cloud Monitoring にエクスポートする方法について説明します。

概要

GKE on VMware または GKE on AWS クラスタでは、Prometheus は指標を収集し、それらをクラスタ内でローカルに保存します。Google Cloud コンソールにクラスタを登録すると、クラスタ内に Connect Agent という Deployment が作成されます。Prometheus は、Google への接続エラーや開いている接続数など、Connect Agent から有用な指標を収集します。Cloud Monitoring でこれらの指標を利用できるようにするには、次のことを行う必要があります。

  • Service を使用して Connect Agent を公開します。
  • prometheus-to-sd をデプロイします。これは、Prometheus 指標を収集して Cloud Monitoring にエクスポートするシンプルなコンポーネントです。

その後、Google Cloud コンソールで Monitoring を使用するか、Service をポート転送して curl を使用し、指標を表示します。

Connect Agent の名前空間用の変数を作成する

Connect Agent は通常、名前空間 gke-connect で実行されます。

Connect Agent には hub.gke.io/project というラベルがあります。HTTP サーバーはポート 8080 でリッスンします。

名前空間用の変数 AGENT_NS を作成します。

AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)

以下を置き換えます。

  • KUBECONFIG: クラスタの kubeconfig ファイル
  • PROJECT_ID: プロジェクト ID

Connect Agent Deployment を公開する

  1. 次の構成を gke-connect-agent.yaml という名前の YAML ファイルにコピーします。この構成により、Connect Agent Deployment を公開する Service gke-connect-agent が作成されます。

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: gke-connect-agent
      name: gke-connect-agent
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        app: gke-connect-agent
      type: ClusterIP
  2. YAML ファイルをクラスタ内の Connect Agent の名前空間に適用します。KUBECONFIG はクラスタの kubeconfig ファイルのパスです。

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. roles/monitoring.metricWriter IAM ロールをフリートの Google サービス アカウントにバインドします。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。
    • SERVICE_ACCOUNT_NAME は、クラスタの登録時に使用したサービス アカウントです。

prometheus-to-sd のデプロイ

  1. 次の構成を prometheus-to-sd.yaml という名前の YAML ファイルにコピーします。

    • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。
    • CLUSTER_NAME は、Connect Agent が稼働する Kubernetes クラスタです。
    • REGION は、クラスタが稼働する場所に地理的に近いロケーションです。クラスタが物理的に配置されている場所に地理的に近い Google Cloud ゾーンを選択します。
    • ZONE は、オンプレミスのデータセンターに近いロケーションです。トラフィック フローの場所に地理的に近い Google Cloud ゾーンを選択します。

    この構成により、次の 2 つのリソースが作成されます。

    • ConfigMap prom-to-sd-user-config。Deployment が使用するいくつかの変数を宣言します。
    • Deployment prometheus-to-monitoring。単一の Pod で prometheus-to-sd を実行します。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prom-to-sd-user-config
    data:
      # The project that the Connect Agent uses. Accepts ID or number.
      project: PROJECT_ID
      # A name for the cluster, which shows up in Cloud Monitoring.
      cluster_name: CLUSTER_NAME
      # cluster_location must be valid (e.g. us-west1-a); shows up in Cloud Monitoring.
      cluster_location: REGION
      # A zone name to report (e.g. us-central1-a).
      zone: ZONE
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: prometheus-to-monitoring
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          run: prometheus-to-monitoring
      template:
        metadata:
          labels:
            run: prometheus-to-monitoring
        spec:
          containers:
            - args:
                - /monitor
                # 'gke-connect-agent' is the text that will show up in the Cloud Monitoring metric name.
                - --source=gke-connect-agent:http://gke-connect-agent:8080
                - --monitored-resource-types=k8s
                - --stackdriver-prefix=custom.googleapis.com
                - --project-id=$(PROM_PROJECT)
                - --cluster-name=$(PROM_CLUSTER_NAME)
                - --cluster-location=$(PROM_CLUSTER_LOCATION)
                - --zone-override=$(PROM_ZONE)
                # A node name to report. This is a dummy value.
                - --node-name=MyGkeConnectAgent
              env:
                - name: GOOGLE_APPLICATION_CREDENTIALS
                  value: /etc/creds/creds-gcp.json
                - name: PROM_PROJECT
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: project
                - name: PROM_CLUSTER_NAME
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: cluster_name
                - name: PROM_CLUSTER_LOCATION
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: cluster_location
                - name: PROM_ZONE
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: zone
              image: gcr.io/google-containers/prometheus-to-sd:v0.7.1
              imagePullPolicy: IfNotPresent
              name: prometheus-to-monitoring
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /etc/creds
                  name: creds-gcp
                  readOnly: true
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: creds-gcp
              secret:
                defaultMode: 420
                # This secret is already set up for the Connect Agent.
                secretName: creds-gcp
  2. YAML ファイルをクラスタ内の Connect Agent の名前空間に適用します。KUBECONFIG はクラスタの kubeconfig ファイルのパスです。

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml

指標の表示

コンソール

  1. Google Cloud コンソールの [Monitoring] ページに移動します。

    [Monitoring] ページに移動

  2. 左側のメニューで、[Metrics Explorer] をクリックします。

  3. Connect Agent の指標には接頭辞 custom.googleapis.com/gke-connect-agent/ が付加されます。gke-connect-agent--source 引数で指定された文字列です。たとえば、custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total となります。

cURL

  1. シェルで、kubectl を使用して gke-connect-monitoring Service をポート転送します。

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. 別のシェルを開いて、次のコマンドを実行します。

    curl localhost:8080/metrics

クリーンアップ

このトピックで作成したリソースを削除するには:

AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project)
kubectl delete configmap prom-to-sd-user-config --kubeconfig KUBECONFIG -n ${AGENT_NS}
kubectl delete service gke-connect-agent --kubeconfig KUBECONFIG -n ${AGENT_NS}
kubectl delete deployment prometheus-to-monitoring --kubeconfig KUBECONFIG -n ${AGENT_NS}