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

Container Service for Kubernetes:オープンソース Prometheus による ACK クラスターの監視

最終更新日:Aug 21, 2026

Prometheus は、クラウドネイティブアプリケーション向けのオープンソースモニタリングツールです。このトピックでは、ACK クラスターに Prometheus をデプロイする方法について説明します。

背景情報

このトピックでは、Kubernetes クラスター内のシステムコンポーネントとリソースエンティティを監視する方法について説明します。監視ターゲットは、2 つのカテゴリに分類されます:

  • リソースモニタリング:ノード、クラスター、および Pod のリソース使用状況を追跡します。

  • アプリケーションモニタリング:リアルタイムのユーザー数などの内部アプリケーションメトリクスを追跡します。ポートを公開して、アプリケーションレベルのモニタリングとアラートを有効にします。

監視ターゲットは次のとおりです:

  • システムコンポーネント:API Server、cloud-controller-manager、etcd などの組み込み Kubernetes コンポーネント。それぞれの設定ファイルでモニタリングを設定します。

  • 静的リソースエンティティ:ノードステータスやカーネルイベントなどのリソース。設定ファイルでこれらを指定して、モニタリングを有効にします。

  • 動的リソースエンティティ:Deployment、DaemonSet、Pod などの Kubernetes ワークロードオブジェクト。Prometheus をデプロイしてこれらを監視します。

  • カスタムアプリケーション:ポートを公開し、Prometheus を使用してアプリケーションからカスタムメトリクスを収集します。

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

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. Helm ページで、 デプロイ をクリックします。[Chart] セクションで、 ack-prometheus-operator を検索して選択し、デフォルト設定のまま 次へ をクリックします。

    • デフォルトでは、コンポーネントは monitoring 名前空間にインストールされ、コンポーネントにちなんで名付けられます。

    • 必要に応じて、アプリケーション名と名前空間をカスタマイズします。

  4. パラメーター ページで、Chart バージョン 12.0.0 を選択し、必要なパラメーターを設定してから、 OK をクリックします。

    バージョン 12.0.0 は、組み込み機能によるアラート設定をサポートしています。

    オプションパラメーター:

    インストール後、 Helm ページの Helm チャートリストでコンポーネントのステータスを確認します。

手順2:Prometheus 収集タスクの表示

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

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

  3. [サービス] ページで、ack-prometheus-operator がデプロイされている monitoring 名前空間を選択します。ack-prometheus-operator-prometheus[操作] 列で、 更新 をクリックします。

  4. ダイアログボックスで、[タイプ] を [ロードバランサ (LoadBalancer)] に設定します。 リソースの新規作成 を選択し、 アクセス方式 を [パブリックアクセス] に、 課金方法 を [従量課金 (PayByCLCU)] に設定します。 [OK] をクリックします。

    CLB 課金の概要」をご参照ください。
  5. 更新後、外部 IP アドレスをコピーします。<外部 IP アドレス>:9090 (例: 47.XX.XX.12:9090) で Prometheus UI を開きます。

  6. Prometheus UI で、 に移動して、すべてのデータ収集タスクを表示します。

    すべてのタスクが UP と表示されている場合、データ収集は正常に実行されています。

  7. メニューバーで [Alerts] をクリックし、現在のアラートルールを表示します。

    [Alerts] ページでは、Inactive (89)、 Pending (3)、 Firing (4) のアラートステータス統計を表示できます。現在トリガーされているアラートには、 TargetDown (2件アクティブ) と Watchdog (1件アクティブ) があります。

手順3:Grafana での集計データの表示

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

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

  3. サービス ページで、ack-prometheus-operator がデプロイされている名前空間 (デフォルトでは monitoring) を選択します。 ack-prometheus-operator-grafana という名前の Service の 操作 列の 更新 をクリックします。

  4. ダイアログボックスで、[タイプ] を [ロードバランサ (LoadBalancer)] に設定します。 リソースの新規作成 を選択し、 アクセス方式 を [パブリックアクセス] に、 課金方法 を [従量課金 (PayByCLCU)] に設定します。 [OK] をクリックします。

    CLB 課金の概要」をご参照ください。
  5. 更新後、外部 IP アドレスをコピーします。<外部 IP アドレス> (デフォルトポート: 80) で Grafana ダッシュボードを開きます。例: 47.XX.XX.12

    Dashboard

アラート設定

ack-prometheus-operator コンポーネントは、DingTalk およびメールアラートをサポートしています。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. 作成する をクリックし、ack-prometheus-operator を見つけて、 次へ をクリックします。 パラメーター ページで、Chart バージョンを選択し、以下で説明するようにパラメーターを設定します。

    ack-prometheus-operator がすでにインストールされている場合は、Helm チャートリストでその名前をクリックし、 パラメーター をクリックして設定を更新します。

DingTalk アラートの設定

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

  2. token フィールドに、DingTalk ウェブフック URL を入力します。

    Webhook URL については、「Kubernetes のモニタリングとアラートのための DingTalk チャットボットの使用」をご参照ください。
  3. alertmanagerconfig フィールドで、receiverの設定を見つけ、receiversで定義した DingTalk アラート名を入力します。デフォルト名は webhook です。

    例:複数の DingTalk チャットボットの設定

    2 つの DingTalk チャットボットがある場合は、次の手順に従います:

    1. DingTalk の token 設定を置き換えます。

      DingTalk チャットボット設定で、ウェブフック URL を dingtalk1 と dingtalk2 のアドレスに置き換えます。 https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxx を実際のウェブフック URL に置き換えます。

      ##
      podAnnotations: {}
      service:
        ## dingtalk サービスの設定
        ##
        annotations: {}
      clusterIP: ""
      externalIPs: ""
      loadBalancerIP: ""
      type: ClusterIP
      image:
        repository: timonwong/prometheus-webhook-dingtalk
        tag: latest
        pullPolicy: IfNotPresent
      # DingTalk ロボットのトークンを入力してください
      # 参考: https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq
      token:
      - dingtalk1=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx
      - dingtalk2=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx
    2. receivers を変更します。

      alertmanagerconfig フィールドで receiver を探し、receivers 設定から対応する DingTalk アラート名を入力します。この例では、名前は webhook1webhook2 です。

    3. URL の値を変更します。

      URL の値を、対応する DingTalk Webhook 名に置き換えます。この例では、名前は dingtalk1dingtalk2 です。

      config:
        global:
          resolve_timeout: 5m
        route:
          group_by: ['job']
          group_wait: 1m
          group_interval: 1m
          repeat_interval: 2m
          receiver: "webhook1"
          routes:
            - match:
                alertname: Watchdog
              receiver: "webhook2"
        receivers:
        #- name: "null"
        - name: webhook1
          webhook_configs:
            - url: http://ack-prometheus-operator-dingtalk:8060/dingtalk/dingtalk1/send
              send_resolved: true
        - name: webhook2
          webhook_configs:
            - url: http://ack-prometheus-operator-dingtalk:8060/dingtalk/dingtalk2/send
              send_resolved: true
    説明

    さらに DingTalk チャットボットを追加するには、各 Webhook 設定を順番に追加します。

メールアラートの設定

  1. ハイライトされたセクションに、メールの詳細を入力します。

  2. alertmanagerconfig フィールドで receiver を見つけ、receivers で定義されているメールアラート名を入力します。デフォルト名は mail です。

config:
  global:
    resolve_timeout: 5m
  route:
    group_by: ['job']
    group_wait: 1m
    group_interval: 1m
    repeat_interval: 2m
    receiver: "null"
    routes:
    - match:
        alertname: Watchdog
      receiver: "null"
  receivers:
  - name: "null"
  #- name: webhook
  #  webhook_configs:
  #  - url: http://ack-prometheus-operator-alertmanager.monitoring:8060/dingtalk/ops_dingding/send
  #    send_resolved: true
  #- name: 'mail'
  #  email_configs:
  #  - to: 'xxxxxxx@qq.com'        # 受信アドレス: 
  #    smarthost: 'smtp.163.com:465' # SMTP サーバーアドレス: 
  #    from: 'xxxxx@163.com'        # 送信者アドレス: 
  #    auth_username: 'xxxxx@163.com'  # メールユーザー名: 
  #    auth_password: 'xxxxxxxxx'      # メールパスワード (認証コード): 
  #    require_tls: false             # TLS スイッチ: 
  #    send_resolved: true

アラート receiver テンプレート

alertmanager 設定の templateFiles セクションで、アラートテンプレートをカスタマイズします。

##
templateFiles: {}
#
# テンプレートの例:
#   template_1.tmpl: |-
#     {{ define "cluster" }}{{ .ExternalURL | reReplaceAll ".*alertmanager\.(.*)" "$1" }}{{ end }}
#
#     {{ define "slack.myorg.text" }}
#     {{- $root := . -}}
#     {{ range .Alerts }}
#       *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
#       *Cluster:*  {{ template "cluster" $root }}
#       *Description:* {{ .Annotations.description }}
#       *Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:>
#       *Runbook:* <{{ .Annotations.runbook }}|:spiral_note_pad:>
#       *Details:*
#         {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
#         {{ end }}

Prometheus へのカスタム ConfigMap のマウント

special-config という名前の ConfigMap を使用して設定ファイルをマウントし、Pod の起動時に --config.file パラメーターとして指定します。

  1. ConfigMap を作成します。

    ConfigMap の例を展開して表示

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: special-config
    data:
      config.yaml: |-
          global:
            # スクレイプ間隔、デフォルトは 1m
            [ scrape_interval: <duration> | default = 1m ]
    
            # スクレイプタイムアウト、デフォルトは 10s
            [ scrape_timeout: <duration> | default = 10s ]
    
            # ルール評価間隔、デフォルトは 1m
            [ 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 Pod の /etc/prometheus/configmaps/ にマウントします。

    ## ConfigMaps は、Prometheus オブジェクトと同じ名前空間にある ConfigMap のリストで、
    ## Prometheus Pod にマウントされます。
    ## ConfigMap は /etc/prometheus/configmaps/ にマウントされます。
      ##
    configMaps: [special-config]

    prometheus configmaps 設定の例:

    ## ConfigMaps は、Prometheus と同じ名前空間にある ConfigMap のリストです
    ## ConfigMap は /etc/prometheus/configmaps/ にマウントされます。
    ##
    configMaps:
    - "special-config"
    - "detail-config"

Grafana の設定

Grafana へのダッシュボードファイルのマウント

ダッシュボードの ConfigMap を Grafana Pod にマウントするには、パラメーター ウィザードの extraConfigmapMounts フィールドを使用します。

extraConfigmapMounts: []
# - name: certs-configmap
#   mountPath: /etc/grafana/ssl/
#   configMap: certs-configmap
#   readOnly: true

次のことを確認してください:

  • ダッシュボードがクラスター内に ConfigMap として存在し、そのラベルが他の ConfigMap の形式と一致していること。

  • Grafana 設定の extraConfigmapMounts フィールドには、ダッシュボードの ConfigMap とマウント情報が含まれています。

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

    • ConfigMap: カスタム ConfigMap の名前。

    • name:ボリュームマウントの名前。

ダッシュボードの永続化の有効化

バックアップのためにダッシュボードを JSON ファイルとしてエクスポートします。詳細については、「Grafana エクスポート」をご参照ください。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. ack-prometheus-operator を見つけて更新をクリックします。grafana フィールドで、persistence オプションを以下のように設定します。

    ##
    persistence:
      # 永続化スイッチ:
      enabled: false
      # storageClass 名: ストレージクラスには alicloud-disk-available、alicloud-disk-efficiency、alicloud-disk-essd、alicloud-disk-ssd の 4 種類があります
      storageClassName: alicloud-disk-efficiency
      accessModes:
        - ReadWriteOnce
      size: 30 Gi
      # annotations: {}
      # subPath: ""
      #existingClaim:

関連操作

オープンソース Prometheus のアンインストール

リソースの残存を防ぐため、お使いの Helm Chart のバージョンに応じた手順に従ってください。Helm リリース、名前空間、CRD、および kubelet Service を手動でクリーンアップします。

kubelet Service はアンインストール時に自動的に削除されません。これは既知のコミュニティの問題 (#1523) です。以下で説明するように手動で削除してください。

Chart v12.0.0

コンソール

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

  2. クラスターリスト ページで、クラスターの名前をクリックし、左側メニューから次の操作を実行します。

    • Helm リリースのアンインストール:アプリケーション > Helm を選択します。Helm リリースリストで ack-prometheus-operator のエントリを見つけ、 アクション 列の 削除 をクリックして削除します。リリースレコードをクリアします。

    • 名前空間の削除:名前空間とクォータ をクリックします。名前空間リストで monitoring を見つけて選択し、削除します。

    • カスタムリソース定義 (CRD) の削除: ワークロード > カスタムリソース に移動し、CRD タブをクリックします。monitoring.coreos.com API グループ配下のすべての CRD リソースを削除します:

      • AlertmanagerConfig

      • Alertmanager

      • PodMonitor

      • Probe

      • Prometheus

      • PrometheusRule

      • ServiceMonitor

      • ThanosRuler

    • kubelet Service の削除:ネットワーク > サービス を選択します。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 Service の削除

    kubectl delete service ack-prometheus-operator-kubelet -n kube-system

Chart v65.1.1

コンソール

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

  2. クラスターリスト ページで、クラスターの名前をクリックし、左側メニューから次の操作を実行します。

    • Helm リリースのアンインストール:アプリケーション > Helm を選択します。Helm リリースリストで ack-prometheus-operator のエントリを見つけ、 アクション 列の 削除 をクリックして削除します。リリースレコードをクリアします。

    • 名前空間の削除:名前空間とクォータ をクリックします。名前空間リストで monitoring を見つけて選択し、削除します。

    • CustomResourceDefinition (CRD) の削除: ワークロード > カスタムリソースに移動し、CRD タブをクリックします。monitoring.coreos.com API グループ配下のすべての CRD リソースを削除します。

      • AlertmanagerConfig

      • Alertmanager

      • PodMonitor

      • Probe

      • PrometheusAgent

      • Prometheus

      • PrometheusRule

      • ScrapeConfig

      • ServiceMonitor

      • ThanosRuler

    • kubelet Service の削除:ネットワーク > サービス を選択します。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 Service の削除

    kubectl delete service ack-prometheus-operator-kubelet -n kube-system

アラートサイレンスの設定

サイレンスルールは、サイレンス期間が終了するかルールが削除されるまで、一致するアラート通知を抑制します。

  1. ローカルポート 9093 で Alertmanager を公開します:

    kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring
  2. Elastic IP アドレス (EIP) を関連付け<EIP>:9093 で Alertmanager にアクセスします。

    セキュリティグループがポート 9093 でローカル IP からのトラフィックを許可していることを確認してください。詳細については、「セキュリティグループルールの追加」をご参照ください。
  3. [Silence] をクリックして、アラートサイレンスを設定します。

よくある質問

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 を削除して、コンポーネントを再デプロイしてください:

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

メールアラートが機能しない

認証コードの代わりに auth_password にログインパスワードを入力すると、メールアラートが失敗する場合があります。SMTP サーバーアドレスにはポート番号を含める必要があります。

[YAML 更新] をクリックするとエラーが発生する:The current cluster is temporarily unavailable. Please try again later.

これは、Tiller 設定ファイルが大きすぎてクラスターにアクセスできなくなる場合に発生します。コメントを削除してファイルサイズを小さくし、ConfigMap としてマウントします。prometheus-operator は、prometheus および alertmanager Pod の ConfigMap マウントのみをサポートしています。詳細については、「Prometheus へのカスタム ConfigMap のマウント」をご参照ください。

デプロイ後の機能の有効化

prometheus-operator をデプロイした後に機能を有効にします。クラスターの詳細ページで、アプリケーション > Helm を選択します。ack-prometheus-operator を見つけ、[操作] 列の 更新 をクリックします。有効にする機能を見つけて設定し、 OK をクリックします。

TSDB と Alibaba Cloud ディスクの選択

TSDB は、Alibaba Cloud ディスクよりも利用可能なリージョンが少ないです。データ保持ポリシー:

## メトリクスを保持する期間
##
retention: 10d

Grafana ダッシュボードの表示の問題

クラスターの詳細ページで、アプリケーション > Helm を選択します。ack-prometheus-operator を見つけ、[操作] 列の 更新 をクリックします。 clusterVersion がクラスターのバージョンと一致していることを確認します。v1.16 より前のクラスターの場合は 1.14.8-aliyun.1 を入力します。v1.16 以降の場合は 1.16.6-aliyun.1 を入力します。

名前空間の削除後の再インストール失敗

名前空間のみを削除すると、設定が残ってしまう場合があります。次のリソースをクリーンアップしてください:

  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