Prometheusは、クラウドネイティブのアプリケーションを監視するために使用されるオープンソースプロジェクトです。 このトピックでは、Container Service for Kubernetes (ACK) クラスターにPrometheusをデプロイする方法について説明します。
前提条件
ACKクラスターが作成されます。 詳細については、「マネージド Kubernetes クラスターの作成」をご参照ください。
クラスターに接続しています。 ノードラベルなどのノード情報を表示できることを確認してください。 詳細については、「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
背景情報
通常、監視システムは次のタイプのオブジェクトを監視します。
リソース: ノードとアプリケーションのリソース使用率。 Kubernetesクラスターでは、監視システムはノード、ポッド、およびクラスターのリソース使用量を監視します。
アプリケーション: アプリケーションの内部メトリック。 例えば、モニタリングシステムは、アプリケーションを使用しているオンラインユーザの数を動的にカウントし、アプリケーションポートからモニタリングメトリックを収集し、収集されたメトリックに基づいてアラートを有効にする。
Kubernetesクラスターでは、監視システムは次のオブジェクトを監視します。
クラスターコンポーネント: kube-apiserver、kube-controller-managerなどのKubernetesクラスターのコンポーネント。
ノード上のリソースのステータスやカーネルイベントなどの静的リソースエンティティ。
動的リソースエンティティ: デプロイ、DaemonSets、ポッドなど、Kubernetesの抽象ワークロードのエンティティ。
アプリケーションのカスタムオブジェクト: アプリケーションの監視に使用されるカスタムデータとメトリック。
クラスターコンポーネントと静的リソースエンティティを監視するには、設定ファイルで監視方法を指定します。
Kubernetesクラスター内の動的リソースエンティティをモニタリングするには、KubernetesクラスターにPrometheusをデプロイします。
手順
プロメテウスを展開します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[マーケットプレイス] ページで、[アプリカタログ] タブをクリックします。 次に、ack-prometheus-operatorを見つけてクリックします。
ack-prometheus-operatorページで、[デプロイ] をクリックします。
[デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。
[パラメーター] ウィザードページでパラメーターを設定し、[OK] をクリックします。
デプロイ結果を確認します。
次のコマンドを実行して、クラスター内のPrometheusをローカルポート9090にマッピングします。
kubectl port-forward svc/ack-prometheus-operator-prometheus 9090:9090 -nモニタリング
ブラウザのアドレスバーにlocalhost:9090と入力して、Prometheusページにアクセスします。
上部のナビゲーションバーで、
を選択して、すべてのデータ収集タスクを表示します。 UP状態のタスクは通常どおり実行されています。
集計データを表示します。
次のコマンドを実行して、クラスター内のGrafanaをローカルポート3000にマッピングします。
kubectl -n monitoring port-forward svc/ack-prometheus-operator-grafana 3000:80
集計データを表示するには、ブラウザのアドレスバーにlocalhost:3000と入力し、ダッシュボードを選択します。
アラートルールを表示し、サイレントアラートを設定します。
アラートルールの表示
アラートルールを表示するには、ブラウザのアドレスバーに
localhost:9090
と入力し、上部のナビゲーションバーにある [アラート] をクリックします。赤: 赤のアラートルールに基づいてアラートがトリガーされています。
緑: 緑のアラートルールに基づいてアラートがトリガーされていません。
サイレントアラートの設定
次のコマンドを実行します。 ブラウザのアドレスバーに
localhost:9093
と入力し、[沈黙] をクリックしてサイレントアラートを設定します。kubectl --namespace monitoring port-forward svc/alertmanager-operated 9093
上記の手順に従って、Prometheusをクラスターにデプロイできます。 次の例では、さまざまなシナリオでPrometheusを設定する方法について説明します。
アラート設定
アラート通知方法または通知テンプレートを設定するには、次の手順を実行してalertmanagerセクションのconfigフィールドを設定します。
アラート通知方法の設定
prometheus-operatorを設定して、DingTalkメッセージまたは電子メールを使用してアラート通知を送信できます。 アラート通知方法を設定するには、次の手順を実行します。
DingTalk通知の設定
ack-prometheus-operatorページで、[デプロイ] をクリックします。 [パラメーター] ウィザードページで、dingtalkセクションでenabledをtrueに設定し、DingTalkチャットボットのwebhook URLをトークンフィールドに設定し、alertmanagerセクションのconfigパラメーターのreceiverフィールドをreceiversフィールドで指定されたアラート名に設定します。 receiversフィールドのデフォルト値はwebhookです。
2つのDingTalkチャットボットがある場合は、次の手順を実行します。
トークンフィールドのパラメーター値を、DingTalkチャットボットのwebhook URLに置き換えます。
DingTalkチャットボットのwebhook URLをコピーし、トークンフィールドのdingtalk1とdingtalk2のパラメーター値をコピーしたURLに置き換えます。 この例では、https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxx はwebhook URLに置き換えられます。
receiverパラメーターの値を変更します。
alertmanagerセクションで、configパラメーターのreceiverフィールドを、receiversフィールドで指定されたアラート名に設定します。 この例では、webhook1とwebhook2が使用されます。
urlパラメーターの値を変更します。
urlパラメーターの値をDingTalkチャットボットの名前に置き換えます。 この例では、dingtalk1とdingtalk2が使用されます。
説明DingTalkチャットボットを追加するには、webhook URLを追加します。
メール通知の設定
ack-prometheus-operatorページで、[デプロイ] をクリックします。 [パラメーター] ウィザードページで、次の図の赤いボックスに示すように、メールアドレスの詳細を指定し、alertmanagerセクションのconfigパラメーターのreceiverフィールドを、receiversフィールドで指定したアラート名に設定します。 receiversフィールドのデフォルト値はmailです。
アラート通知テンプレートの設定
アラート通知テンプレートは、次の図に示すように、[パラメーター] ウィザードページのalertmanagerセクションのtemplateFilesフィールドでカスタマイズできます。
ConfigMapをプロメテウスにマウントする
このセクションでは、ConfigMapをポッドの /etc/prometheus/configmaps/ パスにマウントする方法について説明します。
1の説明に従って、まずprometheus-operatorをクラスターにデプロイする必要があります。 [パラメーター] ウィザードページで、prometheusセクションのconfigMapsフィールドを、マウントするConfigMapの名前に設定します。
prometheus-operatorがクラスターにデプロイされている場合は、次の手順を実行します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
ack-prometheus-operatorリリースを検索し、[操作] 列の [更新] をクリックします。
[リリースの更新] パネルで、prometheusセクションとalertmanagerセクションのconfigMapsフィールドを、マウントするConfigMapの名前に設定します。 そして、[OK] をクリックします。
たとえば、Prometheusの設定を含む
special-config
という名前のConfigMapをマウントするとします。 Prometheusポッドの構成ファイルとして特別なConfigMapを構成するには、prometheusセクションのconfigMapsフィールドに次の構成を追加して、ConfigMapを /etc/prometheus/configmaps/ パスにマウントします。次の図は、special-config ConfigMapの例を示しています。
次の図は、prometheusセクションでconfigMapsフィールドを設定する方法を示しています。
Grafana の設定
ダッシュボード設定をGrafanaにマウントする
次の手順を実行して、ダッシュボード設定を含むConfigMapをGrafanaポッドにマウントできます。 ack-prometheus-operatorページで、[デプロイ] をクリックします。 [パラメーター] ウィザードページで、次の図に示すように、
extraConfigmapMounts
セクションに次の設定を追加します。説明クラスターにダッシュボード設定を含むConfigMapがあることを確認します。
ConfigMapに追加されるこのラベルは、他のConfigMapsに追加されるラベルと同じである必要があります。
Grafanaコンフィギュレーションの
extraConfigmapMounts
セクションで、ConfigMapの名前とConfigMapのマウント方法を指定します。mountPathを /tmp/dashboards/ に設定します。
configMapをConfigMapの名前に設定します。
ダッシュボード設定を格納するJSONファイルの名前にnameを設定します。
ダッシュボードのデータ永続性を有効にする
Grafanaダッシュボードのデータ保持を有効にするには、次の手順を実行します。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。ack-prometheus-operatorを見つけて、[操作] 列の [更新] をクリックします。
[リリースの更新] パネルで、次の図に示すように、grafanaセクションのpersistenceフィールドを設定します。
GrafanaダッシュボードのデータをJSON形式でオンプレミスマシンにエクスポートできます。 詳細については、「Grafanaダッシュボードのエクスポート」をご参照ください。
よくある質問
DingTalkアラート通知を受信できない場合はどうすればよいですか?
DingTalkチャットボットのwebhook URLを取得します。 詳細については、「シナリオ3: DingTalkを使用したKubernetesイベントのアラート発生」をご参照ください。
[パラメーター] ウィザードページで、dingtalkセクションを見つけ、有効にしてtrueに設定し、トークンフィールドでDingTalkチャットボットのwebhook URLを指定します。 詳細については、「アラート設定」の「DingTalkアラート通知の設定」をご参照ください。
クラスターにprometheus-operatorをデプロイするときにエラーメッセージが表示された場合はどうすればよいですか?
次のエラーメッセージが表示されます。
Can't install release with errors: rpc error: code = Unknown desc = object is being deleted: customresourcedefinitions.apiextensions.k8s.io "xxxxxxxx.monitoring.coreos.com" already exists
エラーメッセージは、クラスターが以前のデプロイメントのカスタムリソース定義 (CRD) オブジェクトをクリアできなかったことを示します。 次のコマンドを実行してCRDオブジェクトを削除します。 次に、prometheus-operatorを再度デプロイします。
kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com
メールアラート通知の受信に失敗した場合はどうすればよいですか。
smtp_auth_password
の値が、電子メールアカウントのログインパスワードではなく、SMTP認証コードであることを確認してください。 SMTPサーバーエンドポイントにポート番号が含まれていることを確認します。[更新] をクリックしてYAMLテンプレートを更新した後、コンソールに次のエラーメッセージが表示された場合の対処方法: 現在のクラスターは一時的に使用できません。 後でもう一度試すか、チケットを起票してください。
Tillerの設定ファイルが大きすぎる場合、クラスターにアクセスできません。 この問題を解決するには、構成ファイル内のいくつかの注釈を削除し、そのファイルをConfigMapとしてポッドにマウントします。 ConfigMapの名前は、prometheusセクションとalertmanagerセクションのconfigMapsフィールドで指定できます。 詳細については、「PrometheusにConfigMapをマウントする」の2番目の方法をご参照ください。
クラスターにデプロイした後、prometheus-operatorの機能を有効にするにはどうすればよいですか?
prometheus-operatorのデプロイ後、次の手順を実行してprometheus-operatorの機能を有効にできます。 クラスターの詳細ページに移動し、左側のナビゲーションウィンドウで
を選択します。 Helmページで、ack-prometheus-operatorを見つけ、[操作] 列の [更新] をクリックします。 [リリースの更新] パネルで、機能を有効にするコードブロックを設定します。 次に、[OK] をクリックします。データストレージ (TSDBまたはディスク) を選択する方法?
TSDBストレージは、限られたリージョンで使用できます。 ただし、ディスクストレージはすべてのリージョンでサポートされています。 次の図は、データ保持ポリシーの設定方法を示しています。
Grafanaダッシュボードでデータが正しく表示されない場合はどうすればよいですか?
クラスターの詳細ページに移動し、左側のナビゲーションウィンドウで
を選択します。 Helmページで、ack-prometheus-operatorを見つけ、[操作] 列の [更新] をクリックします。 更新リリースパネルで、clusterVersionフィールドの値が正しいかどうかを確認します。 クラスターのKubernetesバージョンが1.16より前の場合、clusterVersionを1.14.8-aliyun.1に設定します。 クラスターのKubernetesバージョンが1.16以降の場合は、clusterVersionを1.16.6-aliyun.1に設定します。ack-prometheus名前空間を削除した後にack-prometheusのインストールに失敗した場合はどうすればよいですか?
ack-prometheus名前空間を削除した後、関連するリソース設定が保持される場合があります。 この場合、ack-prometheusの再インストールに失敗する可能性があります。 次の操作を実行して、関連するリソース設定を削除できます。
ロールベースのアクセス制御 (RBAC) 関連のリソース設定を削除します。
次のコマンドを実行して、関連するClusterRolesを削除します。
kubectl delete ClusterRole ack-prometheus-operator-grafana-clusterrole kubectl delete ClusterRole ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRole ack-prometheus-operator-operator kubectl delete ClusterRole ack-prometheus-operator-operator-psp kubectl delete ClusterRole ack-prometheus-operator-prometheus kubectl delete ClusterRole ack-prometheus-operator-prometheus-psp
次のコマンドを実行して、関連するClusterRoleBindingsを削除します。
kubectl delete ClusterRoleBinding ack-prometheus-operator-grafana-clusterrolebinding kubectl delete ClusterRoleBinding ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRoleBinding ack-prometheus-operator-operator kubectl delete ClusterRoleBinding ack-prometheus-operator-operator-psp kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus-psp
次のコマンドを実行して、関連するCRDオブジェクトを削除します。
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com