イベントモニタリングは、Kubernetesが提供するモニタリング方法です。 これは、適時性、精度、およびシナリオの点でリソースモニタリングを改善します。 Simple Log ServiceのKubernetesイベントセンターでnode-problem-detector (NPD) を使用してクラスターイベントをシンクし、クラスターを診断してエラーイベントをシンクに送信するようにNPDを設定できます。 クラスターイベントをDingTalk、Simple Log Service、およびEventBridgeにシンクできます。 これにより、クラスター内の異常と問題をリアルタイムで監視できます。
課金
デフォルトでは、ACKのイベントモニタリング機能はクラスターイベントをSimple Log Serviceにシンクします。 Simple Log Serviceにイベントを保存および分析できます。 ACKクラスターイベントのデフォルトの保持期間は90日です。 ACKクラスターイベントは90日間無料で保存できます。 詳細については、「イベントセンターの作成と使用」をご参照ください。
背景情報
Kubernetesはステートマシンに基づいて設計されています。 イベントは、異なる状態間の遷移によって生成される。 通常、正常イベントは、状態マシンが予想される状態に変化するときに生成され、警告イベントは、状態マシンが予想されない状態に変化するときに生成される。
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: Simple Log ServiceのKubernetesイベントセンターでNPDを使用して、クラスターイベントをシンクする
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管理クラスターの作成」をご参照ください。
クラスターの作成時に [ノード問題検出器のインストールとイベントセンターの作成] を選択しなかった場合は、次の手順を実行して手動でインストールします。
ACKコンソールにログインします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ロギングとモニタリング] タブで、[ack-node-problem-detector] を見つけてインストールします。
ステップ2: イベントセンターの表示
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
右上隅の [クラスターイベントの管理] をクリックします。 K8seventcenterページの左側のナビゲーションウィンドウで、クラスターの左側にあるアイコンをクリックして、Kubernetesイベントに関する情報を表示します。
すべてのKubernetesイベントとその詳細情報およびポッドのライフサイクルを表示できます。 カスタムクエリを送信し、アラートを設定することもできます。 詳細については、「Kubernetesイベントの収集」をご参照ください。
シナリオ2: クラスターを診断し、例外のイベントをシンクに送信するようにNPDを設定する
NPDは、Kubernetesノードを診断するためのツールです。 NPDはノード例外を検出し、ノードイベントを生成し、kube-eventerと連携してこれらのイベントにアラートを発生させ、アラートの閉ループ管理を有効にします。 NPDは、Dockerエンジンのハング、Linuxカーネルのハング、アウトバウンドトラフィックの例外、およびファイル記述子の例外が検出されると、ノードイベントを生成します。
手順
ack-node-problem-detectorコンポーネントをインストールするには、Install the ack-node-problem-detector componentを参照してください。
説明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ロールが割り当てられているかどうか、およびAccessKey IDとAccessKeyシークレットがRAMロールに設定されているかどうかを確認します。 | なし |
ntp_check | NTP (Network Time Protocol) を使用して、クラスターノードのシステムクロックが正しく同期されているかどうかを確認します。 | このプラグインはデフォルトで有効になっています。 |
nvidia_gpu_check | クラスターノードのNVIDIA GPUが | なし |
network_problem_check | 各クラスターノードでの | このプラグインはデフォルトで有効になっています。 |
inodes_usage_check | 各クラスターノードのシステムディスクの | デフォルトのしきい値は80% です。 閾値は調整可能である。 このプラグインはデフォルトで有効になっています。 |
csi_hang_check | Container Storage Interface (CSI) プラグインがクラスターノードで期待どおりに動作するかどうかを確認します。 | なし |
ps_hang_check | クラスタノードのシステムに無停電スリープ (D) 状態のプロセスが存在するかどうかを確認する | なし |
public_network_check | クラスターノードがインターネットにアクセスできるかどうかをチェックします。 | なし |
irqbalance_check |
| なし |
pid_pressure_check | カーネルで許可されている | このプラグインはデフォルトで有効になっています。 |
docker_offline_check |
| このプラグインはデフォルトで有効になっています。 |
シナリオ3: DingTalkを使用してKubernetesイベント時にアラートを発生させる
DingTalkチャットボットを使用してKubernetesイベントを監視し、アラートを発生させることは、ChatOpsの典型的なシナリオです。 これを行うには、次の手順を実行します。
DingTalkグループのチャットボックスの右上隅にあるをクリックして、[グループ設定] ページを開きます。
[ボット] をクリックし、[ロボットの追加] をクリックしてチャットボットを追加します。 この例では、[カスタム] が選択されています。
[ロボットの詳細] ページで、[追加] をクリックし、[ロボットの追加] ページを開きます。
次のパラメーターを設定し、DingTalkカスタムロボットサービス利用規約を読んで同意し、[完了] をクリックします。
パラメーター
説明
プロフィール画像の編集
チャットボットのアバター。 このパラメーターはオプションです。
チャットボット名
チャットボットの名前。
グループへ追加
チャットボットが追加されるDingTalkグループ。
セキュリティ設定
カスタムキーワード、追加署名、IPアドレス (またはCIDRブロック) の3種類のセキュリティ設定がサポートされています。
クラスターイベントで発生するアラートのフィルタリングには、カスタムキーワードのみがサポートされています。
[カスタムキーワード] を選択し、
[警告]
を入力してアラートを受信します。 チャットボットが頻繁にメッセージを送信する場合は、キーワードを追加してメッセージをフィルタリングできます。 最大10個のキーワードを追加できます。 ACKからのメッセージも、チャットボットがDingTalkグループに送信する前に、これらのキーワードでフィルタリングされます。[コピー] をクリックしてwebhook URLをコピーします。
説明[ChatBot] ページでチャットボットを見つけ、をクリックして次の操作を実行します。
チャットボットのアバターと名前を変更します。
メッセージプッシュの 有効化または無効化
webhook URLをリセットします。
チャットボットを削除します。
ack-node-problem-detectorコンポーネントをインストールするには、Install the ack-node-problem-detector componentを参照してください。
説明ack-node-problem-detectorコンポーネントが既にインストールされている場合は、再インストールします。 詳細については、「ack-node-problem-detectorコンポーネントの再インストール」をご参照ください。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
Helmページで、ack-node-problem-detectorコンポーネントを見つけます。 次に、コンポーネントの [操作] 列で [更新] をクリックし、次のパラメーターを変更して、[OK] をクリックします。
npd
セクションで、enabled
パラメーターをfalse
に設定します。eventer.sinks.dingtalk.enabled
をtrue
に設定します。ステップ5で生成されたwebhook URLに含まれるトークンを入力します。
期待される出力:
eventerは、デプロイが完了してから30秒後に有効になります。 重大度レベルがしきい値を超えるイベントが発生すると、DingTalkグループにアラートが送信されます。
シナリオ4: KubernetesイベントをSimple Log Serviceにシンクする
KubernetesイベントをSimple Log Serviceにシンクして永続ストレージを取得し、これらのイベントをアーカイブおよび監査できます。 詳細については、「イベントセンターの作成と使用」をご参照ください。
Simple Log ServiceプロジェクトとLogstoreを作成します。
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、[プロジェクトの作成] をクリックします。 [プロジェクトの作成] パネルでパラメーターを設定し、[OK] をクリックします。
この例では、監視対象のACKクラスターがデプロイされている中国 (杭州) リージョンにk8s-log4jという名前のSimple Log Serviceプロジェクトが作成されます。
説明クラスターと同じリージョンにSimple Log Serviceプロジェクトを作成することを推奨します。 Simple Log Serviceプロジェクトとクラスターが同じリージョンにデプロイされている場合、ログは内部ネットワーク経由で送信されます。 これにより、ログデータのリアルタイム収集と迅速な取得が可能になります。 これはまた、追加の帯域幅および時間コストを必要とするクロスリージョン伝送を回避する。
[プロジェクト] セクションで、k8s-log4jのプロジェクトを見つけてクリックします。 プロジェクトの詳細ページが表示されます。
[Logstore] タブで、[+] アイコンをクリックして [Logstoreの作成] パネルを開きます。
Logstoreの作成パネルで、パラメーターを設定し、OKをクリックします。
この例では、k8s-logstore という名前の Logstore が作成されます。
k8s-logstore Logstoreが作成されると、データインポートウィザードの使用方法に関する手順がページに表示されます。 [データインポートウィザード] をクリックします。 [データのインポート] ダイアログボックスが表示されます。
Log4j 1/2を選択し、ページの手順に従って設定します。
この例では、デフォルト設定を使用します。 ビジネス要件に合わせて設定をカスタマイズすることもできます。
クラスターのlog4jを設定します。
ack-node-problem-detectorコンポーネントをインストールするには、Install the ack-node-problem-detector componentを参照してください。
重要ack-node-problem-detectorコンポーネントをインストールするときに、手順1で作成した
プロジェクト
とログストア
を指定します。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コンソールにログインします。 [プロジェクト] セクションで、プロジェクトの名前を見つけてクリックします。
Logstoreの名前の横にあるをクリックし、[検索と分析] を選択します。
表示されるページの右上隅にある [インデックスの有効化] をクリックします。
[検索と分析] パネルでパラメーターを設定し、[OK] をクリックします。
ログ照会および分析ページが表示されます。
説明インデックス設定は1分以内に有効になります。
新しく有効または変更されたインデックスは、インデックスが有効または変更された後にインポートされたデータにのみ適用されます。
(オプション) オフラインのアーカイブとコンピューティングが必要なシナリオでは、LogstoreからMaxComputeまたはObject Storage Service (OSS) にデータを送信できます。 詳細については、「MaxComputeにデータを出荷するための新しいバージョンのデータシッピングジョブの作成」および「OSSデータシッピングジョブ (新しいバージョン) の作成」をご参照ください。
シナリオ5: EventBridgeへのKubernetesイベントのシンク
EventBridgeは、Alibaba Cloudが提供するサーバーレスイベントサービスです。 Alibaba Cloudサービス、カスタムアプリケーション、およびサービスとしてのソフトウェア (SaaS) アプリケーションは、標準化された一元化された方法でEventBridgeに接続できます。 さらに、EventBridgeは、標準化されたCloudEvents 1.0プロトコルに基づいて、これらのアプリケーション間でイベントをルーティングできます。 ACKイベントをEventBridgeに沈めることができます。これにより、EventBridgeで疎結合の分散型イベント駆動型アーキテクチャを構築できます。 EventBridgeの詳細については、EventBridgeとは何ですか?.
EventBridgeを有効にします。 詳細については、「EventBridgeの有効化とRAMユーザーへの権限付与」をご参照ください。
ack-node-problem-detectorコンポーネントをインストールするには、Install the ack-node-problem-detector componentを参照してください。
説明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] を見つけて再インストールします。