DUICUO

Pod がクラッシュしたときにアラート メッセージから対応するログ情報を取得するにはどうすればよいですか?

Robustaは、Kubernetesのトラブルシューティング用にPythonで開発されたオープンソースプラットフォームです。監視スタック(Prometheus、Elasticsearchなど)の上に構築され、アラートの発生原因と修正方法を教えてくれます

Robusta は 3 つの主要部分で構成されており、すべてオープンソースです。

  1. Kubernetes の自動化エンジン
  2. 一般的なアラートを充実させ修正するための組み込み自動化
  3. その他の手動トラブルシューティングツール

他にもオプションのコンポーネントがいくつかあります。

  1. Robusta、Prometheus Operator、デフォルトの Kubernetes アラートを含むツールキット。
  2. クラスター内のすべてのアラート、変更、イベントを表示するための Web UI。

Robustaは、アプリケーションのデプロイ後に発生するすべての処理を自動化します。DevOps向けのZapier/IFTTTのようなもので、「独自に構築する」のではなく、事前に構築された自動化を重視しています。例えば、以下の自動化では、Podのクラッシュアラートがトリガーされた際にSlackにログを送信します。

トリガー:
- on_prometheus_alert :
アラート名: KubePodCrashLooping
アクション:
-ログエンリッチャー: {}
シンク
-スラック

各自動化プログラムは 3 つの部分で構成されます。

  • トリガー: いつ実行するか (アラート、ログ、変更などに基づく)
  • アクション: 実行するアクション (50 以上の組み込みアクション)
  • シンク: 結果を送信する場所 (Slack など)

建築

Robusta は Helm 経由でインストールおよび管理できます。

自動化エンジン

Robusta の主なコンポーネントは自動化エンジンであり、クラスター内で 2 つの Kubernetes デプロイメントとして実行されます。

  • robusta-forwarder: APIServer に接続し、Kubernetes の変更を監視して、robusta-runner に転送します。
  • robusta-runner : プレイブックを実行します。

パッケージ化された Prometheus スタック (オプション)

Robustaには、ベストプラクティスに従ってKubernetesアラートが事前設定された、オプションの組み込みPrometheusスタックが含まれています。すでにkube-prometheus-stackをご利用の場合は、Robustaを指定することができます。

Web UI(オプション)

複数のクラスターにわたるすべてのアラートとポッドを監視するための単一の管理パネルを提供する Web UI があります。

CLI(オプション)

robusta のコマンドライン ツールには主に 2 つの用途があります。

  1. Helm 値を自動的に生成することで、Robusta のインストールが容易になります。
  2. Robusta トラブルシューティング ワークフローを手動でトリガーします (例: 任意の Java ポッドからヒープ ダンプを取得する)。

また、Robusta 自体の開発に役立つ機能もいくつかあります。

ユースケース

Robusta はデフォルトで次のアラートとエラーを監視し、いくつかのトラブルシューティングの提案を提供します。

プロメテウスアラート

  • CPUThrottlingHigh - 原因と解決策を表示します。
  • HostOomKillDetected - どの Pod が強制終了されたかを表示します。
  • KubeNodeNotReady - ノード リソースと影響を受けるポッドを表示します。
  • HostHighCpuLoad - CPU 使用率分析を表示します。
  • KubernetesDaemonsetMisscheduled - これは既知のバグをフラグ付けし、修正を提案します。
  • KubernetesDeploymentReplicasMismatch - デプロイメントのステータスを表示します。
  • NodeFilesystemSpaceFillingUp - ディスク使用量を表示します。

その他のエラー

これらは、APIServer をリッスンすることによって識別されます。

  • クラッシュループバックオフ
  • 画像プルバックオフ
  • ノード準備完了

さらに、WARNING レベル以上のすべての Kubernetes イベント (kubectl get events) が Robusta UI に送信されます。

変更追跡

デフォルトでは、Deployment、DaemonSet、StatefulSetへのすべての変更は、Prometheusアラートやその他のバグとの関連付けのため、Robusta UIに送信されます。これらの変更はスパムとみなされるため、デフォルトでは他の受信者(Slackなど)には送信されません。

インストール

Kubernetes クラスターで Robusta を構成するには、まず Robusta をインストールし、少なくとも 1 つの宛先 (「シンク」) と少なくとも 1 つのソース (「トリガー」) を接続する必要があります。

Robustaを設定するには、Robusta CLIツールをインストールする必要があります。以下のコマンドでインストールできます。

 #Python 3.7以降が必要です
pipインストール- U robusta - cli -- no - cache

その後、Slackやその他の統合ツールのインストールを構成するRobusta設定ファイルを生成できます。クラウドUIツールを有効にすることも強くお勧めします。

 robusta gen -設定

上記のコマンドはデフォルトでSlackの設定を求めるプロンプトを表示するので、事前に設定し、関連情報を受け取るためのチャンネルを用意する必要があります。最後に、`generated_values.yaml`という名前のHelm Valuesファイルが生成されます。Slackチャンネルに以下のような情報が表示されれば、設定が正しいことが証明されます。

次にHelmを使ってインストールします。まず、Helm Chartリポジトリを追加します。

 helmリポジトリrobustaを追加https://robusta-charts.storage.googleapis.com && helm リポジトリを更新

その後、次のコマンドを使用してインストールできます。

 helm install robusta robusta / robusta -f ./generated_values ​​.yaml \
-- clusterName<YOUR_CLUSTER_NAME> に設定ます

KinD テスト クラスターを使用している場合は、パラメーター `isSmallCluster=tru` を指定して、必要なリソースの量を削減できます。

 helm install robusta robusta / robusta -f ./generated_values ​​.yaml \
-- clusterName<YOUR_CLUSTER_NAME> に設定します\
-- isSmallCluster をtrue設定する

例えば、これはKinDのテストクラスターです。インストール後、以下のようなPodリストが表示されます。

 $ kubectlポッドを取得する
名前準備完了ステータス再起動年齢
alertmanager - robusta - kube - prometheus - st - alertmanager - 0 2 / 2実行中3 ( 30) 3時間 25 分
prometheus - robusta - kube - prometheus - st - prometheus - 0 2 / 2実行中2 ( 34) 4時間 21 分
robusta -フォワーダー- 579f b4b548 - 7 xqq8 1 / 1実行中1 ( 30) 4時間 23 分
robusta - grafana - 797 c64d5b4 - 2 dbhl 3 / 3実行中3 ( 30) 4時間 23 分
robusta - kube - prometheus - st - operator - 7 c5db9ccb9 - gczlp 1 / 1実行中1 ( 30) 4時間 23 分
robusta - kube - state - metrics - 649f d7db9f - 6 sd8p 1 / 1実行中1 ( 34) 4時間 23 分
robusta - prometheus - node - exporter - 5426 b 1 / 1実行中1 ( 30) 4時間 23 分
robusta - prometheus - node - exporter - hx6r4 1 / 1実行中1 ( 30) 4時間 23 分
robusta - prometheus - node - exporter - np4jj 1 / 1実行中1 ( 30) 4時間 23 分
robusta -ランナー- 9f 4f 56 c8b - 49 s7p 1 / 1ランニング1 ( 30) 3時間 48 分

インストール中に Robusta の UI 機能が有効になっている場合は、現在のクラスターの関連監視データを Web UI で表示できます。

テスト

Robusta はデフォルトで Kubernetes ポッドがクラッシュすると通知を送信します。ここでは、テスト用にクラッシュするポッドを作成します。このテストアプリケーションのリソースリストを以下に示します。

 apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ
名前:クラッシュポッド
仕様:
セレクター:
マッチラベル
アプリクラッシュポッド
テンプレート
メタデータ
ラベル:
アプリクラッシュポッド
仕様:
コンテナ
-画像: busybox
コマンド: [ "sh" ]
引数:
- 「-c」
- 「wget ​​-O - https://gist.githubusercontent.com/odyssomay/1078370/raw/35c5981f8c139bc9dc02186f187ebee61f5b9eb9/gistfile1.txt 2>/dev/null; exit 125;」
imagePullPolicy : IfNotPresent
名前:クラッシュポッド
再起動ポリシー:常に

このマニフェストを適用するか、robusta デモ コマンドを実行するだけで、ポッドは通常の起動後すぐにクラッシュします。

 $ kubectlポッドを取得-A
名前準備完了ステータス再起動年齢
クラッシュポッド- 64 d8fbfd - s2dvn 0 / 1クラッシュループバックオフ1 7

ポッドが 2 回再起動すると、Slack チャネルはクラッシュしたポッドに関するメッセージを受信できるようになります。

さらに、Podのクラッシュログ全体も確認できるため、監視やアラート通知に非常に役立ちます。同様に、Robusta UIが有効になっている場合は、Web UIページでも同様のメッセージを確認できます。

自動化の基礎

Robusta 自動化がどのように機能するかを示すために、デプロイメントが変更されたときに Slack メッセージを送信する自動化を構成します。

まず、generated_values.yaml ファイルに次の内容を追加します。

カスタムプレイブック
-トリガー:
- on_deployment_update : {}
アクション:
-リソースベビーシッター:
省略されたフィールド: []
監視するフィールド: [ "spec.replicas" ]

次に Robusta を更新します。

 helmアップグレードrobusta robusta / robusta --values ​​= generated_values ​​.yaml

更新後、デプロイメントのレプリカの数を変更してみましょう。

 kubectl scale --レプリカNEW_REPLICAS_COUNTデプロイメント/ DEPLOYMENT_NAME

通常、Slack チャネルは次のような通知メッセージを受信します。

Robusta UI が有効になっている場合は、すべてのアラートと変更もタイムラインの下に表示されます。

クリックして変更を表示することもできます。

もちろん、Robusta はプレイブック操作の実装など、他にも様々な用途に使用できます。Robusta に関するより詳細な情報については、公式ドキュメント (https://docs.robusta.dev) をご覧ください。