このページでは、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 コンソールのログ エクスプローラを使用してログにアクセスできます。たとえば、コンテナのログにアクセスするには、次のようにします。
- Google Cloud コンソールでプロジェクトのログビューアを開きます。
- 次の方法でコンテナのログを検索します。
- 左上のカタログ プルダウン ボックスをクリックし、[Kubernetes コンテナ] を選択します。
- クラスタ名、Namespace、コンテナの順に選択します。
指標データにアクセスする
Metrics Explorer では 1,500 以上の指標を選択できます。Metrics Explorer にアクセスするには、次のようにします。
Google Cloud Console で [Monitoring] を選択するか、次のボタンを使用します。
[Resources] > [Metrics Explorer] を選択します。
Stackdriver メタデータにアクセスする
メタデータは、指標で間接的に使用されます。Stackdriver Metrics Explorer で指標をフィルタする場合、metadata.systemLabels
と metadata.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 はデフォルトで無効になっています。
ユーザー クラスタには
monitoring-sample
という名前の Monitoring オブジェクトがあります。このオブジェクトを編集用に開きます。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] edit \ monitoring monitoring-sample --namespace kube-system
ここで、[USER_CLUSTER_KUBECONFIG] はユーザー クラスタの kubeconfig ファイルです。
Prometheus と Grafana を有効にするには、
enablePrometheus
をtrue
に設定します。Prometheus と Grafana を無効にするには、enablePrometheus
をfalse
に設定します。apiVersion: addons.k8s.io/v1alpha1 kind: Monitoring metadata: labels: k8s-app: monitoring-operator name: monitoring-sample namespace: kube-system spec: channel: stable ... enablePrometheus: true
編集セッションを閉じると変更が保存されます。
既知の問題
ユーザー クラスタでは、アップグレード中に Prometheus と Grafana は自動的に無効になります。ただし、構成データと指標データは失われません。
この問題を回避するには、アップグレード後に monitoring-sample
を編集用に開いて enablePrometheus
を true
に設定します。
Grafana ダッシュボードからモニタリング指標にアクセスする
Grafana は、クラスタから収集された指標を表示します。これらの指標を表示するには、次の手順で Grafana のダッシュボードにアクセスする必要があります。
ユーザー クラスタの
kube-system
Namespace で実行されている Grafana Pod の名前を取得します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods
[USER_CLUSTER_KUBECONFIG] は、ユーザー クラスタの kubeconfig ファイルです。
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
ウェブブラウザで
http://localhost:50000
に移動します。ユーザー クラスタの Grafana ホーム ダッシュボードが読み込まれます。他のダッシュボードにアクセスするには、ページの左上にあるホーム プルダウン メニューをクリックします。
Grafana の使用例については、Grafana ダッシュボードを作成するをご覧ください。
アラートにアクセスする
Prometheus Alertmanager は、Prometheus サーバーからアラートを収集します。これらのアラートは Grafana ダッシュボードに表示できます。アラートを表示するには、次の手順でダッシュボードにアクセスする必要があります。
alertmanger-0
Pod のコンテナは、TCP ポート 9093 をリッスンします。ローカルポートを Pod のポート 9093 に転送します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \ -n kube-system alertmanager-0 50001:9093
ウェブブラウザで
http://localhost:50001
に移動します。
Prometheus Alertmanager の構成を変更する
ユーザー クラスタの monitoring.yaml
ファイルを編集して、Prometheus Alertmanager のデフォルト構成を変更できます。これは、アラートをダッシュボードに保存するのではなく、特定の宛先に転送したい場合に行います。Prometheus で AlertManager を構成する方法については、構成ドキュメントをご覧ください。
Alertmanagerager の構成を変更するには、次の手順を行います。
ユーザー クラスタの
monitoring.yaml
マニフェスト ファイルのコピーを作成します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \ get monitoring monitoring-sample -o yaml > monitoring.yaml
Alertmanager を構成するには、
spec.alertmanager.yml
のフィールドを変更します。完了したら、変更したマニフェストを保存します。マニフェストをクラスタに適用します。
kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml
Prometheus リソースをスケーリングする
デフォルトのモニタリング構成では、最大 5 つのノードがサポートされます。大規模なクラスタの場合は、Prometheus サーバーのリソースを調整できます。推奨値は、クラスタノードあたりの CPU コア数が 50m で、メモリが 500Mi です。クラスタに 2 つのノードがあり、それぞれに Prometheus に適したリソースがあることを確認してください。詳細については、ユーザー クラスタのサイズ変更をご覧ください。
Prometheus Server のリソースを変更するには、次の手順を行います。
ユーザー クラスタの
monitoring.yaml
マニフェスト ファイルのコピーを作成します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
リソースをオーバーライドするには、
spec.resourceOverride
のフィールドを変更します。完了したら、変更したマニフェストを保存します。例:spec: resourceOverride: - component: Prometheus resources: requests: cpu: 300m memory: 3000Mi limits: cpu: 300m memory: 3000Mi
マニフェストをクラスタに適用します。
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml
Grafana ダッシュボードを作成する
これまでの手順で、指標を公開するアプリケーションをデプロイし、指標が公開されて Prometheus により取得されていることを確認しました。次は、アプリケーション レベルの指標をカスタムの Grafana ダッシュボードに追加します。
Gradfana ダッシュボードを作成するには、次の手順を行います。
- 必要に応じて、Grafana にアクセスします。
- Home Dashboard で、ページの左上隅にあるホーム プルダウン メニューをクリックします。
- 右側のメニューで [New dashboard] をクリックします。
- [New panel] セクションで [Graph] をクリックします。空のグラフ ダッシュボードが表示されます。
- [Panel title] をクリックし、[Edit] をクリックします。下部の [Graph] パネルの [Metrics] タブが開きます。
- [Data Source] プルダウン メニューから [user] を選択します。[Add query] をクリックし、検索フィールドに
foo
と入力します。 - 画面右上の [Back to dashboard] ボタンをクリックします。ダッシュボードが表示されます。
- ダッシュボードを保存するには、画面右上の [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
指標が公開、取得されていることを確認する
prometheus-example
Pod のコンテナは、TCP ポート 8080 をリッスンします。ローカルポートを Pod のポート 8080 に転送します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
アプリケーションが指標を公開していることを確認するには、次のコマンドを実行します。
curl localhost:50002/metrics | grep foo
このコマンドは、次の出力を返します。
# HELP foo Custom metric # TYPE foo gauge foo 40
prometheus-0
Pod のコンテナは、TCP ポート 9090 をリッスンします。ローカルポートを Pod のポート 9090 に転送します。kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
Prometheus が指標を取得していることを確認するには、http://localhost:50003/targets に移動します。これにより、
prometheus-io-pods
ターゲット グループのprometheus-0
Pod にアクセスできます。Prometheus で指標を表示するには、http://localhost:50003/graph に移動します。検索フィールドに「
foo
」と入力し、[Execute] をクリックします。ページに指標が表示されます。