イベントモニタリングは、Kubernetes によって提供されるモニタリング手法です。適時性、正確性、およびシナリオの点で、リソースモニタリングよりも改善されています。 Simple Log Service の Kubernetes イベントセンターで node-problem-detector(NPD)を使用して、クラスタを監視できます。クラスタ診断用に NPD を構成し、異常イベントのオフラインアーカイブを有効にしてから、DingTalk を介したアラート通知と EventBridge を介した自動修復を設定します。
課金
デフォルトでは、ACK のイベントモニタリング機能は、Simple Log Service にクラスタイベントをシンクします。 Simple Log Service でイベントを保存および分析できます。 ACK クラスタイベントのデフォルトの保持期間は 90 日です。 ACK クラスタイベントは 90 日間無料で保存できます。 詳細については、「イベントセンターを作成して使用する」をご参照ください。
背景情報
Kubernetes は、ステートマシンに基づいて設計されています。イベントは、さまざまな状態間の遷移によって生成されます。通常、ステートマシンが予期された状態に変化すると Normal イベントが生成され、ステートマシンが予期しない状態に変化すると Warning イベントが生成されます。
ACK は、コンテナ化シナリオを対象としたすぐに使えるイベントモニタリングソリューションを提供します。 ACK は、NPD および NPD によって提供される kube-eventer を使用して、コンテナイベントを監視します。
NPD は、Kubernetes ノードを診断するためのツールです。 NPD はノードの例外を検出し、ノードイベントを生成し、kube-eventer と連携してこれらのイベントに基づいてアラートを発生させ、アラートの閉ループ管理を可能にします。 NPD は、Docker エンジンのハング、Linux カーネルのハング、アウトバウンドトラフィックの例外、およびファイル記述子の例外が検出されたときに、ノードイベントを生成します。 詳細については、「NPD」をご参照ください。
kube-eventer は、ACK によって維持されているオープンソースのイベントエミッターです。 kube-eventer は、Kubernetes イベントを DingTalk、Simple Log Service、EventBridge などのシンクに送信します。 kube-eventer は、さまざまなレベルのイベントをフィルタリングするためのフィルタ条件も提供します。 kube-eventer を使用して、リアルタイムでイベントを収集し、特定のイベントに基づいてアラートをトリガーし、イベントを非同期的にアーカイブできます。 詳細については、「kube-eventer」をご参照ください。
このトピックでは、次のシナリオでイベントモニタリングを構成する方法について説明します。
シナリオ 1: NPD と Simple Log Service の Kubernetes イベントセンターを使用して、クラスタイベントをシンクする
NPD はサードパーティのプラグインと連携して、ノードの例外を検出し、クラスタイベントを生成します。 Kubernetes クラスタは、クラスタのステータスが変化したときにもイベントを生成します。たとえば、ポッドが削除された場合、またはイメージプル操作が失敗した場合、関連するイベントが生成されます。 Simple Log Service の Kubernetes イベントセンターは、クラスタイベントを収集、保存、および視覚化します。これらのイベントのクエリと分析、およびアラートの構成を行うことができます。次の方法を使用して、クラスタイベントを Simple Log Service の Kubernetes イベントセンターにシンクできます。
ステップ 1: Ack-node-problem-detector コンポーネントをインストールする
クラスタの作成時に [node-problem-detector のインストールとイベントセンターの作成] を選択した場合は、ステップ 2 に進んで Kubernetes イベントセンターを表示します。クラスタの作成時に ack-node-problem-detector コンポーネントをインストールする方法の詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
クラスタの作成時に [node-problem-detector のインストールとイベントセンターの作成] を選択しなかった場合は、次の手順を実行して手動でインストールします。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[ログとモニタリング] タブで、[ack-node-problem-detector] を見つけてインストールします。
ステップ 2: イベントセンターを表示する
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[イベントセンター] ページで、[イベントの概要 (イベントセンター)] タブをクリックして、Kubernetes イベントに関する情報を表示します。
すべての Kubernetes イベントとその詳細情報、およびポッドのライフサイクルを表示できます。 詳細については、「Kubernetes イベントを収集する」をご参照ください。
シナリオ 2: NPD を構成してクラスタを診断し、例外のイベントをシンクに送信する
kube-eventer と統合された NPD により、ノードイベントのアラートの閉ループ管理が可能になります。これを行うには、次の手順を実行します。
手順
ack-node-problem-detector コンポーネントをインストールする を参照して、[ack-node-problem-detector] コンポーネントをインストールします。
説明[ack-node-problem-detector] コンポーネントがすでにインストールされている場合は、再インストールします。 詳細については、「ack-node-problem-detector コンポーネントを再インストールする」をご参照ください。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[DaemonSets] タブで、[kube-system] 名前空間を選択し、[ack-node-problem-detector-daemonset] が予期どおりに実行されているかどうかを確認します。
NPD と
eventerの両方が予期どおりに機能すると、システムはeventer構成に基づいてイベントをシンクし、アラートを発生させます。
NPD でサポートされているノード診断プラグイン
プラグイン | 機能 | 説明 |
fd_check | 各クラスタノードで開かれているファイル記述子の割合が最大 80% を超えているかどうかを確認します | デフォルトのしきい値は 80% です。しきい値は調整可能です。このプラグインは、チェックを実行するためにかなりの量のリソースを消費します。このプラグインを有効にしないことをお勧めします。 |
ram_role_check | クラスタノードに必要な RAM ロールが割り当てられているかどうか、および RAM ロールに AccessKey ID と AccessKey シークレットが構成されているかどうかを確認します | なし |
ntp_check | クラスタノードのシステムクロックが Network Time Protocol (NTP) を介して正しく同期されているかどうかを確認します | このプラグインはデフォルトで有効になっています。 |
nvidia_gpu_check | クラスタノードの NVIDIA GPU が | なし |
network_problem_check | 各クラスタノードの | このプラグインはデフォルトで有効になっています。 |
inodes_usage_check | 各クラスタノードのシステムディスクの | デフォルトのしきい値は 80% です。しきい値は調整可能です。このプラグインはデフォルトで有効になっています。 |
csi_hang_check | クラスタノードで Container Storage Interface (CSI) プラグインが予期どおりに機能するかどうかを確認します | なし |
ps_hang_check | クラスタノードのシステムに、uninterruptible sleep (D) 状態のプロセスが存在するかどうかを確認します | なし |
public_network_check | クラスタノードがインターネットにアクセスできるかどうかを確認します | なし |
irqbalance_check | クラスタノードのシステムで | なし |
pid_pressure_check | ノードシステムの | このプラグインはデフォルトで有効になっています。 |
docker_offline_check | クラスタノードで | このプラグインはデフォルトで有効になっています。 |
シナリオ 3: DingTalk チャットボットを使用して Kubernetes の監視とアラートを実装する
DingTalk チャットボットを使用して Kubernetes イベントを監視およびアラートすることは、典型的な ChatOps の実装です。これを行うには、次の手順を実行します。
DingTalk チャットボットを追加します。
DingTalk グループのチャットボックスの右上隅にある
をクリックして、[グループ設定] ページを開きます。[ボット] をクリックし、[ロボットの追加] をクリックしてチャットボットを追加します。この例では、[カスタム] が選択されています。

[ロボットの詳細] ページで、[追加] をクリックして [ロボットの追加] ページを開きます。

次のパラメータを設定し、DingTalk カスタムロボットサービスの利用規約を読んで同意してから、[完了] をクリックします。
パラメータ
説明
プロフィール画像の編集
チャットボットのアバター。このパラメータはオプションです。
チャットボット名
チャットボットの名前。
グループに追加
チャットボットが追加される DingTalk グループ。
セキュリティ設定
3 種類のセキュリティ設定がサポートされています。カスタムキーワード、追加の署名、および IP アドレス (または CIDR ブロック) です。
クラスタイベントに基づいて発生するアラートのフィルタリングには、[カスタムキーワード] のみがサポートされています。
[カスタムキーワード] を選択し、
Warningと入力してアラートを受信します。チャットボットが頻繁にメッセージを送信する場合は、キーワードを追加してメッセージをフィルタリングできます。最大 10 個のキーワードを追加できます。 ACK からのメッセージも、チャットボットが DingTalk グループに送信する前に、これらのキーワードでフィルタリングされます。[コピー] をクリックして、[webhook] URL をコピーします。
説明[ChatBot] ページで、チャットボットを見つけて
をクリックして、次の操作を実行します。チャットボットのアバターと名前を変更します。
メッセージプッシュを [有効] または [無効] にします。
[webhook] URL をリセットします。
チャットボットを削除します。
[ack-node-problem-detector] コンポーネントをインストールします。 詳細については、「ack-node-problem-detector コンポーネントをインストールする」をご参照ください。
説明[ack-node-problem-detector] コンポーネントがすでにインストールされている場合は、再インストールします。 詳細については、「ack-node-problem-detector コンポーネントを再インストールする」をご参照ください。
[ack-node-problem-detector] コンポーネントを更新します。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Helm] ページで、[ack-node-problem-detector] コンポーネントを見つけます。次に、コンポーネントの [アクション] 列にある [更新] をクリックし、次のパラメータを変更して、[OK] をクリックします。
npdセクションで、enabledパラメータをfalseに設定します。eventer.sinks.dingtalk.enabledをtrueに設定します。前のステップで生成された [webhook] URL に含まれるトークンを入力します。
予期される出力:
[eventer] は、デプロイメントが完了してから 30 秒後に有効になります。重大度レベルがしきい値を超えるイベントが発生すると、DingTalk グループにアラートが送信されます。 
シナリオ 4: Kubernetes イベントを Simple Log Service にシンクする
Kubernetes イベントを Simple Log Service にシンクして永続ストレージを行い、これらのイベントをアーカイブおよび監査できます。 詳細については、「イベントセンターを作成して使用する」をご参照ください。
Simple Log Service プロジェクトとログストアを作成します。
Simple Log Service コンソール にログインします。
[プロジェクト] セクションで、[プロジェクトの作成] をクリックします。 [プロジェクトの作成] パネルで、パラメータを設定し、[作成] をクリックします。
この例では、監視対象の ACK クラスタがデプロイされている中国 (杭州) リージョンに、k8s-log4j という名前の Simple Log Service プロジェクトが作成されます。
説明クラスターと同じリージョンに Simple Log Service プロジェクトを作成することをお勧めします。 Simple Log Service プロジェクトとクラスターが同じリージョンにデプロイされている場合、ログは内部ネットワークを介して送信されます。これにより、ログデータのリアルタイム収集と迅速な取得が可能になります。また、リージョン間の送信が回避されるため、追加の帯域幅と時間コストが不要になります。
[プロジェクト] セクションで、[k8s-log4j] プロジェクトを見つけてクリックします。プロジェクトの詳細ページが表示されます。
左側の [ログストア] ウィンドウで、[+] アイコンをクリックして、[ログストアの作成] パネルを開きます。
[ログストアの作成] パネルで、パラメータを設定し、[OK] をクリックします。
この例では、k8s-logstore という名前のログストアが作成されます。

k8s-logstore ログストアが作成されると、データインポートウィザードの使用方法に関する説明がページに表示されます。 [データインポートウィザード] をクリックします。 [データのインポート] ダイアログボックスが表示されます。
[Log4j 1/2] を選択し、ページの手順に従って設定を構成します。
この例では、デフォルト設定が使用されています。ビジネス要件に合わせて設定をカスタマイズすることもできます。

クラスターの log4j を構成します。
ack-node-problem-detector コンポーネントをインストールする を参照して、[ack-node-problem-detector] コンポーネントをインストールします。
重要[ack-node-problem-detector] コンポーネントをインストールするときに、ステップ 1 で作成した
projectとLogstoreを指定します。[ack-node-problem-detector] コンポーネントがすでにインストールされている場合は、再インストールします。 詳細については、「ack-node-problem-detector コンポーネントを再インストールする」をご参照ください。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Helm] ページで、[ack-node-problem-detector] コンポーネントを見つけます。次に、コンポーネントの [アクション] 列にある [更新] をクリックし、次のパラメータを変更して、[OK] をクリックします。
npdセクションで、enabledパラメータをfalseに設定します。eventer.sinks.sls.enabledをtrueに設定します。
ポッドの削除やアプリケーションの作成など、クラスターで操作が実行されると、イベントが生成されます。 Simple Log Service コンソールにログインして、収集されたログデータを表示できます。 詳細については、「Simple Log Service SDK を使用してログデータを消費する」をご参照ください。

インデックスとアーカイブを設定します。 詳細については、「インデックスを作成する」をご参照ください。
Simple Log Service コンソールにログインします。 [プロジェクト] セクションで、プロジェクトの名前を見つけてクリックします。
ログストアの名前の横にある
をクリックし、[検索と分析] を選択します。表示されるページの右上隅にある [インデックスの有効化] をクリックします。
[検索と分析] パネルで、パラメータを設定し、[OK] をクリックします。
ログクエリと分析ページが表示されます。
説明インデックス構成は 1 分以内に有効になります。
新しく有効化または変更されたインデックスは、インデックスが有効化または変更された後にインポートされたデータにのみ適用されます。
(オプション) オフラインアーカイブとコンピューティングが必要なシナリオでは、ログストアから [MaxCompute] または [Object Storage Service (OSS)] にデータをシッピングできます。 詳細については、「新しいバージョンのデータシッピングジョブを作成して MaxCompute にデータをシッピングする」および「OSS データシッピングジョブを作成する (新バージョン)」をご参照ください。
シナリオ 5: Kubernetes イベントを EventBridge にシンクする
EventBridge は、Alibaba Cloud によって提供されるサーバーレスイベントサービスです。 Alibaba Cloud サービス、カスタムアプリケーション、および SaaS (Software as a Service) アプリケーションは、標準化された一元的な方法で EventBridge に接続できます。 ACK イベントは EventBridge にシンクできます。これにより、EventBridge で疎結合の分散イベント駆動型アーキテクチャを構築できます。 EventBridge の詳細については、「EventBridge とは」をご参照ください。
EventBridge をアクティブにします。 詳細については、「EventBridge をアクティブにし、RAM ユーザーに権限を付与する」をご参照ください。
ack-node-problem-detector コンポーネントをインストールする を参照して、[ack-node-problem-detector] コンポーネントをインストールします。
説明[ack-node-problem-detector] コンポーネントがすでにインストールされている場合は、再インストールします。 詳細については、「ack-node-problem-detector コンポーネントを再インストールする」をご参照ください。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Helm] ページで、[ack-node-problem-detector] コンポーネントを見つけます。次に、コンポーネントの [アクション] 列にある [更新] をクリックし、
eventer.sinks.eventbridge.enableをtrueに設定して EventBridge を Kubernetes イベントのシンクとして有効にし、[OK] をクリックします。
EventBridge が Kubernetes イベントのシンクとして有効になったら、EventBridge コンソールで Kubernetes イベントを表示できます。
EventBridge コンソール にログインします。
左側のナビゲーションウィンドウで、[イベントバス] をクリックします。
- [イベントバス] ページで、ターゲットイベントバスの名前をクリックします。
- 左側のナビゲーションウィンドウで、[イベントトラッキング] をクリックします。
クエリ方法を選択し、クエリ条件を設定して、[クエリ] をクリックします。
イベントのリストで、表示するイベントを見つけて、[アクション] 列の [詳細] をクリックします。
詳細については、「イベント ID でイベントをクエリする」をご参照ください。
ack-node-problem-detector コンポーネントを再インストールする
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[ジョブ] ページで、kube-eventer-init-v1.7-xxxx の右側にある [詳細] をクリックし、[削除] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のウィンドウで、 を選択します。
[Helm] ページで、ack-node-problem-detector コンポーネントを削除します。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ロギングとモニタリング] タブで、[ack-node-problem-detector] を見つけて再インストールします。