ログと指標

このページでは、Google Distributed Cloud コネクテッドがオペレーションに関するさまざまな種類の情報をログに記録する方法と、その情報を表示する方法について説明します。一部の種類のログと指標の収集には追加料金が発生します。詳細については、 ログと指標の課金をご覧ください。

ロギングとモニタリングの構成

ログと指標の収集を開始する前に、次の操作を行う必要があります。

  1. 次のコマンドを使用して、ロギング API を有効にします。

    gcloud services enable opsconfigmonitoring.googleapis.com --project PROJECT_ID
    gcloud services enable logging.googleapis.com --project PROJECT_ID
    gcloud services enable monitoring.googleapis.com --project PROJECT_ID
    

    PROJECT_ID は、ターゲット Google Cloud プロジェクトの ID に置き換えます。

  2. ログと指標の書き込みに必要なロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/opsconfigmonitoring.resourceMetadata.writer \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/metadata-agent]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/logging.logWriter \
         --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver-log-forwarder]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/monitoring.metricWriter \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/gke-metrics-agent]"
    

    PROJECT_ID は、ターゲット Google Cloud プロジェクトの ID に置き換えます。

ログ

このセクションでは、Distributed Cloud でサポートされている Cloud Logging リソースタイプの一覧を示します。Distributed Cloud ログを表示するには、コンソールの Google Cloud ログ エクスプローラを使用します。 Distributed Cloud のロギングは常に有効になっています。

Distributed Cloud コネクテッドで記録されるリソースタイプは、次の標準 Kubernetes リソースです。

  • k8s_container
  • k8s_node

Cloud Logging API を使用して、Distributed Cloud コネクテッドのログをキャプチャして取得することもできます。この ロギング メカニズムの構成方法については、 Cloud Logging クライアント ライブラリのドキュメントをご覧ください。

指標

このセクションでは、Distributed Cloud でサポートされている Cloud Monitoring 指標の一覧を示します。Distributed Cloud の指標を表示するには、コンソールの Metrics Explorer を使用します。Google Cloud

Distributed Cloud コネクテッド クラスタの指標

Distributed Cloud コネクテッド クラスタの場合、Distributed Cloud コネクテッドは、Distributed Cloud コネクテッド ノードによって生成される次のタイプの指標を提供します。

  • リソースの指標 は、CPU 負荷やメモリ使用量など、Distributed Cloud コネクテッド ノードと Pod のパフォーマンスに関する情報を提供します。
  • システム アプリケーションの指標 は、coredns など、Distributed Cloud コネクテッド システム ワークロードに関する情報を提供します。

これらの指標のリストについては、 Google Distributed Cloud と Google Distributed Cloud の指標をご覧ください。

Distributed Cloud コネクテッドは、Distributed Cloud コネクテッド クラスタに関連付けられた Kubernetes コントロール プレーンによって生成される指標を提供しません。

Distributed Cloud コネクテッド ハードウェアの指標

Distributed Cloud コネクテッドは、次のリソースタイプを使用して、Distributed Cloud コネクテッド ハードウェアの指標を提供します。

  • edgecontainer.googleapis.com/Machine
  • edgecontainer.googleapis.com/Rack

Machine リソースの指標

Distributed Cloud コネクテッドは、edgecontainer.googleapis.com/Machine リソースに対して次の Cloud Monitoring API 指標を書き込みます。

指標 説明
/machine/cpu/total_cores
  • 種類: GAUGE
  • タイプ: INT
マシンに存在する物理プロセッサ コアの合計数。
/machine/cpu/usage_time
  • 種類: CUMULATIVE
  • タイプ: DOUBLE
  • 単位: Seconds
マシン上のすべてのコアの累積 CPU 使用時間。タイプには、 workload(顧客のワークロード) またはsystem(その他すべて)を指定できます。
/machine/cpu/utilization
  • 種類: GAUGE
  • タイプ: DOUBLE
マシン上の CPU 使用率。範囲は 0 ~ 1 です。タイプには、 workload(顧客のワークロード) またはsystem(その他すべて)を指定できます。
/machine/memory/total_bytes
  • 種類: GAUGE
  • タイプ: INT64
マシン上の合計メモリのバイト数。
/machine/memory/used_bytes
  • 種類: GAUGE
  • タイプ: INT64
マシンで使用されているメモリのバイト数。memory_typeevictable(カーネルによって再利用可能)または non-evictable(再利用不可)です。
/machine/memory/utilization
  • 種類: GAUGE
  • タイプ: DOUBLE
マシン上のメモリ使用率。範囲は 0 ~ 1 です。 memory_type は、evictable(カーネルによって再利用可能)または non-evictable(再利用不可)です。
/machine/network/up
  • 種類: GAUGE
  • タイプ: BOOL
ネットワーク インターフェースが稼働しているかどうかを示します。プライマリ カード、セカンダリ カード、ポートが含まれます。
/machine/network/link_speed
  • 種類: GAUGE
  • タイプ: DOUBLE
  • 単位: バイト / 秒
プライマリ ネットワーク インターフェース カードのリンク速度。
/machine/network/received_bytes_count
  • 種類: CUMULATIVE
  • タイプ: DOUBLE
プライマリ ネットワーク インターフェース カードの受信バイト数。
/machine/network/sent_bytes_count
  • 種類: CUMULATIVE
  • タイプ: DOUBLE
プライマリ ネットワーク インターフェース カードの送信バイト数。
/machine/network/connectivity
  • 種類: GAUGE
  • タイプ: BOOL
プライマリ ネットワーク インターフェース カードがインターネットに接続されているかどうかを示します。
/machine/disk/total_bytes
  • 種類: GAUGE
  • タイプ: INT64
マシン上の合計ディスク容量のバイト数。
/machine/disk/used_bytes
  • 種類: GAUGE
  • タイプ: INT64
マシンで使用されているディスク容量のバイト数。
/machine/disk/utilization
  • 種類: GAUGE
  • タイプ: DOUBLE
マシン上のディスク容量使用率。範囲は 0 ~ 1 です。
/machine/restart_count
  • 種類: CUMULATIVE
  • タイプ: INT
マシンが再起動した回数。
/machine/uptime
  • 種類: GAUGE
  • タイプ: INT
  • 単位: Seconds
最後の再起動からのマシンの稼働時間。
/machine/connected
  • 種類: GAUGE
  • タイプ: INT64
マシンが に接続されているかどうかを示します Google Cloud。

Rack リソースの指標

Distributed Cloud コネクテッドは、edgecontainer.googleapis.com/Rack リソースに対して次の Cloud Monitoring API 指標を書き込みます。

指標 説明
/router/bgp_up
  • 種類: GAUGE
  • タイプ: BOOL
ルーターの BGP ピアリング セッションが稼働しているかどうかを示します。 正常です。 router_id は、特定のルーター(ラックあたり最大 2 台)を識別します。
/router/connected
  • 種類: GAUGE
  • タイプ: BOOL
BGP ルーターが に接続されているかどうかを示します。 Google Cloud router_id は、特定のルーター(ラックあたり最大 2 台)を識別します。

カスタム アプリケーションのログと指標をエクスポートする

Distributed Cloud コネクテッドは、Distributed Cloud コネクテッド ワークロードで実行されているアプリケーションのログを自動的にエクスポートします。Distributed Cloud コネクテッド ワークロードで実行されているアプリケーションの指標をエクスポートするには、次のセクションで説明するようにアノテーションを付ける必要があります。

ワークロードにアノテーションを付けて指標のエクスポートを有効にする

アプリケーションのカスタム指標の収集を有効にするには、アプリケーションの Service マニフェストまたは Deployment マニフェストに次のアノテーションを追加します。

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "ENDPOINT_PATH"。「ENDPOINT_PATH」を、ターゲット アプリケーションの指標エンドポイントへのフル パスに置き換えます。
  • prometheus.io/port: "PORT_NUMBER": アプリケーションの 指標エンドポイントが接続をリッスンするポート。

サンプル アプリケーションを実行する

このセクションでは、カスタムログを書き込み、カスタム指標エンドポイントを公開するアプリケーションを作成します。

  1. 次の Service マニフェストと Deployment マニフェストをファイル名 my-app.yamlに保存します。Service にアノテーション prometheus.io/scrape: "true"が付いていることに注意してください。

    kind: Service
    apiVersion: v1
    metadata:
      name: "monitoring-example"
      namespace: "default"
      annotations:
        prometheus.io/scrape: "true"
    spec:
      selector:
        app: "monitoring-example"
      ports:
        - name: http
          port: 9090
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. Deployment と Service を作成します。

    kubectl --kubeconfig apply -f my-app.yaml

アプリケーション ログを表示する

コンソール

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. [リソース] をクリックします。

  3. [すべてのリソースタイプ] リストで、Kubernetes Container を選択します。

  4. [**クラスタ名**] で、ユーザー クラスタの名前を選択します。

  5. [Namespace name] で、default を選択します。

  6. [追加] をクリックし、[クエリを実行] をクリックします。

  7. [クエリ結果] セクションで、monitoring-example Deployment からのログエントリを確認できます。次に例を示します。

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud

  1. gcloud logging read コマンドを使用します。

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  2. 出力で、monitoring-example Deployment からのログエントリを確認できます。次に例を示します。

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

アプリケーション指標を表示する

サンプル アプリケーションでは、example_monitoring_up という名前のカスタム指標が公開されています。 コンソールで、その指標の値を確認できます。 Google Cloud

  1. コンソールで、[**Metrics Explorer**] ページに移動します。 Google Cloud

    [Metrics Explorer] に移動

  2. [Resource type] で Kubernetes Pod を選択します。

  3. [指標] で external/prometheus/example_monitoring_up を選択します。

  4. このチャートでは、example_monitoring_up の繰り返し値が 1 であることがわかります。

Prometheus で指標を収集する

Distributed Cloud connected supports the Prometheus metrics solution for collecting metrics on your Distributed Cloud connected workloads.

この目的のために、Distributed Cloud コネクテッド クラスタを作成すると、Distributed Cloud コネクテッドは prom-monitoring という名前のアンマネージド Namespace を作成します。 この Namespace を使用して Prometheus をデプロイすることをおすすめします。必要なリソースを prom-monitoring Namespace から任意の Namespace にコピーして、そこに Prometheus をデプロイすることもできます。

Prometheus 指標のスクレイピングを構成する

Prometheus で Distributed Cloud コネクテッドの指標を収集するには、Prometheus 指標のスクレイピングを構成する必要があります。これを行うには、Prometheus Pod に prometheus-scrape-config ConfigMap をマウントし、ConfigMap から Prometheus 構成にスクレイピング構成を追加します。次に例を示します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: prom-monitoring
  labels:
    app: prom-monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prom-monitoring
  template:
    metadata:
      labels:
        app: prom-monitoring
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus:main
          args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            - "--storage.tsdb.path=/prometheus/"
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-scrape-config-volume
              mountPath: /etc/prometheus/scrape/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
            - name: prometheus-scrape-token
              mountPath: /var/run/secrets/kubernetes.io/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-scrape-cert
              mountPath: /certs/stackdriver-prometheus-scrape
            - name: metrics-providers-ca
              mountPath: /certs/metrics-providers
            - name: stackdriver-prometheus-etcd-scrape
              mountPath: /stackdriver-prometheus-etcd-scrape
      volumes:
        - name: prometheus-storage-volume
          emptyDir: {}
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-config
        - name: prometheus-scrape-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-scrape-config
        - name: prometheus-scrape-token
          secret:
            defaultMode: 420
            secretName: prometheus-scrape
        - name: stackdriver-prometheus-scrape-cert
          secret:
            defaultMode: 420
            secretName: stackdriver-prometheus-scrape-cert
        - name: metrics-providers-ca
          secret:
            defaultMode: 420
            items:
            - key: ca.crt
              path: ca.crt
            secretName: metrics-providers-ca
        - name: stackdriver-prometheus-etcd-scrape
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-etcd-scrape

Prometheus でワークロード指標を収集するには、ターゲット ワークロードを実行する Service と Pod に次のようにアノテーションを追加する必要があります。

prometheus.io/unmanaged_scrape: "true"
prometheus.io/unmanaged_path: "ENDPOINT_PATH"
prometheus.io/unmanaged_port: "PORT_NUMBER"

Kafka でログを収集する

Distributed Cloud コネクテッドは、Distributed Cloud コネクテッド Deployment で実行されているワークロードのログを収集するための Apache Kafka ソリューションをサポートしています。

このセクションの手順を完了するには、機能する Kafka Deployment が必要です。Kafka ブローカーは、リスナーを PLAINTEXT モードでアドバタイズする必要があります。SSL/SASL 関連の変数はサポートされていません。

Kafka ロギング用にクラスタを構成するには、クラスタで実行するアドオンを構成する JSON ファイルを作成する必要があります。このファイルは、--system-addons-config フラグを使用してクラスタを作成するときに指定します。Kafka 構成を変更する必要がある場合は、新しい Kafka 設定でクラスタを削除して再作成する必要があります。

システム アドオン構成ファイルに次のセクションを追加します。

{
        "systemAddonsConfig": {
          "unmanagedKafkaConfig": {
            "brokers": "BROKERS",
            "topics": "TOPICS"
     "topic_key": "TOPIC_KEY, 
          }
      }
}

次のように置き換えます。

  • BROKERS: ip_address:port 形式のブローカー IP アドレスとポートのペアのカンマ区切りのリスト。
  • TOPICS: Kafka トピックのカンマ区切りのリスト。
  • TOPIC_KEY: Kafka トピックキー。これにより、複数のトピックが存在する場合に Kafka がトピックを選択できます。

Distributed Cloud コネクテッド クラスタを作成しても Kafka がログを収集しない場合は、次の点を確認してください。

  • サーバー側: Kafka Deployment のエラーログで問題の兆候を確認します。
  • クライアント側: Google サポートに連絡して 、システム Pod のログを取得して確認します。

次のステップ