このページでは、Anthos clusters on bare metal のクラスタを構成する方法について説明します。これにより、ユーザー アプリケーションからのカスタムのログと指標が Cloud Logging、Cloud Monitoring、Prometheus 向けのマネージド サービスに送信されます。
Prometheus 向けのマネージド サービスの有効化
Prometheus 向けのマネージド サービスの構成は、stackdriver
という名前の Stackdriver
オブジェクトで指定します。ベスト プラクティスやトラブルシューティングなどの詳細については、Prometheus 向けのマネージド サービスのドキュメントをご覧ください。
Prometheus 向けの Google Cloud マネージド サービスを有効にするように stackdriver
オブジェクトを構成するには:
Stackdriver オブジェクトを開いて編集します。
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
CLUSTER_KUBECONFIG
は、ユーザー クラスタ kubeconfig ファイルのパスに置き換えます。spec
で、enableGMPForApplications
をtrue
に設定します。apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: true
編集したファイルを保存して閉じます。
Google が管理する Prometheus コンポーネントは、
gmp-system
名前空間内のクラスタで自動的に開始されます。Google が管理する Prometheus コンポーネントを確認します。
kubectl --kubeconfig=CLUSTER_KUBECONFIG --namespace gmp-system get pods
このコマンドの出力は、次のようになります。
NAME READY STATUS RESTARTS AGE collector-abcde 2/2 Running 1 (5d18h ago) 5d18h collector-fghij 2/2 Running 1 (5d18h ago) 5d18h collector-klmno 2/2 Running 1 (5d18h ago) 5d18h gmp-operator-68d49656fc-abcde 1/1 Running 0 5d18h rule-evaluator-7c686485fc-fghij 2/2 Running 1 (5d18h ago) 5d18h
Prometheus のマネージド サービスは、ルールの評価とアラートをサポートします。ルールの評価を設定するには、ルール評価をご覧ください。
サンプル アプリケーションを実行する
マネージド サービスは、metrics
ポートに Prometheus 指標を送信するサンプル アプリケーション prom-example
のマニフェトを提供します。このアプリケーションは 3 つのレプリカを使用します。
アプリケーションをデプロイするには:
サンプル アプリケーションの一部として作成するリソースに
gmp-test
Namespace を作成します。kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
次のコマンドを使用して、アプリケーション マニフェストを適用します。
kubectl -n gmp-test apply \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
PodMonitoring リソースを構成する
このセクションでは、サンプル アプリケーションによって出力された指標データをキャプチャして Prometheus のマネージド サービスに送信するように、PodMonitoring
カスタム リソースを構成します。PodMonitoring
カスタム リソースは、ターゲット スクレイピングを使用します。この場合、コレクタ エージェントはサンプル アプリケーションがデータを出力する /metrics
エンドポイントを取得します。
PodMonitoring
カスタム リソースは、デプロイされている名前空間内のターゲットのみをスクレイピングします。複数の名前空間のターゲットをスクレイピングするには、各名前空間に同じ PodMonitoring
カスタム リソースをデプロイします。次のコマンドを実行して、目的の名前空間に PodMonitoring
リソースがインストールされていることを確認できます。
kubectl --kubeconfig CLUSTER_KUBECONFIG get podmonitoring -A
Prometheus カスタム リソースのすべてのマネージド サービスに関するリファレンス ドキュメントについては、prometheus-engine/doc/api リファレンスをご覧ください。
次のマニフェストでは、gmp-test
名前空間で PodMonitoring
リソース prom-example
を定義します。このリソースでは、名前空間にラベル app
があり、値が prom-example
のすべての Pod が検索されます。一致する Pod が 30 秒ごとに、/metrics
HTTP パスの metrics
というポートでスクレイピングされます。
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
name: prom-example
spec:
selector:
matchLabels:
app: prom-example
endpoints:
- port: metrics
interval: 30s
このリソースを適用するには、次のコマンドを実行します。
kubectl --kubeconfig CLUSTER_KUBECONFIG -n gmp-test apply \
-f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
Prometheus のマネージド サービスが、一致する Pod をスクレイピングしています。
指標データのクエリ
Prometheus データがエクスポートされていることを確認する最も簡単な方法は、Google Cloud コンソールの Metrics Explorer で PromQL クエリを使用することです。
PromQL クエリを実行する手順は次のとおりです。
Google Cloud コンソールで [モニタリング] ページに移動するか、次のボタンをクリックします。
ナビゲーション パネルで、 [Metrics Explorer] を選択します。
Prometheus Query Language(PromQL)を使用して、グラフに表示するデータを指定します。
[指標を選択] ペインのツールバーで、[コードエディタ] を選択します。
[言語] 切り替えボタンの [PromQL] を選択します。言語切り替えボタンは、[Code Editor] ペインの下部にあります。
Query Editor にクエリを入力します。たとえば、過去 1 時間に各モードで使用された CPU の平均秒数をグラフ化するには、次のクエリを使用します。
avg(rate(kubernetes_io:anthos_container_cpu_usage_seconds_total {monitored_resource="k8s_node"}[1h]))
PromQL の使用の詳細については、Cloud Monitoring の PromQL をご覧ください。
次のスクリーンショットは、anthos_container_cpu_usage_seconds_total
指標を表示するグラフを示しています。
大量のデータを収集する場合は、エクスポートした指標をフィルタリングして費用を抑えられる可能性があります。
ユーザー アプリケーションで Cloud Logging を有効にする
Cloud Logging と Cloud Monitoring の構成は、stackdriver
という名前の Stackdriver オブジェクトに保持されます。
Stackdriver オブジェクトを開いて編集します。
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
CLUSTER_KUBECONFIG
は、ユーザー クラスタ kubeconfig ファイルのパスに置き換えます。spec
セクションで、enableCloudLoggingForApplications
をtrue
に設定します。apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: true
編集したファイルを保存して閉じます。
サンプル アプリケーションを実行する
このセクションでは、カスタムログを書き込むアプリケーションを作成します。
次の Deployment マニフェストを
my-app.yaml
という名前のファイルに保存します。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
Deployment を作成する
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
アプリケーション ログを表示
Console
Google Cloud コンソールの [ログ エクスプローラ] に移動します。
[リソース] をクリックします。[すべてのリソースタイプ] メニューで、[Kubernetes コンテナ] を選択します。
[CLUSTER_NAME] で、ユーザー クラスタの名前を選択します。
[NAMESPACE_NAME] で [デフォルト] を選択します。
[追加] をクリックしてから、[クエリを実行] をクリックします。
[クエリ結果] で、
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 CLI
次のコマンドを実行します。
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
PROJECT_ID
は、プロジェクトの ID に置き換えます。出力で、
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'
ユーザー アプリケーション(レガシー)で Logging と Monitoring を有効にする
アプリケーションの Logging と Monitoring を有効化するには、クラスタ構成ファイルで spec.clusterOperations.enableApplication
フィールドを使用します。
クラスタ構成ファイルを更新して、
enableApplication
をtrue
に設定します。apiVersion: v1 kind: Namespace metadata: name: cluster-user-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic spec: type: user ... clusterOperations: projectID: project-fleet location: us-central1 enableApplication: true ...
bmctl update
を使用して変更を適用します。bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG
以下を置き換えます。
CLUSTER_NAME
: アップグレードするクラスタの名前。ADMIN_KUBECONFIG
: 管理クラスタの kubeconfig ファイルのパス。
ワークロードにアノテーションを付加する
アプリケーションからのカスタム指標の収集を有効にするには、アプリケーションの Service マニフェストまたは Pod マニフェストに prometheus.io/scrape: "true"
アノテーションを追加するか、Pod に渡されるようにするために Deployment または DaemonSet マニフェストの spec.template
セクションに同じアノテーションを追加します。
サンプル アプリケーションを実行する
このセクションでは、カスタムログを書き込み、カスタム指標を公開するアプリケーションを作成します。
次の 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
Deployment と Service を作成します。
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
アプリケーション ログを表示
Console
Google Cloud コンソールの [ログ エクスプローラ] に移動します。
[リソース] をクリックします。[すべてのリソースタイプ] で、[Kubernetes コンテナ] を選択します。
[CLUSTER_NAME] で、ユーザー クラスタの名前を選択します。
[NAMESPACE_NAME] で [デフォルト] を選択します。
[追加] をクリックしてから、[クエリを実行] をクリックします。
[クエリ結果] で、
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 CLI
次のコマンドを実行します。
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
PROJECT_ID
は、プロジェクトの ID に置き換えます。出力で、
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'
Google Cloud コンソールでアプリケーションの指標を確認する
サンプル アプリケーションでは、example_monitoring_up
という名前のカスタム指標が公開されています。Google Cloud コンソールで、その指標の値を確認できます。
Google Cloud コンソールの Metrics Explorer に移動します。
[リソースタイプ] で、
Kubernetes Pod
またはKubernetes Container
を選択します。[指標] で [
external.googleapis.com/prometheus/example_monitoring_up
] を選択します。このチャートでは、
example_monitoring_up
の繰り返し値が 1 であることがわかります。