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

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

Stackdriver を使用する

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

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

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

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

  • project_id: GKE On-Prem クラスタに関連付けられているプロジェクトのプロジェクト ID
  • location: Stackdriver のログと指標を保存する GCP リージョン。お使いのオンプレミス データセンターの近くのリージョンを選択することをおすすめします。この値は、インストール時に GKE On-Prem 構成ファイルの stackdriver.clusterlocation フィールドに指定したものです。
  • cluster_name: クラスタの作成時に選択したクラスタ名。

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

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

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

Google Cloud コンソールのログ エクスプローラを使用してログにアクセスできます。たとえば、コンテナのログにアクセスするには、次のようにします。

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

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

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

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

    [モニタリング] に移動

  2. [Resources] > [Metrics Explorer] を選択します。

Stackdriver メタデータにアクセスする

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

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. alertmanger-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] をクリックします。

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

クラスタ内モニタリングを無効にするには、次のコマンドを入力します。

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system delete monitoring monitoring-sample

例: アプリケーション レベルの指標を 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: registry.k8s.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] をクリックします。ページに指標が表示されます。