Elastic ObservabilityによるKubernetesクラスタの管理
※本投稿は、上記のElastic BlogをDeepL翻訳したものです。
著者 Bahubali Shetti
2022年11月1日
運用エンジニア(SRE、ITマネージャー、DevOps)であれば、テクノロジーやデータのスプロールをどのように管理するか、常に頭を悩ませていることでしょう。Kubernetesはますます普及しつつあり、これらのデプロイの大部分はAmazon Elastic Kubernetes Service(EKS)、Google Kubernetes Engine(GKE)、またはAzure Kubernetes Service(AKS)であることでしょう。単一のクラウドを利用している人もいれば、複数のKubernetesクラウドサービス上でクラスタを管理する負担が増える人もいるでしょう。クラウドプロバイダーの複雑さに加えて、より多くの観測可能データと遠隔測定データを生成する何百ものデプロイ済みサービスを管理する必要があります。
Kubernetesクラスタとその上で動作するアプリケーションの状態と健全性を、それらが生成するログ、メトリクス、トレースを通じて理解する日々の運用は、おそらくあなたの最大の課題となるでしょう。しかし、運用エンジニアとして、問題の予防、予測、是正に役立つ重要なデータをすべて必要とします。また、トラブルシューティングやサポートのためにKubernetesのテレメトリデータを可視化し分析する必要がある場合、複数のツールにまたがる大量のメトリクス、ログ、トレースは絶対に必要ではありません。
Elastic Observabilityは、Kubernetesのメトリックスとログの膨大な量を管理するために、ロギングだけでなく、広範囲で集中的な観測能力を提供します。Elastic Observabilityは、OpenTelemetryとAPMエージェントを通じてすべてのメトリクス、ログ、トレースデータを統合することで、Kubernetesクラスタとその上で動作するアプリケーションの動作に関する詳細な洞察とコンテキストを提供します。
クラスタの場所(EKS、GKE、AKS、自己管理)やアプリケーションに関係なく、KubernetesのモニタリングはElastic Observabilityで簡単に行うことができます。 ノード、ポッド、コンテナ、アプリケーション、インフラ(AWS、GCP、Azure)のメトリクス、インフラとアプリケーションのログ、アプリケーションのトレースなど、すべてがElastic Observabilityで利用可能です。
このブログでは、次のことを示します。
・Elastic Cloudは、Elastic Agent(DaemonSetとしてクラスタに簡単にデプロイ可能)を通じてメトリクスやログデータを集約、取り込み、ホストからのログやメトリクス(システムメトリクス、コンテナ統計情報)、Kubernetes上で動作するすべてのサービスからのログを取得することが可能です。
・Elastic Observabilityは、Kubernetesクラスタコンポーネント(Pod、ノード、サービス、ネームスペースなど)全体で、どのように統一された遠隔測定(ログ、メトリクス、トレース)体験をもたらすことができるのでしょうか。
前提条件と構成
このブログをご覧になる予定の方は、このデモをセットアップするために使用したコンポーネントと詳細をご覧ください。
・Elastic Cloudのアカウントとデプロイ済みスタックがあることを確認します(手順はこちらをご覧ください)。
・GKEを使用しましたが、Kubernetesクラスターの場所はどこでもかまいません。
・私たちは、非常に人気のあるHipsterShopデモ・アプリケーションのバリエーションを使用しました。これはもともとGoogleによって書かれたもので、OpenTelemetryデモアプリのような多数のバリエーションが利用できるKubernetesを紹介するためのものです。このアプリを使用するには、ここに行き、指示に従ってデプロイしてください。Kubernetes のメトリクスを流すために otelcollector をデプロイする必要はありません - これについては後述します。
・ElasticはPrometheusやFluentDからのネイティブインジェストをサポートしていますが、このブログではElastic Agentを経由してKubernetesクラスタから直接インジェストする方法を紹介しています。ElasticがPrometheusやFluentD/bitからテレメトリを取り込む方法については、追ってブログで紹介する予定です。
Elasticで何を観察・分析できるのか?
Kubernetesクラスタのメトリクスやログを取り込んで可視化するためにElasticをセットアップする手順を説明する前に、Elasticの便利なダッシュボードを覗いてみましょう。
前述の通り、私たちはGKE上でHipsterShopの亜種を実行し、Kubernetesを統合したElastic AgentsをGKEクラスタにDaemonSetとしてデプロイしています。エージェントをデプロイすると、ElasticはKubernetesクラスタから(具体的にはkube-state-metricsから)メトリクスを取り込み始め、さらにElasticはクラスタからすべてのログ情報を取り込みます。
Elastic ObservabilityでKubernetesのメトリクスを可視化する
Elastic Observabilityですぐに(OOTB)利用できるKubernetesダッシュボードのいくつかを紹介します。
Elasticには、クラスタ概要ダッシュボードとポッドダッシュボードに加え、便利なOOTBダッシュボードがいくつかあります。
・Kubernetesオーバービューダッシュボード(上記参照)
・Kubernetesポッドダッシュボード(上記参照)
・Kubernetesノード・ダッシュボード(Kubernetes nodes dashboard)
・Kubernetesデプロイメントダッシュボード(Kubernetes deployments dashboard)
・Kubernetes DaemonSetsダッシュボード
・Kubernetes StatefulSetsダッシュボード
・Kubernetes CronJob & Jobsダッシュボード
・Kubernetesサービスダッシュボード
・定期的に追加されます
さらに、これらのダッシュボードをカスタマイズしたり、独自のダッシュボードを構築することも可能です。
Elastic Observabilityでログを操作する
上記の画面からもわかるように、Kubernetesクラスタのメトリクスだけでなく、KubernetesのログもすべてKubernetesクラスタでElastic Agentを使うだけで取得することができます。
問題の予防、予測、修正
Elasticはメトリクスやログの管理だけでなく、クラスタのテレメトリにおける異常の検出や予測もサポートします。データに対してElasticの機械学習をオンにするだけで、分析作業を強化することができます。以下に示すように、ElasticはKubernetesクラスタのログとメトリクスのための統一された観測可能な場所であるだけでなく、分析と管理を強化するための広範な真の機械学習機能を提供します。
上のグラフでは、ログ全体で異常検知を行い、9月21日から23日の期間に何か問題がある可能性があることを示しています。下のグラフでは、単一の kubernetes.pod.cpu.usage.node メトリックを分析することで、9 月の初期と月の後半に cpu の問題があることを示し、詳細を掘り下げています。クラスタのテレメトリーについては、マルチメトリック分析(上記で示したシングルメトリックの問題とは異なります)と母集団分析を使って、機械学習でより複雑な分析を行うことができます。
Elasticは、Kubernetesクラスターテレメトリーの分析を強化するために、より優れた機械学習機能を提供します。次のセクションでは、テレメトリーデータをElasticに取り込むことがいかに簡単かを説明します。
セットアップ
GKE上にデプロイされたHipsterShopアプリケーションからElasticにメトリクス、ログ、トレースを取得する方法の詳細について説明します。
まず、Hipstershopの好きなバージョンを選びます。上で述べたように、私たちはOpenTelemetry-Demoのバリエーションを使いましたが、これはすでにOTelが搭載されているからです。しかし、このブログのためにスリム化しました(いくつかの多様な言語とより少ないサービス)。
ステップ0:Elastic Cloudのアカウントを取得する
Elastic Cloudを使い始めるには、指示に従ってください。
ステップ1:Kubernetesクラスターを取得し、Kubernetesアプリをクラスターにロードする
選択したクラウド・サービスまたはローカルの Kubernetes プラットフォームの Kubernetes クラスター上にアプリを取得します。Kubernetes上にアプリをアップロードしたら、デフォルトのネームスペースで以下のPod(またはその亜種)が動作しているはずです。
ステップ2:kube-state-metricsをオンにする
次に、kube-state-metricsをオンにする必要があります。
まず
次に、examplesディレクトリの下にあるkube-state-metricsディレクトリで、標準のconfigを適用するだけです。
これでkube-state-metricsがオンになり、kube-system名前空間でこのようなPodが動いているのが確認できるはずです。
ステップ3:Kubernetesインテグレーションを使ったElastic Agentのインストール
Kubernetes Integrationを追加します。
エージェントポリシーとElastic Agentでの使用方法については、こちらをご覧ください。
私のクラスタでは、4つのノードと4つのelastic-agentsがDaemonSetの一部として起動されています。
ステップ4:KubernetesメトリクスのElastic out of the box dashboards(OOTB)を見て、Kubernetesログの発見を開始します。
これだけです。すべてのダッシュボードにメトリクスが流れ込んでいるのがわかるはずです。特定のポッドのログを表示するには、KibanaのDiscoverに入り、特定のポッド名を検索するだけです。
さらに、Elasticで直接すべてのポッドログを閲覧することができます。
上記の例では、frontendServiceとcartServiceのログを検索してみました。
ステップ5:ボーナス!
今回はOTelベースのアプリケーションを使用していたため、Elasticはアプリケーションのトレースも引き込むことができます。これについては別のブログで説明します。
Hipster ShopのフロントエンドトランザクションのトレースがElastic Observabilityでどのように見えるか、ちょっと見てみましょう。
結論 : Elastic ObservabilityはKubernetesのモニタリングに最適
Elastic ObservabilityがKubernetesクラスタの管理にどのように役立つか、また簡単なデプロイでも生成されるメトリクス、ログ、トレースデータの複雑さについてご理解いただけたかと思います。
教訓を簡単に振り返り、より具体的に学びました。
Elastic Cloudは、DaemonSetとしてクラスタに簡単にデプロイでき、システムメトリクス、コンテナ統計、Kubernetes上で動作するすべてのサービスからのメトリクスなど、ホストからのメトリクスを取得するElastic Agentを通じて、テレメトリデータを集約し取り込むことができる方法。
お客様のKubernetesクラスタコンポーネント(ポッド、ノード、サービス、任意のネームスペースなど)にまたがる統一された遠隔測定(Kubernenetesログ、メトリクス、トレース)から、Elasticが何をもたらすかをご覧ください。
MTTHH (mean time to happy hour)を短縮するElasticのML機能に興味がある。
すぐにでも始めたい方 ご登録の上、上記でご紹介した機能や性能をお試しください。