こんにちは、サイオステクノロジーの前田です。本日はKubernets環境でのモニタリングスタック(ほぼPrometheus)についてお話ししていきます。
アプリケーションを運用するときにはサービスが動作しているか監視します。監視の中でもCPUやメモリの使用量等をモニタリングして、サービスの使用量によるマシン設定の変更やリソース不足の問題等を見極めます。Kubernetesではその仕組みとしてPrometheusを使用したモニタリングを行うことが多いです。OKDもPromehteusを利用したモニタリングが存在しますので本記事ではモニタリングに関した内容を紹介していきます。
モニタリングスタックとは
モニタリングスタックとは、モニタリング機能とモニタリングで利用するコンポーネント群のことです。Prometheusはモニタリングで利用されるのですが、モニタリング機能以外のアラートや視覚化の要素はPrometheus以外を利用します。モニタリング単体ではなくモニタリングスタックとして利用することで、利用者の要望をかなえる動作ができます。
- OKDのモニタリングスタックの主なコンポーネント
- Prometheus
- モニタリングとアラートルールを設定してアラートをAlertmanagerに送信する。
- Alertmanager
- Prometheusから送信されたアラートを処理し外部の通知システムにアラートを送信する。
- Thanos Querier
- メトリクスの集約と重複の排除
- Grafana
- メトリクスの分析および可視化のためのダッシュボードを提供
- Prometheus
- OpenShift(OKD)のモニタリングスタック
- 初期構築時にクラスターオペレーターという形でデプロイされています。最初からメトリクスを取得しており、クラスター管理画面からモニタリングデータを閲覧することが可能です。
- アプリケーションとしての冗長性はありますが、ストレージは初期状態では永続ストレージではなくローカルストレージのため注意が必要です。
- ユーザ独自に作成したプロジェクト内部のアプリケーションのコンテナのCPUやメモリ等の情報は取得します。独自に設定したエクスポーターに関しては、オペレータの設定変更が必要です。
Prometheusについて
オープンソースのシステム監視およびアラートツールです。Kubernetesで利用されるメジャーなモニタリングツールです。
- 特徴としては、下記の要素があります。
- Key-Valueで表現される多次元データモデル
- PromQLを利用した柔軟なクエリ
- アプリケーションやサービスに応じた多数のエクスポーター
- Pull型でHTTPを介したメトリクス収集モデル
- サービスディスカバリを利用した監視ターゲットの自動検出
OKDのモニタリング画面
OKDのモニタリング画面を紹介します。
- 全体モニタリング画面
- プロジェクトのモニタリング画面
- クラスターのモニタリング画面
- Developerのプロジェクト内部のモニタリング画面
よく変更される箇所
初期状態でよく変更される内容の二つについて記載します。下記内容はInsights の機能を利用している場合、改善したほうがいいと表示される内容でもあります。
- 永続ストレージ設定
- アラートレシーバの設定
永続ストレージ設定
デフォルトでは永続ストレージを利用していません。設定変更して永続ストレージを利用するように設定します。下記に簡易な設定方法を記載します。既存のコンフィグファイルがある場合は上書きしてしまうため注意してください。
- コンフィグファイルの作成
-
vi cluster-monitoring-config.yaml
-
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: retention: 15d volumeClaimTemplate: spec: storageClassName: gp2 resources: requests: storage: 40Gi
-
- コンフィグファイルの適応
-
oc apply -f cluster-monitoring-config.yaml
-
- 永続ストレージの設定確認
-
oc get pv -n openshift-monitoring
- 2つpvが作成されて、永続ストレージに新たにデータが保存されます。
-
参考URL:モニタリングスタックの設定
アラートレシーバの設定
アラートが発生したときは、クラスター外部に通知していると運用上すごく助かります。メールやslackやwebhookに送信する設定をクラスターの管理画面から設定します。
- アラートレシーバの設定
最後に
Prometheusとgrafanaを利用すること関しては導入と初期設定をすると大変ですが、OKDやOpenShiftは導入されているので初期設定が少なくて楽できます。
モニタリングの範囲でクラスター側の設定はされています。しかし、ユーザのアプリケーションに対しては設定されていません。javaやphpやdb等のアプリケーション固有のモニタリングに関してはエクスポーターを開発者自ら設定すること、kubernetesクラスターのmonitoringオペレーターの設定変更をするという設定変更が必要になります。
Prometheusの導入や設定に関していろいろ学習しないといけないこともありますが、本記事が読者のKubernetesに関わる負担を解決する一つになれば幸いです。