すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:オープンソースの Prometheus を使用して ACK クラスタを監視する

最終更新日:Jul 16, 2025

Prometheus は、クラウドネイティブ アプリケーションの監視に使用されるプロジェクトです。このトピックでは、Container Service for Kubernetes(ACK)クラスタに Prometheus をデプロイする方法について説明します。

背景情報

このトピックでは、Kubernetes クラスタ内のシステムコンポーネントとリソースエンティティを効率的に監視する方法について説明します。監視システムは、次のタイプのオブジェクトを監視します。

  • リソース: ノードとアプリケーションのリソース使用率。Kubernetes クラスタでは、監視システムは、ノード、ポッド、およびクラスタのリソース使用量を監視します。

  • アプリケーション: アプリケーションの内部メトリクス。たとえば、監視システムは、アプリケーションを使用しているオンラインユーザーの数を動的にカウントし、アプリケーションポートから監視メトリクスを収集し、収集されたメトリクスに基づいてアラートを有効にします。

Kubernetes クラスタでは、監視システムは次のオブジェクトを監視します。

  • クラスタコンポーネント: API サーバー、cloud-controller-manager、etcd などの Kubernetes クラスタのコンポーネント。クラスタコンポーネントを監視するには、構成ファイルで監視方法を指定します。

  • 静的リソースエンティティ: ノード上のリソースのステータスとカーネルイベント。静的リソースエンティティを監視するには、構成ファイルで監視方法を指定します。

  • 動的リソースエンティティ: デプロイメント、デーモンセット、ポッドなど、Kubernetes 内の抽象ワークロードのエンティティ。Kubernetes クラスタ内の動的リソースエンティティを監視するには、Kubernetes クラスタに Prometheus をデプロイできます。

  • アプリケーション内のカスタムオブジェクト: データとメトリクスのカスタマイズされた監視が必要なアプリケーションの場合、固有の監視要件を満たすために特定の構成を設定する必要があります。これは、ポート公開と Prometheus 監視ソリューションを組み合わせることで実現できます。

手順 1: オープンソースの Prometheus をデプロイする

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  3. [Helm] ページで、[デプロイ] をクリックします。[デプロイ] パネルの [チャート] セクションで、[ack-prometheus-operator] を見つけて選択し、他のパラメータにはデフォルト値を使用し、[次へ] をクリックします。

    • チャートは、デフォルトのアプリケーション名を使用して、デフォルトで [monitoring] 名前空間にインストールされます。

    • カスタム名と名前空間を使用するには、[基本情報] ステップで [アプリケーション名] パラメータと [名前空間] パラメータを構成します。

  4. [パラメータ] ウィザードページで、チャートバージョンに [12.0.0] を選択し、パラメータを構成して、[OK] をクリックします。Chart 12.0.0 はアラーム構成をサポートしています。組み込み関数を使用して、監視条件とアラーム条件を設定できます。

    ビジネス要件に基づいて、次のオプションパラメータをカスタマイズできます。

    デプロイ後、[Helm] ページでアプリケーションのステータスを表示できます。

ステップ 2: 表示 Prometheus コレクションタスク

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[ネットワーク] > [サービス] を選択します。

  3. [サービス] ページで、[ack-prometheus-operator] がデプロイされている名前空間(デフォルトでは [monitoring])を選択します。[ack-prometheus-operator-prometheus] を見つけ、[アクション] 列の [更新] をクリックします。

  4. [サービスの更新] ダイアログボックスで、[サービスタイプ][SLB] に設定します。[リソースの作成] を選択し、[アクセス方法][パブリックアクセス] に設定します。[課金方法] パラメータに [従量課金制(CU 単位)] を選択し、必要に応じて他のパラメータを構成し、[OK] をクリックします。

    詳細については、クラシックロードバランサ(CLB)の課金 をご参照ください。
  5. 更新が完了したら、外部 IP アドレスをコピーし、ブラウザのアドレスバーに IP アドレス: ポート番号 を入力して Prometheus にアクセスします。例: 47.XX.XX.12:9090

  6. Prometheus ページの上部ナビゲーションバーで、[ステータス] > [ターゲット] を選択して、すべてのデータ収集タスクを表示します。[UP] 状態のタスクは正しく実行されています。

    image

  7. アラートルールを表示するには、上部ナビゲーションバーの [アラート] をクリックします。

    Alerts

手順 3: Grafana 集計データを表示する

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[ネットワーク] > [サービス] を選択します。

  3. [サービス] ページで、[ack-prometheus-operator] デプロイメントがデプロイされている名前空間(デフォルトでは monitoring)を選択します。[ack-prometheus-operator-prometheus] を見つけ、[アクション] 列の [更新] をクリックします。

  4. [サービスの更新] ダイアログボックスで、[サービスタイプ][SLB] に設定します。[リソースの作成] を選択し、[アクセス方法][パブリックアクセス] に設定します。[課金方法] パラメータに [従量課金制(CU 単位)] を選択し、必要に応じて他のパラメータを構成し、[OK] をクリックします。

    詳細については、CLB 課金 をご参照ください。
  5. 更新が完了したら、外部 IP アドレスをコピーし、ブラウザのアドレスバーに IP アドレス: ポート番号 を入力して Grafana にアクセスします。デフォルトでは、ポート番号は 80 です。例: 47.XX.XX.12:80

    Dashboard

アラート構成

[prometheus-operator] を構成して、DingTalk メッセージまたはメールを使用してアラート通知を送信できます。

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  3. [Helm] ページで、[デプロイ] をクリックします。[基本情報] ステップで、[チャート] セクションで [ack-prometheus-operator] を見つけて選択し、必要に応じて他のパラメータを構成し、[次へ] をクリックします。[パラメータ] ステップで、次の内容に基づいてアラートパラメータを構成します。

    ack-prometheus-operator がインストールされている場合は、[Helm] ページのリストからその名前をクリックし、[パラメータ] タブをクリックして構成します。
    • DingTalk 通知を構成する

      1. 構成ファイルで dingtalk フィールドを見つけ、enabledtrue に設定します。

      2. token フィールドに DingTalk チャットボットの webhook URL を入力します。 webhook URL の取得方法の詳細については、シナリオ 3: DingTalk チャットボットで Kubernetes の監視とアラートを実装する をご参照ください。

      3. alertmanager セクションで、config フィールドの receiver パラメータを見つけ、receivers フィールドに指定した DingTalk チャットボット名を入力します。デフォルトでは、webhook が使用されます。

        複数の DingTalk チャットボットの構成例

        2 つの DingTalk チャットボットがある場合は、次の手順を実行します。

        1. token フィールドの値を置き換えます。

          webhook URL をそれぞれ dingtalk1dingtalk2 のアドレスに置き換えます。この例では、次の図の https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxx URL を実際の webhook アドレスに置き換えます。

          token配置

        2. receivers を変更します。

          alertmanager セクションで、config フィールドの receiver パラメータを見つけ、receivers フィールドに指定した DingTalk チャットボット名を入力します。この例では、webhook1webhook2 が使用されます。

        3. url パラメータを変更します。

          url パラメータの値を DingTalk チャットボットの名前に置き換えます。この例では、dingtalk1webhook2 が使用されます。

          webhook配置

        説明

        DingTalk チャットボットをさらに追加するには、webhook URL を追加します。

    • メール通知を構成する

      • 次の図の赤い枠にメールアドレスの詳細を入力します。

      • 構成ファイルの alertmanager セクションで config フィールドを見つけ、receiver を見つけ、receivers フィールドで定義したメールアドレスを入力します。デフォルトでは、mail が使用されます。

        邮件告警

    • アラート通知テンプレートを設定する

      次の図に示すように、alertmanager セクションの templateFiles フィールドでアラート通知テンプレートをカスタマイズできます: 模板设置

カスタム ConfigMap を Prometheus にマウントする

このセクションでは、special-config という名前の ConfigMap を介して構成ファイルを Prometheus にマウントし、ポッドの起動時に --config.file パラメータを使用して渡す方法について説明します。

  1. ConfigMap を作成します。

    ConfigMap の内容を表示する

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: special-config
    data:
      config.yaml: |-
        global:
          # スクレイプ間隔。デフォルト値: 1 分。
          [ scrape_interval: <duration> | default = 1m ]
          
          # スクレイプタイムアウト期間。デフォルト値: 10 秒。
          [ scrape_timeout: <duration> | default = 10s ]
          
          # ルール評価間隔。デフォルト値: 1 分。
          [ evaluation_interval: <duration> | default = 1m ]
    
        # スクレイプ構成
        scrape_configs:
        [ - <scrape_config> ... ]
    
        # ルール構成
        rule_files:
        [ - <filepath_glob> ... ]
    
        # アラート構成
        alerting:
          alert_relabel_configs:
          [ - <relabel_config> ... ]
          alertmanagers:
          [ - <alertmanager_config> ... ]
  2. ConfigMap をマウントします。

    [パラメータ] ステップで、configmaps フィールドに次の内容を追加して、指定された ConfigMap を Prometheus ポッドの /etc/prometheus/configmaps/ パスにマウントします。

    更新配置

    次の図は、prometheus セクションの configmaps フィールドのサンプル構成を示しています。

    image

Grafana の構成

ダッシュボード構成ファイルを Grafana にマウントする

ConfigMap を介してダッシュボードファイルを Grafana ポッドにマウントするには、パラメータ構成ウィザードで extraConfigmapMounts フィールドを見つけます。dashboard外挂配置 次のことを確認してください。

  • ダッシュボードが ConfigMa としてクラスタに存在し、ConfigMap のラベルが他の ConfigMap のラベルと同じ形式であること。

  • extraConfigmapMounts フィールドにダッシュボードの ConfigMap 情報とマウントの詳細を入力します。

    • mountPath: /tmp/dashboards/ に設定します。

    • ConfigMap: カスタム ConfigMap の名前に設定します。

    • name: ダッシュボード構成を格納する JSON ファイルの名前に設定します。

ダッシュボードのデータ永続性を有効にする

ダッシュボードをローカルにエクスポートするには、ターゲットダッシュボードを JSON ファイルとしてローカルマシンに保存します。詳細については、ダッシュボードを JSON としてエクスポートする をご参照ください。

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[アプリケーション] > [Helm] を選択します。

  3. ack-prometheus-operator を見つけ、[アクション] 列の [更新] をクリックし、次の図に示すように、grafana セクションの persistence フィールドを構成します。

    grafana的持久化操作

関連操作

オープンソースの Prometheus コンポーネントをアンインストールする

オープンソースの Prometheus コンポーネントの Helm チャートバージョンを確認し、次の手順を実行してオープンソースの Prometheus コンポーネントをアンインストールします。これは、残留リソースと予期しない例外を防ぐのに役立ちます。関連する Helm リリース、名前空間、CustomResourceDefinitions(CRD)、および kubelet サービスを手動で削除する必要があります。

ack-prometheus-operator コンポーネントをアンインストールするときに kubelet サービスが自動的に削除されない場合は、以下のセクションを参照してください。この問題の詳細については、#1523 をご参照ください。

Chart v12.0.0

ACK コンソールを使用する

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。クラスタ詳細ページの左側のナビゲーションウィンドウで、次の操作を実行します。

    • Helm リリースのアンインストール: [アプリケーション] > [Helm] を選択します。 Helm ページで、ack-prometheus-operator リリースを選択し、[アクション] 列の [削除] をクリックします。削除ダイアログボックスで、リリースレコードをクリアするを選択し、OK をクリックします。

    • 関連する名前空間の削除: [名前空間とクォータ] をクリックします。名前空間ページで、monitoring 名前空間を選択し、ページの下部にある削除をクリックします。確認メッセージで情報を確認し、削除の確認をクリックします。

    • 関連する CRD の削除: [ワークロード] > [カスタムリソース] を選択します。カスタムリソースページで、[CRD] タブをクリックします。monitoring.coreos.com API グループに属するすべての CRD を選択し、ページの下部にある削除をクリックします。確認メッセージで情報を確認し、削除の確認をクリックします。次のリストは、API グループの 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 コンソールを使用する

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。クラスタ詳細ページの左側のナビゲーションウィンドウで、次の操作を実行します。

    • Helm リリースのアンインストール: [アプリケーション] > [Helm] を選択します。 Helm ページで、ack-prometheus-operator リリースを選択し、[アクション] 列の [削除] をクリックします。削除ダイアログボックスで、リリースレコードをクリアするを選択し、OK をクリックします。

    • 関連する名前空間の削除: [名前空間とクォータ] をクリックします。名前空間ページで、monitoring 名前空間を選択し、ページの下部にある削除をクリックします。確認メッセージで情報を確認し、削除の確認をクリックします。

    • 関連する CRD の削除: [ワークロード] > [カスタムリソース] を選択します。カスタムリソースページで、[CRD] タブをクリックします。monitoring.coreos.com API グループに属するすべての CRD を選択し、ページの下部にある削除をクリックします。確認メッセージで情報を確認し、削除の確認をクリックします。次のリストは、API グループの 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

アラート抑制を構成する

サイレンスルールを構成することで、特定のアラートを抑制できます。アラートがルール条件に一致すると、サイレンス期間が終了するか、ルールが手動で削除されるまで、通知は保留されます。

  1. 次のコマンドを実行して、Alertmanager をローカルポート 9093 で公開し、外部アクセスを許可します。

    kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring
  2. Elastic Compute Service(ECS)インスタンスに EIP を関連付ける、その後、ブラウザで <EIP>:9093 を介してアクセスします。

    ECS セキュリティグループでローカル IP とポート 9093 が許可されていることを確認してください。詳細については、セキュリティグループルールの追加 をご参照ください。
  3. [サイレンス] をクリックし、画面の指示に従ってアラート抑制を構成します。

    image

よくある質問

DingTalk アラート通知を受信できない場合はどうすればよいですか?

  1. DingTalk チャットボットの webhook URL を取得します。詳細については、イベント監視 をご参照ください。

  2. パラメータウィザードページで、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 オブジェクトを削除します。その後、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 としてポッドにマウントできます。 prometheus セクションと alertmanager セクションの configMaps フィールドで ConfigMap の名前を指定できます。詳細については、ConfigMap を Prometheus にマウントする の2番目の方法をご参照ください。

クラスタにデプロイした後、prometheus-operator の機能を有効にするにはどうすればよいですか?

prometheus-operator をデプロイした後、次の手順を実行して prometheus-operator の機能を有効にできます。クラスタ詳細ページに移動し、左側のナビゲーションウィンドウで [アプリケーション] > [Helm] を選択します。 Helm ページで、[ack-prometheus-operator] を見つけ、アクション列の [更新] をクリックします。リリースの更新パネルで、コードブロックを構成して機能を有効にします。次に、[OK] をクリックします。

データストレージとして TSDB またはディスクを選択するにはどうすればよいですか?

TSDB ストレージは一部のリージョンでのみ使用できます。ただし、ディスクストレージはすべてのリージョンでサポートされています。次の図は、データ保持ポリシーの構成方法を示しています。数据回收策略

Grafana ダッシュボードにデータが正しく表示されない場合はどうすればよいですか?

クラスタ詳細ページに移動し、左側のナビゲーションウィンドウで [アプリケーション] > [Helm] を選択します。 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 を再度インストールできない可能性があります。次の操作を実行して、関連するリソース構成を削除できます。

  1. ロールベースのアクセス制御(RBAC)関連のリソース構成を削除します。

    1. 次のコマンドを実行して、関連する 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
    2. 次のコマンドを実行して、関連する 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
  2. 次のコマンドを実行して、関連する 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