ACK エッジクラスターは、VPC とエッジノードが異なるネットワークプレーンで実行されるオフラインのデータセンターにノードをデプロイします。標準の Prometheus エージェントは、エッジノード上の Node Exporter または GPU Exporter のエンドポイントに直接到達できません。Managed Service for Prometheus は、ACK エッジクラスターに組み込まれたクラウドネイティブトンネルを使用して、クラウドとエッジ間のギャップを自動的に埋めることで、この問題を解決します。このトピックでは、Managed Service for Prometheus を ACK エッジクラスターに接続し、事前定義されたダッシュボードを表示し、アラートルールを設定する方法について説明します。
前提条件
開始する前に、次のものをご用意ください。
バージョン 1.18.8-aliyunedge.1 以降の ACK エッジクラスター。詳細については、「ACK エッジクラスターの作成」をご参照ください。
ACK エッジクラスターにインストールされているバージョン 1.1.4 以降の ack-arms-prometheus アドオン。バージョンを確認またはアップグレードするには、「ack-arms-prometheus のバージョン確認」をご参照ください。
Kubernetes バージョン 1.26 より前のクラスターの場合:
kube-system/edge-tunnel-server-cfgConfigMap で Node Exporter のポート 9100 と GPU Exporter のポート 9445 のポートフォワーディングが有効になっていること。http-proxy-ports: 9445 https-proxy-ports: 9100
エッジクラスターにおけるモニタリングの仕組み
クラウド内の VPC とエッジノードは異なるネットワークプレーンで実行されるため、クラウド内の Prometheus エージェントはエッジノード上の Node Exporter および GPU Exporter のエンドポイントに直接到達できません。
ack-arms-prometheus 1.1.4 以降、このアドオンは ACK エッジクラスターに組み込まれたクラウドネイティブの O&M 通信トンネル (トンネル) を使用して、クラウドとエッジ間のコレクションリンクを自動的に確立します。
ACK エッジクラスターは、コンテナモニタリングの Basic Edition をサポートしています。
Grafana ダッシュボードの表示
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、[運用] > [Prometheus モニタリング] を選択します。
このページに初めてアクセスする場合は、画面の指示に従って [インストール] をクリックします。コンソールが自動的にアドオンをインストールし、インストール後に Prometheus モニタリングの詳細ページにリダイレクトします。
[Prometheus モニタリング] ページで、事前定義ダッシュボード上のノード、アプリケーション、GPU のモニタリングデータを表示します。
Prometheus アラートルールの設定
アラートルールは、メトリックが定義されたしきい値を超えたときに通知をトリガーします。アラートが発生すると、Managed Service for Prometheus は指定された連絡先グループの連絡先に通知を送信します。サポートされている通知チャネルには、電話、ショートメッセージ、メール、DingTalk、WeCom、Webhook があります。
アラートの設定には、通知を受け取る連絡先を作成し、次にアラートルールを作成するという 2 つのステップが含まれます。DingTalk および WeCom 通知チャネルの設定については、「DingTalk ロボット」および「WeCom ロボット」をご参照ください。
ステップ 1:連絡先の作成
ARMS コンソールにログインします。左側のナビゲーションウィンドウで、[アラート管理] > [通知オブジェクト] を選択します。
[連絡先] タブで、[連絡先の作成] をクリックします。
[連絡先の作成] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
重要最大 100 件の連絡先を作成できます。
パラメーター 説明 名前 連絡先の名前です。 電話番号 連絡先の携帯電話番号です。電話およびショートメッセージによる通知に使用されます。通知ポリシーでは、検証済みの携帯電話番号のみ使用できます。詳細については、「携帯電話番号の検証」をご参照ください。 メールアドレス 連絡先のメールアドレスです。メール通知に使用されます。
ステップ 2:Prometheus アラートルールの作成
Prometheus アラートルールは、2 つのチェックタイプをサポートしています。
| チェックタイプ | 使用場面 |
|---|---|
| 静的しきい値 | 単純なしきい値条件で事前設定されたメトリックをモニターします。 |
| カスタム PromQL | 静的しきい値の事前設定リストにないメトリックを、カスタム PromQL 式を使用してモニターします。 |
静的しきい値に基づくアラートルールの作成
ARMS コンソールにログインします。
左側のナビゲーションウィンドウで、[Managed Service for Prometheus] > [Prometheus アラートルール] を選択します。
[Prometheus アラートルール] ページで、[Prometheus アラートルールの作成] をクリックします。
[Prometheus アラートルールの作成] ページで、次のパラメーターを設定し、[保存] をクリックします。
フィルター条件は 300 文字に制限されています。
パラメーター 説明 例 アラートルール名 アラートルールの名前。 本番クラスター - コンテナ CPU 使用率アラート チェックタイプ 静的しきい値 を選択します。 静的しきい値 Prometheus インスタンス モニターする Prometheus インスタンス。 本番クラスター アラート連絡先グループ アラートがトリガーされたときに通知する連絡先グループ。利用可能なグループは Prometheus インスタンスタイプによって異なります。 Kubernetes ロード アラートメトリック モニターするメトリック。利用可能なメトリックは連絡先グループによって異なります。 コンテナ CPU 使用率 アラート条件 アラートイベントをトリガーする条件。 CPU 使用率が 80% を超える フィルター条件 アラートルールが適用されるリソースの範囲。以下のフィルター条件タイプをご参照ください。 トラバース データプレビュー アラート条件の PromQL 文と時系列グラフを表示します。しきい値は赤い線で表示され、それを超えるデータは濃い赤色で表示されます。フィルター条件を設定した後に利用可能になります。 — 期間 アラートイベントを生成するタイミング:データポイントがしきい値に達した直後、または条件が N 分間継続して満たされた後のみ。 1 アラートレベル アラートの重大度。有効値: Default (最低)、P4、P3、P2、P1 (最高)。 デフォルト アラートメッセージ アラートがトリガーされたときに連絡先に送信されるメッセージ。Go テンプレート変数をサポートしています。 Namespace: {{$labels.namespace}} / Pod: {{$labels.pod_name}} / Container: {{$labels.container}} CPU utilization: {{$labels.metrics_params_opt_label_value}} {{$labels.metrics_params_value}}%. Current value: {{ printf "%.2f" $value }}%アラート通知 シンプルモード:通知オブジェクト、通知期間、通知を再送信するかどうかを設定します。標準モード通知ポリシーの作成と管理:通知ポリシーを割り当てるか、後で通知ポリシーページで作成します。詳細については、「」をご参照ください。 通知ポリシーを指定しない アラートチェックサイクル (詳細設定) ルールがアラート条件を評価する頻度 (分単位)。デフォルト:1。最小値:1。 1 データが完全な場合にチェック (詳細設定) 条件を評価する前に、完全なデータを待つかどうか。 はい タグ (詳細設定) アラートルールのタグ。通知ポリシーを照合するために使用されます。 — アノテーション (詳細設定) アラートルールのアノテーション。 — フィルター条件タイプ:
タイプ 説明 巡回 Prometheus インスタンス内のすべてのリソースに適用されます。デフォルトで選択されています。 等しい 指定した単一のリソース名に適用されます。 等しくない 指定したリソースを除くすべてのリソースに適用されます。 正規表現に一致 名前が正規表現に一致するすべてのリソースに適用されます。 正規表現に一致しない 名前が正規表現に一致しないすべてのリソースに適用されます。
カスタム PromQL 文を使用したアラートルールの作成
静的しきい値の事前設定リストにないメトリックをモニターするには、カスタム PromQL チェックタイプを使用します。
[Prometheus アラートルールの作成] ページで、[チェックタイプ] を [カスタム PromQL] に設定し、次のパラメーターを設定して [保存] をクリックします。
| パラメーター | 説明 | 例 |
|---|---|---|
| アラートルール名 | アラートルールの名称です。 | Pod の CPU 利用率が 8 % を超過 |
| チェックタイプ | カスタム PromQL を選択します。 | カスタム PromQL |
| Prometheus インスタンス | 監視対象の Prometheus インスタンスです。 | — |
| 参照アラート連絡先グループ | 通知先の連絡先グループです。利用可能なグループは、Prometheus インスタンスタイプによって異なります。 | Kubernetes ロード |
| 参照メトリック | (任意)あらかじめ定義されたメトリックを選択すると、カスタム PromQL ステートメント フィールドにその PromQL 式が自動入力されます。必要に応じて式を編集してください。 | Pod ディスク使用率アラート |
| カスタム PromQL ステートメント | アラート条件を定義する PromQL 式です。 | max(container_fs_usage_bytes{pod!="", namespace!="arms-prom",namespace!="monitoring"}) by (pod_name, namespace, device)/max(container_fs_limit_bytes{pod!=""}) by (pod_name,namespace, device) * 100 > 90 |
| データプレビュー | メトリックの時系列グラフを表示します。カーブ上にポインターを移動すると、特定時点の詳細を確認できます。また、期間を選択してズームインできます。 | — |
| 継続時間 | アラートイベントを生成するタイミング:データポイントがしきい値に達した直後に即時生成するか、または条件が N 分間継続して満たされた場合のみ生成するかを選択します。 | 1 |
| アラートレベル | アラートの重大度です。有効な値:Default(最低)、P4、P3、P2、P1(最高)。 | Default |
| アラートメッセージ | 通知メッセージです。Go テンプレート変数をサポートします。 | 名前空間: {{$labels.namespace}} / Pod: {{$labels.pod_name}} / デバイス {{$labels.device}} のディスク使用率が 90 % を超過しました。現在値: {{ printf "%.2f" $value }}% |
| アラート通知 | シンプルモード または 標準モード を選択します。「静的しきい値」セクションをご参照ください。 | 通知ポリシーを指定しない |
| アラートチェック周期(高度な設定) | 評価頻度(分単位)。デフォルト値:1。最小値:1。 | 1 |
| データ完了時にチェック(高度な設定) | 評価前に完全なデータを待つかどうかを指定します。 | はい |
| タグ(高度な設定) | 通知ポリシーとのマッチングに使用するタグです。 | — |
| アノテーション(高度な設定) | アラートルールに対するアノテーションです。 | — |
よくある質問
ack-arms-prometheus のバージョン確認
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[アドオン] ページで、[ログとモニタリング] タブをクリックし、ack-arms-prometheus を見つけます。
バージョン番号はコンポーネントカードに表示されます。新しいバージョンが利用可能な場合は、カードに [アップグレード] ボタンが表示されます。これをクリックして更新します。
GPU モニタリングをデプロイできない理由
GPU ノードに Pod のスケジューリングを妨げる Taint がある場合、GPU モニタリングのデプロイは失敗します。次のコマンドを実行して確認します。
kubectl describe node cn-beijing.47.100.***.***出力に Taint が表示された場合 (例:Taints: test-key=test-value:NoSchedule)、次のいずれかの方法で解決します。
ノードから Taint を削除します。
kubectl taint node cn-beijing.47.100.***.*** test-key=test-value:NoSchedule-GPU エクスポーターの DaemonSet に Toleration を追加して、Pod が Taint のあるノードにスケジューリングされるようにします。
# ack-prometheus-gpu-exporter DaemonSet を編集 kubectl edit daemonset -n arms-prom ack-prometheus-gpu-exporterYAML ファイルで、
containersと同じレベルに次のtolerationsフィールドを追加します。tolerations: - key: "test-key" operator: "Equal" value: "test-value" effect: "NoSchedule" containers: # 他のフィールドは省略
再インストールに失敗した場合に ARMS-Prometheus の設定を完全に削除する方法
arms-prom 名前空間のみを削除した場合、残存するクラスターレベルのリソースが再インストールをブロックします。次のコマンドを実行して、すべての ARMS-Prometheus リソースを削除します。
名前空間を削除します。
kubectl delete namespace arms-promClusterRole を削除します。
kubectl delete ClusterRole arms-kube-state-metrics kubectl delete ClusterRole arms-node-exporter kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role kubectl delete ClusterRole arms-prometheus-oper3 kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role kubectl delete ClusterRole arms-pilot-prom-k8s kubectl delete ClusterRole gpu-prometheus-exporter kubectl delete ClusterRole o11y:addon-controller:role kubectl delete ClusterRole arms-aliyunserviceroleforarms-clusterroleClusterRoleBindings を削除します:
kubectl delete ClusterRoleBinding arms-node-exporter kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2 kubectl delete ClusterRoleBinding arms-kube-state-metrics kubectl delete ClusterRoleBinding arms-pilot-prom-k8s kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding gpu-prometheus-exporter kubectl delete ClusterRoleBinding o11y:addon-controller:rolebinding kubectl delete ClusterRoleBinding arms-kube-state-metrics-agent kubectl delete ClusterRoleBinding arms-node-exporter-agent kubectl delete ClusterRoleBinding arms-aliyunserviceroleforarms-clusterrolebindingRole と RoleBinding を削除します。
kubectl delete Role arms-pilot-prom-spec-ns-k8s kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system
これらのリソースを削除した後、Container Service for Kubernetes (ACK) コンソールContainer Service コンソールに移動し、[オペレーション] > [アドオン]を選択し、[ack-arms-prometheus] を再インストールします。