Prometheus はクラウドネイティブアプリケーション向けのオープンソースモニタリングツールです。本トピックでは、ACK クラスターに Prometheus をデプロイする方法について説明します。
背景情報
本トピックでは、Kubernetes クラスター内のシステムコンポーネントおよびリソースエンティティをモニタリングする方法について説明します。モニタリング対象は以下の 2 種類に分類されます。
-
リソースモニタリング:ノード、クラスター、Pod のリソース使用量を追跡します。
-
アプリケーションモニタリング:リアルタイムユーザー数などのアプリケーション内部メトリックを追跡します。アプリケーションレベルでのモニタリングとアラートを有効にするには、ポートを公開する必要があります。
モニタリング対象は以下のとおりです。
-
システムコンポーネント:API Server、cloud-controller-manager、etcd などの Kubernetes 組み込みコンポーネント。それぞれの設定ファイルでモニタリングを構成します。
-
静的リソースエンティティ:ノードステータスやカーネルイベントなどのリソース。設定ファイルで指定することでモニタリングを有効にします。
-
動的リソースエンティティ:Deployment、DaemonSet、Pod などの Kubernetes ワークロードオブジェクト。これらをモニタリングするには Prometheus をデプロイします。
-
カスタムアプリケーション:ポートを公開し、Prometheus を使用してアプリケーションからカスタムメトリックを収集します。
ステップ 1:オープンソース Prometheus のデプロイ
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、[] をクリックします。
-
[Helm] ページで、[デプロイ] をクリックします。チャートセクションで、[ack-prometheus-operator] を検索して選択し、デフォルト設定を維持したまま、[次へ] をクリックします。
-
このコンポーネントはデフォルトで monitoring 名前空間に、コンポーネント名と同じ名前でインストールされます。
-
必要に応じて、アプリケーション名および名前空間をカスタマイズできます。
-
-
[パラメーター] ページで、チャートバージョン 12.0.0 を選択し、必要なパラメーターを設定してから [OK] をクリックします。
バージョン 12.0.0 では、組み込み機能によるアラート設定がサポートされています。
オプションのパラメーター:
-
アラート設定:DingTalk およびメールアラートをサポートします。
-
Prometheus へのカスタム ConfigMap のマウント:カスタム構成を有効にします。
-
Grafana へのダッシュボードファイルのマウント:カスタムダッシュボードを追加します。
インストール後は、[Helm] ページの Helm チャートリストでコンポーネントのステータスを確認してください。
-
ステップ 2: Prometheus 収集タスクの確認
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
-
[クラスターリスト] ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、[] をクリックします。
-
[サービス] ページで、monitoring 名前空間(ack-prometheus-operator がデプロイされている名前空間)を選択します。ack-prometheus-operator-prometheus の [操作] 列で、[更新] をクリックします。
-
ダイアログボックスで、タイプを [ロードバランサ (LoadBalancer)] に設定します。[リソースの新規作成] を選択し、[アクセス方式] を [パブリックアクセス] に、[課金方法] を [従量課金 (PayByCLCU)] に設定して、[OK] をクリックします。
詳細については、「CLB 課金概要」をご参照ください。
-
更新後、外部 IP アドレスをコピーします。Prometheus UI を
<external_IP_address>:9090(例:47.XX.XX.12:9090)で開きます。 -
Prometheus UI で、[] に移動し、すべてのデータ収集タスクを確認します。
すべてのタスクが [UP] と表示されていれば、データ収集が正常に実行されています。

-
メニューバーで、[Alerts] をクリックし、現在のアラートルールを確認します。

ステップ 3: Grafana での集計データの確認
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
-
[クラスターリスト] ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、[] をクリックします。
-
[サービス] ページで、ack-prometheus-operator がデプロイされている名前空間(デフォルトは monitoring)を選択します。ack-prometheus-operator-grafana の [操作] 列で、[更新] をクリックします。
-
ダイアログボックスで、タイプを [ロードバランサ (LoadBalancer)] に設定します。[リソースの新規作成] を選択し、[アクセス方式] を [パブリックアクセス] に、[課金方法] を [従量課金 (PayByCLCU)] に設定して、[OK] をクリックします。
詳細については、「CLB 課金概要」をご参照ください。
-
更新後、外部 IP アドレスをコピーします。Grafana ダッシュボードを
<external_IP_address>(デフォルトポート:80、例:47.XX.XX.12)で開きます。
アラート設定
[ack-prometheus-operator] コンポーネントは、DingTalk およびメールアラートをサポートしています。
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、[] をクリックします。
-
[作成する] をクリックし、ack-prometheus-operator を見つけて [次へ] に進みます。[パラメーター] ページで、チャートバージョンを選択し、以下のようにパラメーターを構成します。
ack-prometheus-operator がすでにインストール済みの場合は、Helm チャートリストでその名前をクリックし、[パラメーター] をクリックして構成を更新してください。
DingTalk アラートの設定
-
設定ファイルで、
dingtalkフィールドを見つけ、enabledをtrueに設定します。 -
tokenフィールドに、DingTalk Webhook URL を入力します。Webhook URL の取得方法については、「DingTalk チャットボットを使用した Kubernetes モニタリングとアラート通知」をご参照ください。
-
alertmanagerのconfigフィールドで、receiver構成を見つけ、receiversで定義した DingTalk アラート名を入力します。デフォルト名はwebhookです。
メールアラートの設定
-
ハイライトされたセクションに、メールの詳細情報を入力します。
-
alertmanagerのconfigフィールドで、receiverを見つけ、receiversで定義したメールアラート名を入力します。デフォルト名はmailです。

アラート受信者テンプレート
alertmanager 構成の templateFiles セクションで、アラートテンプレートをカスタマイズできます。
Prometheus へのカスタム ConfigMap のマウント
special-config という名前の ConfigMap を使用して、設定ファイルをマウントし、Pod 起動時に --config.file パラメーターとして指定します。
-
ConfigMap を作成します。
-
ConfigMap をマウントします。
[パラメーター] ページで、
configmapsフィールドに以下を追加し、ConfigMap を Prometheus Pod 内の/etc/prometheus/configmaps/にマウントします。
prometheusのconfigmaps構成例:
Grafana 構成
Grafana へのダッシュボードファイルのマウント
Grafana Pod にダッシュボード ConfigMap をマウントするには、[パラメーター] ウィザードの extraConfigmapMounts フィールドを使用します。
以下の点を確認してください。
-
ダッシュボードがクラスター内に ConfigMap として存在し、そのラベルが他の ConfigMap の形式と一致していること。
-
Grafana 構成の
extraConfigmapMountsフィールドに、ダッシュボードの ConfigMap およびマウント情報が含まれていること。-
mountPath:/tmp/dashboards/に設定します。 -
ConfigMap: カスタム ConfigMap の名前。 -
name: ダッシュボードの JSON ファイル名。
-
ダッシュボード永続化の有効化
バックアップのためにダッシュボードを JSON ファイルとしてエクスポートします。「Grafana Export」をご参照ください。
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、[] をクリックします。
-
ack-prometheus-operator を見つけて、[更新] をクリックします。
grafanaフィールドで、以下のようにpersistenceオプションを構成します。
関連操作
オープンソース Prometheus のアンインストール
残留リソースを防ぐため、お使いの Helm チャートバージョンに応じた手順に従ってください。Helm リリース、名前空間、CRD、kubelet サービスを手動でクリーンアップする必要があります。
kubelet サービスはアンインストール時に自動的に削除されません。これはコミュニティで知られている問題 (#1523) です。以下に示すように手動で削除してください。
Chart v12.0.0
コンソール
-
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
-
[クラスターリスト] ページで、ご利用のクラスター名をクリックし、左側のナビゲーションウィンドウから以下の操作を実行します。
-
Helm リリースのアンインストール: [] を選択します。Helm リリースリストで ack-prometheus-operator エントリを見つけ、[削除] を [アクション] 列でクリックし、削除を完了します。リリースレコードをクリアしてください。
-
名前空間の削除: [名前空間とクォータ] をクリックします。名前空間リストで monitoring を見つけて選択し、削除します。
-
CustomResourceDefinitions (CRD) の削除: [] に移動し、[CRD] タブをクリックします。
monitoring.coreos.comAPI グループの以下の CRD リソースをすべて削除します。-
AlertmanagerConfig
-
Alertmanager
-
PodMonitor
-
Probe
-
Prometheus
-
PrometheusRule
-
ServiceMonitor
-
ThanosRuler
-
-
kubelet サービスの削除: [ネットワーク > サービス] を選択します。kube-system 名前空間で ack-prometheus-operator-kubelet を見つけて削除します。
-
Kubectl
-
Helm リリースのアンインストール
helm uninstall ack-prometheus-operator -n monitoring -
名前空間の削除
kubectl delete namespace monitoring -
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 -
kubelet サービスの削除
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Chart v65.1.1
コンソール
-
[ACK コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
-
[クラスターリスト] ページで、ご利用のクラスター名をクリックし、左側のナビゲーションウィンドウから以下の操作を実行します。
-
Helm リリースのアンインストール: [] を選択します。Helm リリースリストで ack-prometheus-operator エントリを見つけ、[削除] を [アクション] 列でクリックし、削除を完了します。リリースレコードをクリアしてください。
-
名前空間の削除: [名前空間とクォータ] をクリックします。名前空間リストで monitoring を見つけて選択し、削除します。
-
CustomResourceDefinitions (CRD) の削除: [] に移動し、[CRD] タブをクリックします。
monitoring.coreos.comAPI グループの以下の CRD リソースをすべて削除します。-
AlertmanagerConfig
-
Alertmanager
-
PodMonitor
-
Probe
-
PrometheusAgent
-
Prometheus
-
PrometheusRule
-
ScrapeConfig
-
ServiceMonitor
-
ThanosRuler
-
-
kubelet サービスの削除: [ネットワーク > サービス] を選択します。kube-system 名前空間で ack-prometheus-operator-kubelet を見つけて削除します。
-
Kubectl
-
Helm リリースのアンインストール
helm uninstall ack-prometheus-operator -n monitoring -
名前空間の削除
kubectl delete namespace monitoring -
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 prometheusagents.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd scrapeconfigs.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com -
kubelet サービスの削除
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
アラートサイレンスの設定
サイレンスルールは、サイレンス期間が終了するか、ルールが削除されるまで、一致するアラート通知を抑制します。
-
Alertmanager をローカルポート 9093 で公開します。
kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring -
ECS インスタンスに Elastic IP アドレス (EIP) を関連付け、
<EIP>:9093で Alertmanager にアクセスします。セキュリティグループで、ポート 9093 に対するローカル IP からのトラフィックを許可していることを確認してください。「セキュリティグループルールの追加」をご参照ください。
-
[Silence] をクリックし、アラートサイレンスを設定します。

よくある質問
DingTalk 設定後にアラートが届かない
-
DingTalk チャットボットの Webhook URL を取得します。「イベントモニタリング」をご参照ください。
-
dingtalk フィールドを見つけ、enabled を true に設定し、Token フィールドに 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 を削除してからコンポーネントを再デプロイしてください。
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 サーバーアドレスにポート番号が含まれていない場合に失敗することがあります。
YAML 更新をクリックするとエラーが発生する: 現在クラスターは一時的に利用できません。後でもう一度お試しください。
これは Tiller 構成ファイルが大きすぎてクラスターにアクセスできなくなるために発生します。コメントを削除してファイルサイズを小さくし、ConfigMap としてマウントしてください。prometheus-operator は prometheus および alertmanager Pod のみ ConfigMap マウントをサポートしています。「Prometheus へのカスタム ConfigMap のマウント」をご参照ください。
デプロイ後に機能を有効化する方法
prometheus-operator デプロイ後に機能を有効化できます。クラスター詳細ページで、[] を選択します。[ack-prometheus-operator] を見つけて、[操作] 列の [更新] をクリックします。有効化する機能を見つけ、構成してから [OK] をクリックします。
TSDB と Alibaba Cloud ディスクの選択
TSDB は Alibaba Cloud ディスクよりも少ないリージョンで利用可能です。データ保持ポリシー:
Grafana ダッシュボードの表示に関する問題
クラスター詳細ページで、[] を選択します。[ack-prometheus-operator] を見つけて、[操作] 列の [更新] をクリックします。clusterVersion がご利用のクラスターバージョンと一致していることを確認してください。v1.16 より前のクラスターの場合は 1.14.8-aliyun.1 を、v1.16 以降の場合は 1.16.6-aliyun.1 を入力します。
名前空間を削除した後の再インストールが失敗する
名前空間のみを削除しても、構成が残留することがあります。以下のリソースをクリーンアップしてください。
-
RBAC 権限の削除。
-
ClusterRole の削除。
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 -
ClusterRoleBinding の削除。
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


