Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)
Metrics / Logs / Traces & Tool
ここからは、メトリクス、ログ、トレースについてツールと合わせて詳しく見ていきます。
Metrics
メトリクスとは「CPU使用率やメモリ使用量などを特定の時間間隔で測定し統計した数値データ」と先に説明しました。ある一時点の事実としてのデータであるため、経時的に測定する必要があります。また、よく利用される方法として閾値を設けて、その閾値を超えた場合にアラートを出して通知する方法も用いられます。メトリクスの主な例としてはCPU・メモリ使用率、リクエスト数、ネットワーク通信量です。
メトリクス監視を始める上で、収集するメトリクスを何にすべきか戸惑う場合があります。もちろん、システムによるケースバイケースもありますが、リソースをベースとした「USE」とサービスをベースとした「RED」というメトリクス取集の指標があります。また『SREサイトリライアビリティエンジニアリング』という書籍では、The Four Golden Signalsとして4つのメトリクスを挙げています。合わせて表で整理します。
指標 | 概要 |
---|---|
USE |
Utilization : リソースの単位時間あたりの使用率(例:CPU、メモリの使用率等) Saturation : リソースの飽和状況(例:実行キューの長さ等) Error : エラーイベントのカウント(例:ネットワーク、 I/O のエラーなどをカウント) |
RED |
Rate(Request) : 秒間のリクエスト数 Error : 失敗しているリクエスト数 Duration : リクエストの処理に要した時間 |
The Four Golden Signals |
Latency : リクエストを処理するのに要した時間。正常なレスポンスと異常なレスポンスは分けるようにする Traffic : システムに対するリクエスト量。リクエスト数やネットワーク I/O 、セッション数など Error : 処理の失敗 Saturation : リソースの飽和状況。メモリ、ディスク、CPU や I/O など |
・Prometheus
ここからは、メトリクスを取集するツールを紹介します。発表では、OSS(オープンソースソフトウェア)の1つとしてPrometheusを紹介しました。
PrometheusはPull型のメトリクス監視システムで、Kubernetesとも親和性が高く、サービスディスカバリ機能により監視対象を自動的に見つけることができます。以下、主な特徴です。
- クラスタ全体のリソース監視
- PodごとのCPU、RAM、ネットワーク使用量の監視
- ラベルを利用したメトリクス管理
- メトリクス集約に特化した独自クエリ言語(PromQL)を持つ
Prometheusのアーキテクチャは下図の通りです。
ここで、メトリクス収集におけるPush型とPull型を整理します。Push型は監視対象システムにエージェントをインストールして、そのエージェントから監視システムにメトリクスを送信します。Pull型は監視システムから監視対象システムのメトリクスを受信します。
PrometheusはPull型で、監視対象システムのExporterという軽量なHTTPサーバにリクエストを送信して、レスポンスを受信する仕組みです。Prometheusにはサービスディスカバリ機能が実装されているため、監視対象のリスト(IPアドレスやポート番号など)を動的に更新して運用への影響を回避できます。
・Push型とPull型
Exporterはターゲットが持つ独自形式のメトリクスをExporterが取得して、Prometheusが処理できるフォーマットに変換する役割を担います。
Podデザインパターンの1つであるアダプタパターンを利用して取得することもできます。
また、PrometheusはExporter経由ではなく、アプリケーションにクライアントライブラリを実装することでアプリケーションから直接メトリクスを取得することもできます。
・ラベル管理
ここまで、Promehteusにおけるメトリクス収集の仕組みについて説明してきましたが、ここからは取得するメトリクスを効率的に扱うラベル管理について見ていきます。
Prometheusはメトリクスを区別するためにラベルを利用できます。ラベルは、メトリクス集約に特化した独自クエリ言語であるPromQLを利用して集約対象の絞り込みなどを行えます。ラベルはメトリクスを出力する際に付与されます。主な仕様については下図の通りです。
以下は、sample-web-serviceというPodが受けたリクエスト数の10分間平均を求める例です。
rate(http_requests_total{pod=”sample-web-service”}[10m])
PrometheusのWeb UIを利用してフォームにPromQLを入力し、実行すると結果を表示できます。メトリクス名、ラベルフィルタリング、正規表現フィルタリングなどが行えます。
最後に、Prometheusの通知に関わるAlertmanagerコンポーネントについて見ていきます。
・Alertmanager
Prometheusには通知を実行する機能が実装されていないため、Alertmanagerコンポーネントと連携する必要があります。Alertmanagerコンポーネントの主な特徴は、以下の通りです。
- Alertmanagerは通知に特化したコンポーネント
- 収集したメトリクスにアラートとして発報するルールを設定できる
- ルールはPromQLで設定され、定期的に評価されて条件が満たされるとアラートがAlertmanagerに送信される
- アラートはメールやSlackなどへ通知できる
- 通知間隔、連続通知抑止、グルーピングなど管理できる
- アラート、通知に関するものはPrometheusでなくAlertmanagerで管理
Prometheusはメトリクスの取集や管理が中心となりますが、その集約したデータを可視化する上でよく一緒に利用されるOSSがGrafanaです。Grafanaについて少し触れておきます。
・Grafana
Grafanaはデータの可視化、監視、およびアラートのためのOSSです。非常にユーザーフレンドリーで、多くのデータソースと連携できます。主な特徴は、以下の通りです。
- データの可視化: Grafanaを使用すると、様々なデータソースから収集したデータを視覚的なダッシュボードに表示できる、ダッシュボードはカスタマイズ可能でグラフ、チャート、表など、さまざまな形式でデータを表示できる
- 多様なデータソースのサポート: GrafanaはPrometheusのようなメトリクスデータだけでなく、InfluxDB、MySQL、PostgreSQLなど多くの一般的なデータベースや時系列データベースに対応
- アラート機能: Grafanaにはアラート機能があり、特定の条件を満たした場合に通知を送ることができる
- カスタマイズと拡張性: ユーザは自分のニーズに合わせてダッシュボードをカスタマイズできる、多数のプラグインを通じて機能を拡張することもできる
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Observability Conference 2022から、サイボウズのオブザーバービリティ事例を紹介
- Kubernetesアプリケーションのモニタリングことはじめ
- 「Odigos」でノーコードの分散トレーシングを実現する
- Kubernetesアプリケーションのトレーシング
- Promscaleのデモから見えるタイムシリーズデータを使った現代的なオブザーバビリティ
- Observability Conference 2022開催、Kubernetesにおける観測の基本を解説
- 3/11「Observability Conference 2022」開催せまる! 実行委員オススメのみどころを紹介
- Observability Conference 2022、Splunkのエンジニアが説明するOpenTelemetryの入門編
- Obervability Conference 2022、OpenTelemetryの概要をGoogleのアドボケイトが解説
- Observability Conference 2022、日本ユニシスのエンジニアが解説するデベロッパーにとってのオブザーバビリティ