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

Container Service for Kubernetes:オープンソースのPrometheusを使用したACKクラスターのモニタリング

最終更新日:Oct 21, 2024

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

前提条件

背景情報

通常、監視システムは次のタイプのオブジェクトを監視します。

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

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

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

  • クラスターコンポーネント: kube-apiserver、kube-controller-managerなどのKubernetesクラスターのコンポーネント。

  • ノード上のリソースのステータスやカーネルイベントなどの静的リソースエンティティ。

  • 動的リソースエンティティ: デプロイ、DaemonSets、ポッドなど、Kubernetesの抽象ワークロードのエンティティ。

  • アプリケーションのカスタムオブジェクト: アプリケーションの監視に使用されるカスタムデータとメトリック。

クラスターコンポーネントと静的リソースエンティティを監視するには、設定ファイルで監視方法を指定します。

Kubernetesクラスター内の動的リソースエンティティをモニタリングするには、KubernetesクラスターにPrometheusをデプロイします。

手順

  1. プロメテウスを展開します。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[Marketplace] > [Marketplace] を選択します。

    2. [マーケットプレイス] ページで、[アプリカタログ] タブをクリックします。 次に、ack-prometheus-operatorを見つけてクリックします。

    3. ack-prometheus-operatorページで、[デプロイ] をクリックします。

    4. [デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。

    5. [パラメーター] ウィザードページでパラメーターを設定し、[OK] をクリックします。

      デプロイ結果を確認します。

      1. 次のコマンドを実行して、クラスター内のPrometheusをローカルポート9090にマッピングします。

        kubectl port-forward svc/ack-prometheus-operator-prometheus 9090:9090 -nモニタリング
      2. ブラウザのアドレスバーにlocalhost:9090と入力して、Prometheusページにアクセスします。

      3. 上部のナビゲーションバーで、[ステータス] > [ターゲット] を選択して、すべてのデータ収集タスクを表示します。 UP状態のData collection tasksタスクは通常どおり実行されています。 Targets

  2. 集計データを表示します。

    1. 次のコマンドを実行して、クラスター内のGrafanaをローカルポート3000にマッピングします。

      kubectl -n monitoring port-forward svc/ack-prometheus-operator-grafana 3000:80
    2. 集計データを表示するには、ブラウザのアドレスバーにlocalhost:3000と入力し、ダッシュボードを選択します。

      Dashboard

  3. アラートルールを表示し、サイレントアラートを設定します。

    • アラートルールの表示

      アラートルールを表示するには、ブラウザのアドレスバーにlocalhost:9090と入力し、上部のナビゲーションバーにある [アラート] をクリックします。

      • 赤: 赤のアラートルールに基づいてアラートがトリガーされています。

      • 緑: 緑のアラートルールに基づいてアラートがトリガーされていません。

      Alerts

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

      次のコマンドを実行します。 ブラウザのアドレスバーにlocalhost:9093と入力し、[沈黙] をクリックしてサイレントアラートを設定します。

      kubectl --namespace monitoring port-forward svc/alertmanager-operated 9093

      Silence

上記の手順に従って、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チャットボットがある場合は、次の手順を実行します。

      1. トークンフィールドのパラメーター値を、DingTalkチャットボットのwebhook URLに置き換えます。

        DingTalkチャットボットのwebhook URLをコピーし、トークンフィールドのdingtalk1とdingtalk2のパラメーター値をコピーしたURLに置き換えます。 この例では、https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxx はwebhook URLに置き換えられます。

        Token configuration

      2. receiverパラメーターの値を変更します。

        alertmanagerセクションで、configパラメーターのreceiverフィールドを、receiversフィールドで指定されたアラート名に設定します。 この例では、webhook1webhook2が使用されます。

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

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

        Webhook configuration

      説明

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

    • メール通知の設定

      ack-prometheus-operatorページで、[デプロイ] をクリックします。 [パラメーター] ウィザードページで、次の図の赤いボックスに示すように、メールアドレスの詳細を指定し、alertmanagerセクションのconfigパラメーターのreceiverフィールドを、receiversフィールドで指定したアラート名に設定します。 receiversフィールドのデフォルト値はmailです。 Email notifications

  • アラート通知テンプレートの設定

    アラート通知テンプレートは、次の図に示すように、[パラメーター] ウィザードページのalertmanagerセクションのtemplateFilesフィールドでカスタマイズできます。 Template configuration

ConfigMapをプロメテウスにマウントする

このセクションでは、ConfigMapをポッドの /etc/prometheus/configmaps/ パスにマウントする方法について説明します。

1の説明に従って、まずprometheus-operatorをクラスターにデプロイする必要があります。 [パラメーター] ウィザードページで、prometheusセクションのconfigMapsフィールドを、マウントするConfigMapの名前に設定します。 Mount a ConfigMap

prometheus-operatorがクラスターにデプロイされている場合は、次の手順を実行します。

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

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

  3. ack-prometheus-operatorリリースを検索し、[操作] 列の [更新] をクリックします。

  4. [リリースの更新] パネルで、prometheusセクションとalertmanagerセクションのconfigMapsフィールドを、マウントするConfigMapの名前に設定します。 そして、[OK] をクリックします。

    Update configurations

    たとえば、Prometheusの設定を含むspecial-configという名前のConfigMapをマウントするとします。 Prometheusポッドの構成ファイルとして特別なConfigMapを構成するには、prometheusセクションのconfigMapsフィールドに次の構成を追加して、ConfigMapを /etc/prometheus/configmaps/ パスにマウントします。

    次の図は、special-config ConfigMapの例を示しています。

    special-config

    次の図は、prometheusセクションでconfigMapsフィールドを設定する方法を示しています。 configmaps

Grafana の設定

  • ダッシュボード設定をGrafanaにマウントする

    次の手順を実行して、ダッシュボード設定を含むConfigMapをGrafanaポッドにマウントできます。 ack-prometheus-operatorページで、[デプロイ] をクリックします。 [パラメーター] ウィザードページで、次の図に示すように、extraConfigmapMountsセクションに次の設定を追加します。 Mount the dashboard configuration to Grafana

    説明
    • クラスターにダッシュボード設定を含むConfigMapがあることを確認します。

      ConfigMapに追加されるこのラベルは、他のConfigMapsに追加されるラベルと同じである必要があります。

    • GrafanaコンフィギュレーションのextraConfigmapMountsセクションで、ConfigMapの名前とConfigMapのマウント方法を指定します。

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

    • configMapをConfigMapの名前に設定します。

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

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

    Grafanaダッシュボードのデータ保持を有効にするには、次の手順を実行します。

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

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

    3. ack-prometheus-operatorを見つけて、[操作] 列の [更新] をクリックします。

    4. [リリースの更新] パネルで、次の図に示すように、grafanaセクションのpersistenceフィールドを設定します。

    Enable data persistence for Grafana dashboards

    GrafanaダッシュボードのデータをJSON形式でオンプレミスマシンにエクスポートできます。 詳細については、「Grafanaダッシュボードのエクスポート」をご参照ください。

よくある質問

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

    1. DingTalkチャットボットのwebhook URLを取得します。 詳細については、「シナリオ3: DingTalkを使用したKubernetesイベントのアラート発生」をご参照ください。

    2. [パラメーター] ウィザードページで、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ストレージは、限られたリージョンで使用できます。 ただし、ディスクストレージはすべてのリージョンでサポートされています。 次の図は、データ保持ポリシーの設定方法を示しています。 Data retention policy

  • 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の再インストールに失敗する可能性があります。 次の操作を実行して、関連するリソース設定を削除できます。

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

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