ロギングとモニタリングの使用

このページでは、Cloud Logging、Cloud Monitoring、Prometheus、Grafana を使用してロギングとモニタリングを行う方法について説明します。使用可能な構成オプションの概要については、ロギングとモニタリングの概要をご覧ください。

Cloud Logging と Cloud Monitoring を使用する

以下のセクションでは、Anthos GKE On-Prem(GKE On-Prem)クラスタで Logging と Monitoring を使用する方法について説明します。

モニタリング対象リソース

モニタリング対象リソースとは、Google がクラスタ、ノード、Pod、コンテナなどのリソースを表す方法です。詳細は、Cloud Monitoring のモニタリング対象リソースタイプのドキュメントをご覧ください。

ログと指標のクエリを行うには、少なくとも次のリソースラベルを認識している必要があります。

  • project_id: GKE On-Prem クラスタに関連付けられているプロジェクトのプロジェクト ID

  • location: Logging のログと Monitoring の指標を保存する Google Cloud リージョン。オンプレミスのデータセンターに近いリージョンを選択することをおすすめします。この値は、インストール時に GKE On-Prem 構成ファイルの stackdriver.clusterlocation フィールドに指定したものです。

  • cluster_name: クラスタの作成時に選択したクラスタ名。

    Stackdriver カスタム リソースを調べることで、管理クラスタまたはユーザー クラスタの cluster_name の値を取得できます。

      kubectl -n kube-system get stackdrivers stackdriver -o yaml | grep 'clusterName:'

ログデータにアクセスする

Cloud Console のログビューアでログにアクセスできます。たとえば、コンテナのログにアクセスするには、次のようにします。

  1. Cloud Console でプロジェクトのログビューアを開きます。
  2. 次の方法でコンテナのログを検索します。
    1. 左上のカタログ プルダウン ボックスをクリックし、[Kubernetes コンテナ] を選択します。
    2. クラスタ名、Namespace、コンテナの順に選択します。

クラスタの状態をモニタリングするダッシュボードを作成する

GKE On-Prem クラスタは、デフォルトでシステムおよびコンテナの指標をモニタリングするように構成されています。クラスタ(管理者またはユーザー)を作成したら、ベスト プラクティスとして、Monitoring で次のダッシュボードを作成し、GKE On-Prem オペレーション チームがクラスタの正常性をモニタリングできるようにします。

ここでは、これらのダッシュボードを作成する方法について説明します。以下で説明するダッシュボード作成プロセスの詳細については、API によるダッシュボードの管理をご覧ください。

要件

ダッシュボードを作成するには、Google アカウントに次の権限が必要です。

  • monitoring.dashboards.create
  • monitoring.dashboards.delete
  • monitoring.dashboards.update

アカウントに次のいずれかのロールが割り当てられていると、これらの権限が付与されます。権限は Cloud Console で確認できます。

  • monitoring.dashboardsEditor
  • monitoring.editor
  • プロジェクト editor
  • プロジェクト owner

コントロール プレーンのステータス ダッシュボードを作成する

GKE On-Prem コントロール プレーンは、API サーバー、スケジューラ、コントローラ マネージャー、および etcd で構成されています。コントロール プレーンのステータスをモニタリングするには、これらのコンポーネントの状態をモニタリングするダッシュボードを作成します。

  1. ダッシュボード構成 control-plane-status.json をダウンロードします。

  2. 次のコマンドを実行して、構成ファイルを含むカスタム ダッシュボードを作成します。

    gcloud monitoring dashboards create --config-from-file=control-plane-status.json
  3. Google Cloud Console で [モニタリング] を選択するか、次のボタンを使用します。

    [モニタリング] に移動

  4. [リソース]、[ダッシュボード] の順に選択し、[Anthos GKE On-Prem Control Plane Status(preview)] というダッシュボードを表示します。各ユーザー クラスタのコントロール プレーンのステータスは、管理クラスタ内の別の Namespace から収集されます。namespace_name フィールドは、ユーザー クラスタ名です。

    サービスレベル目標(SLO)のしきい値(0.999)が各グラフに設定されています。

  5. 必要に応じてアラート ポリシーを作成します。

Pod ステータス ダッシュボードを作成する

各 Pod のフェーズ、各コンテナの再起動時間とリソース使用状況を含むダッシュボードの作成は、次の手順で行います。

  1. ダッシュボード構成 pod-status.json をダウンロードします。

  2. 次のコマンドを実行して、構成ファイルを含むカスタム ダッシュボードを作成します。

    gcloud monitoring dashboards create --config-from-file=pod-status.json
  3. Google Cloud Console で [モニタリング] を選択するか、次のボタンを使用します。

    [モニタリング] に移動

  4. [リソース]、[ダッシュボード] の順に選択し、[Anthos GKE On-Prem Control Plane Status(preview)] というダッシュボードを表示します。

  5. 必要に応じてアラート ポリシーを作成します。

指標データにアクセスする

Metrics Explorer では 1,500 以上の指標を選択できます。Metrics Explorer にアクセスするには、次のようにします。

  1. Google Cloud Console で [モニタリング] を選択するか、次のボタンを使用します。

    [モニタリング] に移動

  2. [リソース] > [Metrics Explorer] を選択します。

Monitoring のメタデータにアクセスする

メタデータは、指標で間接的に使用されます。Monitoring Metrics Explorer で指標をフィルタする場合、metadata.systemLabelsmetadata.userLabels で指標をフィルタするオプションが表示されます。システムラベルは、Pod のノード名や Service 名などのラベルです。ユーザーラベルは、Pod 仕様の「metadata」セクションの Kubernetes YAML ファイル内の Pod に割り当てられるラベルです。

デフォルトの Cloud Monitoring 割り当て上限

GKE On-Prem モニタリングには、プロジェクトごとに 1 分あたり 6,000 回の API 呼び出しというデフォルトの上限が設定されています。この上限を超えると、指標が表示されない場合があります。モニタリングの上限を引き上げる必要がある場合は、Google Cloud Console からリクエストしてください

Prometheus と Grafana

以下のセクションでは、GKE On-Prem クラスタで Prometheus と Grafana を使用する方法について説明します。

Prometheus と Grafana を有効にする

GKE On-Prem バージョン 1.2 以降では、Prometheus と Grafana を有効にするか無効にするかを選択できます。新しいユーザー クラスタでは、Prometheus と Grafana はデフォルトで無効になっています。

  1. ユーザー クラスタには monitoring-sample という名前の Monitoring オブジェクトがあります。このオブジェクトを編集用に開きます。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] edit \
       monitoring monitoring-sample --namespace kube-system

    ここで、[USER_CLUSTER_KUBECONFIG] はユーザー クラスタの kubeconfig ファイルです。

  2. Prometheus と Grafana を有効にするには、enablePrometheustrue に設定します。Prometheus と Grafana を無効にするには、enablePrometheusfalse に設定します。

    apiVersion: addons.k8s.io/v1alpha1
    kind: Monitoring
    metadata:
     labels:
       k8s-app: monitoring-operator
     name: monitoring-sample
     namespace: kube-system
    spec:
     channel: stable
     ...
     enablePrometheus: true
  3. 編集セッションを閉じると変更が保存されます。

報告されている問題

ユーザー クラスタでは、アップグレード中に Prometheus と Grafana は自動的に無効になります。ただし、構成データと指標データは失われません。

この問題を回避するには、アップグレード後に monitoring-sample を編集用に開いて enablePrometheustrue に設定します。

Grafana ダッシュボードからの指標のモニタリングにアクセスする

Grafana は、クラスタから収集された指標を表示します。これらの指標を表示するには、次の手順で Grafana のダッシュボードにアクセスする必要があります。

  1. ユーザー クラスタの kube-system Namespace で実行されている Grafana Pod の名前を取得します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods

    [USER_CLUSTER_KUBECONFIG] は、ユーザー クラスタの kubeconfig ファイルです。

  2. Grafana Pod 内のコンテナは、TCP ポート 3000 をリッスンします。ローカルポートを Pod のポート 3000 に転送すると、ウェブブラウザで Grafana のダッシュボードを表示できます。

    たとえば、Pod の名前が grafana-0 であるとします。ポート 50000 を Pod のポート 3000 に転送するには、次のコマンドを入力します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system port-forward grafana-0 50000:3000
  3. ウェブブラウザで http://localhost:50000 に移動します。ユーザー クラスタの Grafana ホーム ダッシュボードが読み込まれます。

  4. 他のダッシュボードにアクセスするには、ページの左上にあるホーム プルダウン メニューをクリックします。

Grafana の使用例については、Grafana ダッシュボードを作成するをご覧ください。

アラートにアクセスする

Prometheus Alertmanager は、Prometheus サーバーからアラートを収集します。これらのアラートは Grafana ダッシュボードに表示できます。アラートを表示するには、次の手順でダッシュボードにアクセスする必要があります。

  1. alertmanager-0 Pod のコンテナは、TCP ポート 9093 をリッスンします。ローカルポートを Pod のポート 9093 に転送します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \
       -n kube-system alertmanager-0 50001:9093
  2. ウェブブラウザで http://localhost:50001 に移動します。

Prometheus Alertmanager の構成を変更する

ユーザー クラスタの monitoring.yaml ファイルを編集して、Prometheus Alertmanager のデフォルト構成を変更できます。これは、アラートをダッシュボードに保存するのではなく、特定の宛先に転送したい場合に行います。Prometheus で AlertManager を構成する方法については、構成ドキュメントをご覧ください。

Alertmanagerager の構成を変更するには、次の手順を行います。

  1. ユーザー クラスタの monitoring.yaml マニフェスト ファイルのコピーを作成します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \
       get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. Alertmanager を構成するには、spec.alertmanager.yml のフィールドを変更します。完了したら、変更したマニフェストを保存します。

  3. マニフェストをクラスタに適用します。

    kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml

Prometheus リソースをスケーリングする

デフォルトのモニタリング構成では、最大 5 つのノードがサポートされます。大規模なクラスタの場合は、Prometheus サーバーのリソースを調整できます。推奨値は、クラスタノードあたりの CPU コア数が 50m で、メモリが 500Mi です。クラスタに 2 つのノードがあり、それぞれに Prometheus に適したリソースがあることを確認してください。 詳細については、ユーザー クラスタのサイズ変更をご覧ください。

Prometheus Server のリソースを変更するには、次の手順を行います。

  1. ユーザー クラスタの monitoring.yaml マニフェスト ファイルのコピーを作成します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. リソースをオーバーライドするには、spec.resourceOverride のフィールドを変更します。完了したら、変更したマニフェストを保存します。例:

    spec:
      resourceOverride:
      - component: Prometheus
        resources:
          requests:
            cpu: 300m
            memory: 3000Mi
          limits:
            cpu: 300m
            memory: 3000Mi
    
  3. マニフェストをクラスタに適用します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml

Grafana ダッシュボードを作成する

これまでの手順で、指標を公開するアプリケーションをデプロイし、指標が公開されて Prometheus により取得されていることを確認しました。次は、アプリケーション レベルの指標をカスタムの Grafana ダッシュボードに追加します。

Gradfana ダッシュボードを作成するには、次の手順を行います。

  1. 必要に応じて、Grafana にアクセスします
  2. Home Dashboard で、ページの左上隅にあるホーム プルダウン メニューをクリックします。
  3. 右側のメニューで [New dashboard] をクリックします。
  4. [New panel] セクションで [Graph] をクリックします。空のグラフ ダッシュボードが表示されます。
  5. [Panel title] をクリックし、[Edit] をクリックします。下部の [Graph] パネルの [Metrics] タブが開きます。
  6. [Data Source] プルダウン メニューから [user] を選択します。[Add query] をクリックし、検索 フィールドに「foo」と入力します。
  7. 画面右上の [Back to dashboard] ボタンをクリックします。ダッシュボードが表示されます。
  8. ダッシュボードを保存するには、画面右上の [Save dashboard] をクリックします。ダッシュボードの名前を選択して、[Save] をクリックします。

クラスタ内モニタリングを無効にする

クラスタ内モニタリングを無効にするには、monitoring-sample オブジェクトに加えた変更を元に戻します。

  1. monitoring-sample オブジェクトを編集用に開きます。

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
       monitoring monitoring-sample --namespace kube-system

    USER_CLUSTER_KUBECONFIG をユーザー クラスタの kubeconfig ファイルに置き換えます。

  2. Prometheus と Grafana を無効にするには、enablePrometheusfalse に設定します。

       apiVersion: addons.k8s.io/v1alpha1
       kind: Monitoring
       metadata:
         labels:
           k8s-app: monitoring-operator
         name: monitoring-sample
         namespace: kube-system
       spec:
         channel: stable
         ...
         enablePrometheus: false
    
  3. 編集セッションを閉じると変更が保存されます。

  4. prometheus-0prometheus-1grafana-0 statefulsets が削除されたことを確認します。

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods --namespace kube-system

例: アプリケーション レベルの指標を Grafana ダッシュボードに追加する

以下では、アプリケーションの指標を追加する方法について説明します。このセクションでは、次のタスクを行います。

  • foo という指標を公開するサンプル アプリケーションをデプロイします。
  • Prometheus が指標を公開、取得していることを確認します。
  • カスタム Grafana ダッシュボードを作成します。

サンプル アプリケーションをデプロイする

サンプル アプリケーションは 1 つの Pod で実行します。Pod のコンテナは定数値 40 で指標 foo を公開します。

次の Pod マニフェスト pro-pod.yaml を作成します。

apiVersion: v1
kind: Pod
metadata:
  name: prometheus-example
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
    prometheus.io/path: '/metrics'
spec:
  containers:
  - image: k8s.gcr.io/prometheus-dummy-exporter:v0.1.0
    name: prometheus-example
    command:
    - /bin/sh
    - -c
    - ./prometheus_dummy_exporter --metric-name=foo --metric-value=40 --port=8080

続いて、この Pod マニフェストをユーザー クラスタに適用します。

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f pro-pod.yaml

指標が公開、取得されていることを確認する

  1. prometheus-example Pod のコンテナは、TCP ポート 8080 をリッスンします。ローカルポートを Pod のポート 8080 に転送します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
  2. アプリケーションが指標を公開していることを確認するには、次のコマンドを実行します。

    curl localhost:50002/metrics | grep foo
    

    このコマンドは、次の出力を返します。

    # HELP foo Custom metric
    # TYPE foo gauge
    foo 40
  3. prometheus-0 Pod のコンテナは、TCP ポート 9090 をリッスンします。ローカルポートを Pod のポート 9090 に転送します。

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
  4. Prometheus が指標を取得していることを確認するには、http://localhost:50003/targets に移動します。これにより、prometheus-io-pods ターゲット グループの prometheus-0 Pod にアクセスできます。

  5. Prometheus で指標を表示するには、http://localhost:50003/graph に移動します。検索フィールドに「foo」と入力し、[Execute] をクリックします。ページに指標が表示されます。