Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)

2024年4月23日(火)
市川 豊
第2弾の連載第5回では、2021年9月8日に開催された「Oracle Cloud Hangout Cafe Season4 #4『Observability 再入門』」の発表内容に基づいて紹介していきます。

Logs

ログはシステムが生成するテキストデータで、正常な動作や異常な動作などが含まれます。これはファイルや標準出力、標準エラー出力として表示されます。一例ですが、システム運用においては「いつ、どこで、何が起きたか」を把握するためにシステムログ、イベントログ、アプリケーションログ、通信ログなどを利用します。また、セキュリティ監査においては「いつ、誰が、何をした」を把握するために、監査ログや認証ログなどを利用します。

ここからは、クラウドネイティブを視点にKubernetesを基盤とした場合に取得するログを表で整理します。

ログ 概要
アプリケーションログ Kubernetes クラスタ上で稼働しているコンテナアプリケーションが出力するログ
システムログ システムコンポーネント(kube-controller-manager、kubelet など)
システム準コンポーネント(CoreDNS や CNI など)
ノード(Kubernetes クラスタのノード)が出力するログ
監査ログ Kubernetes API(kube-apiserver)への接続情報を記録したログ

Kubernetesへの変更はシステムコンポーネントやエコシステムを含めて全てAPIサーバを介して行われるため、どのユーザがどのようなリクエストを送っているかを記録した監査ログはセキュリティ上重要です。

次に、こうしたログをどのように取得するのかを公式ドキュメントにある「Logging Architecture」を参考に見ていきます。

アプリケーションログ
アプリケーションログを取得する方法としては、3種類あります。

  • DaemonSet
  • Sidecar
  • Library

・DaemonSet
ログエージェントをDaemonSetとして各ノードに配置し、ログを転送する方法です。コンテナランタイムが出力するログファイルのディレクトリを監視してラベルなどの情報を付与して転送します。Kubernetesのノード単位でログを集約できます。

DaemonSet

・Sidecar
Pod内において、アプリケーションコンテナのサイドカーコンテナとしてログエージェントを配置し、ログを転送する方法です。汎用的なログエージェントコンテナを作成することで、他のシステムでもサイドカーコンテナとして流用できます。

Sidecar

・Library
アプリケーションからライブラリを利用して直接ログを転送する方法です。

Library

システムログ
Kubernetesのシステムコンポーネント、準システムコンポーネントは稼働している状況に合わせて取得します。ケースバイケースというところもありますので、下表は一例と捉えてください。

稼働例 概要
ネームスペース「kube-system」上で Pod として稼働している場合 DaemonSet によるログエージェントを利用してログを取得
ノード上で systemd として稼働している場合 ノード側でログを取得
ユーザが確認できないブラックボックスの場合 クラウドベンダーが提供するマネージドサービスの場合、Kubernetes のコントロールプレーン上のコンポーネントは
ユーザからアクセスできない場合が多いので、クラウドベンダーが提供する方法で取得

監査ログ
監査ログは、Kubernetesのシステムコンポーネントであるkube-apiserverに監査ログの出力先を設定して取得します。kube-apiserverはコントロールプレーンのコンポーネントであるため、マネージドサービスの場合はベンダーが提供する方法で取得する必要があります。

監査記録のライフサイクルはkube-apiserverコンポーネントの中で行われます。各リクエストにおける実行の段階で監査イベントが生成されます。ポリシーに従って前処理されバックエンドに書き込まれます。ポリシーは何を記録するかを決定し、バックエンドがその記録を永続化する仕組みです。バックエンドの実装はログファイルやWebhookなどあります。

監査ポリシーの内容やマニフェストの定義仕様、バックエンドの詳細については、公式ドキュメントにある「Auditing」を参照してください。

・Grafana Loki
最後に、ログアグリゲーションツールの一例としてGrafana Lokiを紹介します。Grafana Lokiはログ管理および分析をするためのOSSです。主に以下の特徴があります。

  • コスト効率とスケーラビリティ: Lokiはストレージコストを低減しながら大規模なデータセットを効率的に処理できるように設計されている
  • 集中管理: Lokiを使用すると複数のサーバーやアプリケーションからのログを一元的に管理して検索できる
  • Grafanaとの統合: LokiはGrafanaと緊密に統合されており、ログデータの視覚化やダッシュボードの作成が容易
  • ラベルによるフィルタリング: Lokiではログデータにラベルを付けられるためクエリの効率が向上

また、Grafana LokiにはPromQLから影響されたLogQLがあります。これにより、ログのラベルや演算子を使用したフィルタリングやパースなどを実行できます。

Grafana Lokiのアーキテクチャは下図の通りです。

Grafana Loki’s Architecture Components【出典】Grafana Loki’s Architecture Components

Traces

トレースはコンポーネント間を跨ぐイベントまたはトランザクションの因果連鎖の指標として、個々のアプリケーションを跨って伝送される特定リクエストの追跡データです。トレースが必要となった理由はいくつかあります。主な理由として、分散システムやマイクロサービスにおいて個々のリクエストやトランザクションがシステムまたはサービスの異なる部分をどのように通過するかを可視化して理解することや、パフォーマンスのボトルネックやエラー原因を追跡する手段などが挙げられます。

例を挙げて、もう少しトレースの中身を見ていきます。例えば、AからEの処理を実行するリクエストがある場合に、全体をTrace、各処理をSpanとして各処理で要したSpanの時間を見てパフォーマンスのボトルネック状況を確認し、処理の全体像を把握します。

Trace & Span

・Jaeger
トレースを行えるOSSはいくつかあります。発表ではJaegerを紹介しました。主に以下の特徴があります。

  • 分散トレーシングのサポート: Jaegerは複数のマイクロサービスを跨いでリクエストのパスを追跡し、それぞれのサービスでのリクエストの処理時間や順序を可視化できる
  • パフォーマンスのモニタリング: マイクロサービス間のリクエストの遅延や問題点を特定し、システム全体のパフォーマンスを監視できる
  • エンドツーエンドのリクエスト追跡: ユーザーからの1つのリクエストがシステムのどの部分を通過したのかを一連の「スパン」(処理の断片)として追跡し、それらを結合して全体のトレースを形成する

Jaegerのアーキテクチャは下図の通りです。

Jaeger’s Architecture Components【出典】Jaeger’s Architecture Components

・OpenTelemetry
発表時はOpenCensusとOpenTracingを紹介し、標準化としてOpenTelemetryに統合されるという話をしました。現在(2024年4月時点)、OpenTelemetryは分散システムにおける観測データを収集するためのツール群と、APIを提供するオープンソースプロジェクトとなりました。そして、トレーシング、メトリクス、ログといった観測データの収集を自動化し、一貫性のある方法でこれらのデータを分析するための標準化された手段を提供しています*1。代表的なプロダクトは以下の通りです。

  • OpenTelemetry SDK: アプリケーションにトレースデータなどを公開するためのライブラリ
  • OpenTelemetry Protocol(OTLP): メトリクス、ログ、トレースなどのテレメトリを転送するためのプロトコル
  • OpenTelemetry Collector: メトリクス、ログ、トレースなどの各種テレメトリの送受信やデータ処理を行うコンポーネント(プラグイン方式を採用)

OpenTelemetryはクラウドネイティブなアプリケーションの監視において、より効率的で統一されたアプローチを提供しています。また、オープンソースで広いコミュニティによるサポートを受けており、多様なニーズに合わせて拡張やカスタマイズができます。

*1: テレメトリとは遠隔地からデータを自動的に測定し、それを収集するプロセスのこと。メトリクス(アプリケーションやインフラストラクチャからのパフォーマンス指標)、トレース(一連の処理の流れやリクエストの経路)、ログ(イベントの記録)が含まれる
日本オラクル株式会社

Oracle Groundbreaker Advocate
Principal Cloud Solution Engineer

これまで、インフラエンジニア、フロントエンドエンジニアとして官公庁のシステム基盤を中心としたサーバの設計構築、運用保守、Webシステム開発を担当。技術教育者として専門学校でクラウド技術やOSS(Linux、Docker、Kubernetes)の授業を担当し、企業様向けプライベートトレーニング講師も担当。 アドボケート/エバンジェリストとしてミートアップ、カンファレンスで登壇。現在は、クラウドネイティブ技術を中心とするソリューションエンジニアとして活動。クラウドネイティブ技術に関連するコミュニティの運営にも積極的に参加。

Community:
Oracle Cloud Hangout Cafe メンバー (#ochacafe)
CloudNative Days Tokyo 実行委員会メンバー (#CNDT)

Book:
著書「Dockerコンテナ開発・環境構築の基本」(インプレス)
共著「RancherによるKubernetes活用完全ガイド」(インプレス)、「コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤」(翔泳社)

連載バックナンバー

仮想化/コンテナ技術解説
第5回

Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)

2024/4/23
第2弾の連載第5回では、2021年9月8日に開催された「Oracle Cloud Hangout Cafe Season4 #4『Observability 再入門』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第4回

Oracle Cloud Hangout Cafe Season6 #4「Pythonで作るAPIサーバー」(2022年12月7日開催)

2024/3/21
第2弾の連載第4回では、2022年12月7日に開催された 「Oracle Cloud Hangout Cafe Season6 #4『Pythonで作るAPIサーバー』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第3回

Oracle Cloud Hangout Cafe Season 4 #2「Kubernetesのネットワーク」(2021年5月12日開催)

2024/2/20
第2弾の連載第3回では、2021年5月12日に開催された 「Oracle Cloud Hangout Cafe Season4 #2『Kubernetesのネットワーク』」の発表内容に基づいて紹介していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています