オブザーバビリティーの3本柱

オブザーバビリティーの3本柱

前回は「オブザーバビリティー(可観測性)とは:次世代システム運用を支える視点」と題して、次世代のシステム運用に不可欠な概念であるオブザーバビリティー(可観測性)について、その本質とビジネスにもたらす価値を、具体的な事例を交えながら解説しました。

本稿では、「オブザーバビリティーの3本柱」と題して、オブザーバビリティーを実現するために必要不可欠な3つの主要な要素について詳しくご紹介します。

2. オブザーバビリティーの3本柱

オブザーバビリティーは、システムから収集される様々なデータに基づいてその内部状態を推測する概念ですが、具体的には以下の3つの主要な要素(「3本柱」と称されます)から構成されます。これらはそれぞれ異なる性質を持つデータであり、相互に連携することでシステムの包括的な可視化を実現します。

1. メトリクス: システムの状態を数値で把握する

メトリクスとは、CPU使用率、メモリ使用量、ネットワークトラフィック、ディスクI/O、リクエスト数、エラー率、応答時間など、システムの状態を定量的に示す数値データのことです。これらは、特定の時点でのスナップショットとして収集され、時系列で記録されることで、システムの変化やトレンドを把握するために用いられます。メトリクスは軽量であり、大量に収集してもシステムのパフォーマンスに大きな影響を与えにくいという特性があります。

収集すべき主要メトリクスと活用例

システムの種類や役割によって重要となるメトリクスは異なりますが、一般的に以下のカテゴリのメトリクスが重要とされます。

  • システムリソースに関するメトリクス: CPU使用率、メモリ使用率、ディスク使用率、ネットワークI/Oなど。これらは、システムの物理的な健全性を把握するために不可欠です。例えば、CPU使用率の急激な上昇は、アプリケーションの負荷増大やデッドロックなど、何らかの問題が発生している可能性を示唆します。
  • アプリケーションに関するメトリクス: リクエスト数、エラー率、応答時間、スループット、キューの長さなど。これらは、アプリケーションのパフォーマンスと可用性を直接的に示す指標となります。例えば、特定のエンドポイントの応答時間が異常に長くなっている場合、その機能にボトルネックが存在する可能性が高いと判断できます。
  • ビジネスに関するメトリクス: ユーザー登録数、購買数、セッション数など、ビジネス目標に直結する指標。これらをオブザーバビリティーに取り入れることで、技術的な問題がビジネスに与える影響をより明確に理解できるようになります。

これらのメトリクスを時系列でグラフ化し、ダッシュボードとして可視化することで、システムの健全性を一目で把握したり、異常なパターンを早期に検知したりすることが可能になります。例えば、過去のデータと比較して特定の時間帯にエラー率が急増している場合、その時間帯にデプロイされた変更や、外部からのアクセス増加などが原因として考えられます。

ツールの紹介(Prometheus, Grafanaなど)

メトリクスの収集、保存、可視化には様々なツールが利用されています。

  • Prometheus(プロメテウス):
    • Cloud Native Computing Foundation (CNCF) がホストするオープンソースの監視システムです。
    • 時系列データベースを備え、HTTPエンドポイントからメトリクスをスクレイピング(取得)するプル型モデルを採用しています。
    • 柔軟なクエリ言語(PromQL)を持ち、複雑な集計やアラート設定が可能です。
    • 多くのシステムやアプリケーションに対応するExporter(エクスポーター)が豊富に提供されています。
  • Grafana(グラファナ):
    • オープンソースのデータ可視化ツールであり、Prometheusを含む多くのデータソースに対応しています。
    • 直感的で豊富なグラフオプションを提供し、カスタマイズ性の高いダッシュボードを簡単に作成できます。
    • メトリクスだけでなく、ログやトレースデータも統合して表示できるため、統合的な運用監視の基盤として広く利用されています。

2. ログ: イベント発生時の詳細な記録

ログとは、システムやアプリケーション内で発生した様々なイベントを時系列で記録したテキストデータです。例えば、ユーザーのログイン、エラーの発生、データベースへのアクセス、APIコールの完了など、多種多様な情報がログとして出力されます。メトリクスがシステムの「状態」を数値で示すのに対し、ログは「何が起こったか」という具体的なイベントの詳細情報を提供します。

ログは、問題発生時の原因究明や、異常な挙動の兆候を追跡する上で非常に重要な情報源となります。特に、分散システムでは、複数のサービスが連携して動作するため、あるリクエストがどのサービスを通過し、どのような処理が行われたかを追跡する際にログが不可欠です。

構造化ログの重要性

従来のログは、人間が読みやすいように整形された非構造化なテキスト形式が主流でした。しかし、ログの量が増大し、機械的な分析が必要となる現代においては、構造化ログの重要性が増しています。構造化ログとは、JSONやXMLなどの機械が解析しやすい形式で、キーと値のペアによって情報が格納されたログのことです。

例えば、従来のログが「[2023-10-27 10:00:00] ERROR User authentication failed for user: testuser」であるのに対し、構造化ログでは以下のように表現されます。

JSON

{
  "timestamp": "2023-10-27T10:00:00Z",
  "level": "ERROR",
  "message": "User authentication failed",
  "user_id": "testuser",
  "service": "authentication-service",
  "trace_id": "abcdef123456"
}

構造化ログにすることで、特定のフィールド(例: user_idservice)でフィルタリングしたり、集計したりすることが容易になり、大量のログの中から必要な情報を迅速に探し出すことが可能になります。

ログ集約・分析ツールの紹介(Elastic Stack, Splunkなど)

大量のログデータを効率的に収集、保存、検索、分析するためには、専用のログ管理ツールが不可欠です。

  • Elastic Stack(旧称 ELK Stack):
    • Elasticsearch(エラスティックサーチ): 分散型検索・分析エンジンで、ログデータの高速なインデックス作成と検索を可能にします。
    • Logstash(ログスタッシュ): 様々なソースからログを収集し、加工・変換してElasticsearchに転送するデータ処理パイプラインです。
    • Kibana(キバナ): Elasticsearchに保存されたデータを可視化するためのUIツールで、検索、グラフ作成、ダッシュボード作成が可能です。
    • オープンソースでありながら高いスケーラビリティと柔軟性を持ち、多くの企業で利用されています。
  • Splunk(スプランク):
    • エンタープライズ向けの強力なログ管理・分析プラットフォームです。
    • 膨大なマシンデータをリアルタイムで収集・インデックス化し、検索、レポート、アラート、ダッシュボード作成などの機能を提供します。
    • 複雑なデータからの洞察抽出や、セキュリティ監視(SIEM)にも強みを持っています。商用製品であるため、高度な機能やサポートが提供されます。

3. トレース: リクエストの流れを可視化する

トレース(分散トレーシング)とは、単一のユーザーリクエストやトランザクションが、複数のサービスやコンポーネントを横断して処理される際、その一連の流れ(パス)を可視化する手法です。マイクロサービスアーキテクチャでは、一つの機能を実現するために複数のサービスが連携し合うため、どこで遅延が発生しているのか、どこでエラーが発生しているのかを把握することが非常に困難になります。トレースは、この「リクエストの旅」を追跡することで、ボトルネックやエラーの発生源を特定する手助けをします。

各サービスがリクエストを受け取った際に、ユニークなトレースIDと、そのサービス内での処理を示すスパンIDを付与し、次のサービスに引き継ぎます。これにより、リクエストが通過した全てのサービスと、それぞれのサービスでの処理時間、エラー情報などを一元的に可視化できるようになります。

分散トレーシングの仕組みとメリット

分散トレーシングは、以下のような仕組みで動作します。

  1. コンテキスト伝播: リクエストがシステムに入ると、ユニークなトレースIDが生成されます。このIDは、リクエストがサービス間を移動する際にHTTPヘッダーなどで伝播されます。
  2. スパンの生成: 各サービスは、リクエストの処理を開始・終了する際に「スパン」と呼ばれる処理単位を生成します。スパンには、処理内容、開始時刻、終了時刻、継続時間、エラー情報などが含まれます。
  3. コレクターへの送信: 各サービスは、生成したスパンをコレクター(データ収集器)に送信します。
  4. トレースの再構成と可視化: コレクターは、同じトレースIDを持つ複数のスパンを統合し、一つの完全なトレースとして再構成します。これにより、リクエストがシステムを横断するパスと、各処理段階での時間消費をガントチャートのような形式で可視化できます。

分散トレーシングの導入には、以下のような大きなメリットがあります。

  • ボトルネックの特定: どのサービスや処理が原因でリクエストの応答時間が長くなっているのかを視覚的に特定できます。
  • エラー発生源の特定: リクエストの途中でエラーが発生した場合、どのサービスでエラーが起きたのかを迅速に特定できます。
  • サービス間連携の理解: 複雑なマイクロサービス間の依存関係やデータフローを把握できます。
  • 潜在的なパフォーマンス問題の発見: 頻繁に呼び出されるがパフォーマンスが悪い処理や、意図しないリクエスト経路などを発見できます。

ツールの紹介(Jaeger, Zipkin, OpenTelemetryなど)

分散トレーシングを実現するための主要なオープンソースツールには以下のようなものがあります。

  • Jaeger(イェーガー):
    • Uber Technologiesによって開発され、CNCFのインキュベーションプロジェクトとなっています。
    • Go言語で記述されており、OpenTracing APIと互換性があります。
    • 多数の言語やフレームワークに対応し、スケーラビリティの高い分散トレーシングシステムを構築できます。
    • リクエストのパス、サービス間の依存関係、レイテンシなどを視覚的に分析するUIを提供します。
  • Zipkin(ジプキン):
    • Twitterが開発した分散トレーシングシステムです。
    • スパンの収集、保存、検索、可視化まで一連の機能を提供します。
    • HTTP、Kafka、gRPCなど様々なプロトコルに対応し、多言語で利用可能です。
  • OpenTelemetry(オープンテレメトリー):
    • CNCFのプロジェクトであり、オブザーバビリティーデータ(メトリクス、ログ、トレース)の生成、収集、エクスポートのためのベンダーニュートラルな標準仕様およびSDKのセットを提供します。
    • 特定のベンダーやツールに依存せず、オブザーバビリティーデータを標準的な形式で収集できるため、将来的なツール変更やマルチクラウド環境への対応が容易になります。
    • 現在、オブザーバビリティーの業界標準として急速に普及が進んでいます。

これら3つの柱、すなわちメトリクス、ログ、トレースを組み合わせることで、システムはより「可観測」な状態となり、運用チームはシステムの健全性を多角的に把握し、問題発生時には迅速かつ的確な対応を取ることが可能になります。

株式会社APPSWINGBYは、このようなオブザーバビリティー(可観測性)の向上を目的としたシステム改修から、AI・機械学習プラットフォームの導入、リアルタイム意思決定エンジンの開発・実装、既存システムのリファクタリングまで、お客様のハイパーパーソナライゼーション戦略を全面的にサポートし、お客様のビジネス成長に貢献いたします。

貴社システムの次世代システム運用導入やモダン化等にご興味をお持ちでしたら、ぜひAPPSWINGBYにご相談ください。お客様の状況を詳しくお伺いし、最適なソリューションをご提案いたします。

お問い合わせフォームはこちら

システム開発にお困りではありませんか?

この記事を書いた人
株式会社APPSWINGBY
株式会社APPSWINGBY マーケティング

APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。

ご支援業種

情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数

株式会社APPSWINGBY
株式会社APPSWINGBY マーケティング

APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。

ご支援業種

情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数

監修
APPSWINGBY CTO川嶋秀一
株式会社APPSWINGBY  CTO 川嶋秀一

動画系スタートアップ、東証プライム R&D部門を経験した後に2019年5月に株式会社APPSWINGBY 取締役兼CTOに就任。
Webシステム開発からアプリ開発、AI、リアーキテクチャ、リファクタリングプロジェクトを担当。C,C++,C#,JavaScript,TypeScript,Go,Python,PHP,Vue.js,React,Angular,Flutter,Ember,Backboneを中心に開発。お気に入りはGo。

APPSWINGBY CTO川嶋秀一
株式会社APPSWINGBY  CTO 川嶋秀一

動画系スタートアップ、東証プライム R&D部門を経験した後に2019年5月に株式会社APPSWINGBY 取締役兼CTOに就任。
Webシステム開発からアプリ開発、AI、リアーキテクチャ、リファクタリングプロジェクトを担当。C,C++,C#,JavaScript,TypeScript,Go,Python,PHP,Vue.js,React,Angular,Flutter,Ember,Backboneを中心に開発。お気に入りはGo。