ZEROサイト"コンテナ"の世界を知る!【Vol.03】Kubernetes環境の監視は難しい?監視環境の構築ポイントを解説ホームコラム一覧"コンテナ"の世界を知る!2021/01/19Kubernetes環境の監視方法には、SaaSの監視サービスとして提供されているDataDogやSysdigなどのサービスがあります。SaaSのため、独自にインフラを用意する必要もなく、すぐに使用することができるメリットがあります。今回は、今後サービスとしての展開も想定し、クラウド環境だけでなくオンプレミス環境の監視も可能な「独自の監視システム」を構築することにしました。そのポイントを紹介します!Kubernetes環境の監視は難しい?Kubernetes環境を監視する場合、コンテナアプリケーションがどのノードで稼働しているか外部から状況を把握することが難しく、また、コンテナのライフサイクルも短いため頻繁に稼働するノードが変更される可能性があるため、ノード単位での監視設定ができません。ログファイルがPod単位のため、同じアプリケーションでもPodがダウンすると別のログファイルとして扱われるなど、どのNamespaceのどのPodのログなのかを判別することが難しいという特徴もあります。S&Iが従来から得意としているZabbixによるシステム監視は、ホスト(ノード)単位でAgentを導入し、決まった監視ルールの適用やIPアドレスベースでの死活監視など、静的監視がメインです。ノード単位での監視設定ができないKubernetes環境にはちょっと不向きです。そこで今回は、コストの観点も考慮しながら、Kubernetesクラスタ内部からの監視と外部からの監視、そしてログ監視の機能の3つのポイントに重点を置いて構築しました。Kubernetesクラスタ内部の監視Kubernetesクラスタ内部の状況を外部から把握することは難しいため、Kubernetesクラスタ内にオープンソースのPrometheus(プロメテウス)という監視用ソフトウェアをデプロイし、内部からKubernetesシステム、アプリケーションの監視を行います。CPUやメモリー、ディスク使用率等のリソース情報やアプリケーションのプロセス(Pod)稼働状況を取得できます。Prometheusは収集したデータ(メトリクス)に異常があった場合には、「Alertmanager」というコンポーネントを経由してSlackへアラートを通知します。Kubernetesクラスタ外部からのICMP/ポート監視Kubernetesクラスタ全体の障害や内部監視機能に問題が発生した際にも異常を検知できるように、Kubernetesクラスタ外部に監視サーバーを別途構築しました。仮想サーバー上にDockerを導入したコンテナベースでの監視システムとなっています。Exporter」と呼ばれるツールを経由して、Kubernetesクラスタ内で稼働しているアプリケーションのポート監視やワーカーノードのICMP監視を行っています。Prometheus単体では、取得した監視データの可視化に最小限の機能しか用意されていないため、高度にグラフ表示などが可能な「Grafana」と呼ばれるソフトウェアを導入しています。Grafanaの機能によりSlackに画像データ付きのアラートを通知することも可能です。障害原因を特定する上でログを確認することは重要です。その為、外部監視サーバーに各種ログを連携し、エラーなど特定メッセージを検知した場合には通知するといった仕組みを導入しました。今回実装したログ監視の仕様は、以下の通りです。通知Grafanaに連携されたログ出力例まとめKubernetesクラスタにおける監視の実装に非常に苦労しました。ログ監視は、従来のシステムと比較して非常に特殊で、そのままでは各種ログの判別が難しく、ログのラベリング方法の調査に時間がかかりました。監視システムを実装するにあたり、コストを可能な限り抑えたいという要件がありました。Kubernetesクラスタのログ監視では、KibanaとElasticsearchを組み合わせた構成が標準とされていますが、Elasticsearchは要求されるリソースが多く、ログ監視だけの用途としては、高コストとなってしまいます。Lokiを使用することで、Grafanaとの相性も良く、低リソース/低コストで動作する監視サーバーを構築することができました。検討すべきポイントとは?お問い合わせ・見積もり依頼ご質問やお客さまのご要望、お見積もり依頼などはこちらからお気軽にお問い合わせください。ZEROサイトTOPに戻る。