初心者がObservabilityの世界を探索してみた：ツール調査まとめ

# はじめに
はじめまして。

私は情報システムやサービスの運用に関する研究開発を担当する部署に所属している**新人エンジニア**です。
新卒として今年からITの世界に飛び込んでみたものの、覚えるべき用語や技術が非常に多く、右往左往する毎日を過ごしています。

まずはITの用語に馴染み、研究開発に必要な知識を得るためにも、運用業務に欠かせない「**Observability**」について理解を深めることから、この冒険をスタートさせることにしました。

本記事はそんなIT知識ゼロの私が、**CNCFのLandscapeに掲載されていたObservabilityツールについて調査した**内容をまとめたものです。

まずは前提知識をおさらいし、各ツールの紹介をした後に調査して気づいたことについてまとめます。

# 前提知識が分からない...
私が先輩から「まずはCNCFのLandscapeに掲載されているObservabilityのOSSツールについて調査することから始めよう!!!」と提案を受けたとき、
「OSS？」「CNCF？？」「Observability？？？」という疑問符が頭の中を飛び交い、すでに探索を諦めそうになりました。

しかし、こんな早々と諦めるわけにはいきません。
そこで、まずは**前提となる知識**について軽く説明していこうと思います。
（そのくらい知ってるわ！という方はどうぞ読み飛ばしてください。）

## OSSって何？
Open Source Software（OSS）とは、**誰でも自由に利用、改変が可能なソフトウェア**のことです。

:::note info
有名なOSSとして、**Linux**、**Android**、**Firefox**などが挙げられます。
:::

以下にOSSの推進と定義を行う非営利団体であるOpen Source InitiativeによるOSSの定義を示します。
> オープンソースとは、単にソースコードへのアクセスを意味するのではない。 オープンソース・ソフトウェアの頒布条件は、以下の基準に準拠していなければならない： 
> 1. 再頒布の自由
> 2. ソースコード
> 3. 派生ソフトウェア
> 4. 作者のソースコードの完全性
> 5. 個人またはグループに対する差別の禁止
> 6. 利用する分野に対する差別の禁止
> 7. ライセンスの分配
> 8. 特定製品でのみ有効なライセンスの禁止
> 9. 他のソフトウェアを制限するライセンスの禁止
> 10. ライセンスは技術的に中立でなければならない
> 
> 引用元：[Open Source Initiative](https://opensource.org/osd)

## CNCFって何？
Cloud Native Computer Foundation（CNCF）とは、**クラウド環境でアプリケーションやサービスを最適に動作させるための、設計・開発・運用に関する技術（クラウドネイティブ技術）の推進を目的とした非営利団体**のことです。

https://www.cncf.io/

以下にCNCFによるクラウドネイティブの定義とメリットを示します。

### クラウドネイティブの定義
> クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、**スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします**。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
引用元：[CNCF Cloud Native Definition v1.1](https://github.com/cncf/toc/blob/main/DEFINITION.md#%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88)

### クラウドネイティブのメリット
> これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
引用元：[CNCF Cloud Native Definition v1.1](https://github.com/cncf/toc/blob/main/DEFINITION.md#%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88)

## Observabilityって何？
Observability（可観測性）とは**システムやアプリケーションの内部状態を監視し、把握する能力**のことです。

以下にCNCFによるObservabilityの定義を示します。

### オブザーバビリティの定義 

>オブザーバビリティとは、**システムが実用的な洞察をどの程度出力できるかを決める性質**のことを指します。 オブザーバビリティにより、ユーザーはシステム外部への出力を元にそのシステムの状態を理解し、(是正)措置を取ることが可能になります。
引用元：[Cloud Native Glossary](https://glossary.cncf.io/ja/observability/)

# Observabilityツールの紹介
やっとここから本題のツール紹介に入ります。しかし、CNCFのLandscapeに掲載されている**Observabilityツールは145ツールもあります**（2024年10月時点）。これだけの数があるということは、今もなお更新され続ける需要の高いツールであることが伺えます。
この145個のツールをすべて紹介することは難しいため、条件を設けてツールを絞り込みました。

::: note info
CNCFのLandscapeに掲載されているツール群は21種類存在し、その中でもObservabilityは最も掲載量の多いツール群です。
:::

**調査対象ツールの選定基準（以下いずれかを満たす）**
- 成熟度が『INCUBATING』以上
    - Jaeger
    - Prometheus
    - Fluentd
    - OpenTelemetry
    - Cortex
    - Thanos
- 他ツールとの互換性が高い
    - Elasticsearch 
    - Grafana
- 初版リリースが比較的近年（2023年以降）
    - OpenLIT
    - Keep
    - OpenObserve

**調査内容**
- 機能概要
- 最新版バージョン
- 初版リリース
- CNCFによる成熟度の分類
- 動作環境
- 公式コンテナイメージ提供の有無
- ツール開発に使用している言語とその比率
- ライセンス
- Contributor数
- GitHubリポジトリURL

**調査方法**
- WEB上（公式ホームページ等）

:::note
成熟度はCNCFの技術監査委員会に対して持続可能性を示すことで高められます。
参考情報：[CNCF Project Metrics](https://www.cncf.io/project-metrics/)
:::

:::note warn
紹介するツールはこの**ブログ執筆時点（2024/10/15）のデータ**となっています。
:::

## 1. Jaeger
Jaeger（イェーガー）は**分散システムのためのトレーサビリティプラットフォーム**です。

https://www.jaegertracing.io/

### 特徴
- 分散システムを通過するリクエストとフローをマッピング
- パフォーマンスのボトルネックの分析と特定
- 根本原因の追跡
- サービスの依存関係を分析

### ツール内で気になった用語
- **トレース**：システム内でのリクエストやプロセスの流れを追跡し、どのように処理が進んでいるかを詳細に記録するもの


| | Jaeger |
|:-: |:-:|
|開発元|UberTechnologies|
|最新版バージョン|v1.62.0（2024年10月）|
|初版リリース|2016年|
|成熟度|GRADUATED|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|GO（93.8%）|
|ライセンス|Apache-2.0|
|Contributor数|357|
|GitHubリポジトリURL|https://github.com/jaegertracing/jaeger|

### コメント
**成熟度が最も高いGRADUATED**であることから、信頼性が非常に高く多くの企業やユーザに使用されていることが伺えます。

どの部分で遅延やエラーが発生したかを特定できるため、**システム全体のパフォーマンスを向上させたいとき**に役立つと考えられます。


## 2. Prometheus
Prometheus（プロメテウス）は**メトリクスに基づく監視とアラート通知ツール**です。

https://prometheus.io/

### 特徴
- サーバーやアプリケーションからメトリクスを収集
- 収集したデータを時系列データベースに保存
- 柔軟なクエリ言語（PromQL）を使用してデータをクエリ
- しきい値を越えた場合にアラートを発行し、メール等で通知
- Grafanaなどのツールと連携してデータを可視化
- 監視対象のサーバーを動的に検出し、監視対象を自動的に追加・削除可能
- HTTPを介して監視対象からデータをプル

### ツール内で気になった用語
- **メトリクス**：システムやプロセスのパフォーマンスや状態を数値で表した指標

- **クエリ**：データベースや検索システムに対して情報を取得するためのリクエスト


| | Prometheus |
|:-: |:-:|
|開発元|SoundCloud|
|最新版バージョン|v2.54.1（2024年8月）|
|初版リリース|2012年|
|成熟度|GRADUATED|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|GO（85.1%）, TypeScript（13.6%）|
|ライセンス|Apache-2.0|
|Contributor数|949|
|GitHubリポジトリURL|https://github.com/prometheus/prometheus|

### コメント
**成熟度が最も高いGRADUATED**であることから、信頼性が非常に高く多くの企業やユーザに使用されていることが伺えます。

インフラストラクチャ（サーバーや仮想マシンなど）のCPU、メモリなどのリソース使用状況を常に確認できるため、**システムに異常が発生**した場合にすぐに気づくことができて便利だと感じました。
なお、リソース状況の見える化については、後述する「Grafana」というツールを用いることで、一目で見やすいダッシュボードを作成することができます。

何らかのソフトウェアを作成した際にも、Prometheusを使用すれば安心して運用し続けられそうですね！

## 3. Fluentd
Fluentd（フルエントディー）は**データの収集と消費を統一するデータコレクタ**です。

https://www.fluentd.org/

### 特徴
- 統一されたロギングレイヤーを間に提供、データソースとバックエンドシステムを分離
- コミュニティが機能を拡張できる柔軟なプラグインシステムを持つ
- メモリとファイルベースのバッファリング（一時保存）をサポートし、ノード間のデータ損失を防止
- 必要最低限のリソース（30~40MB）

### ツール内で気になった用語
- **ノード**：システム内の個々のコンピュータやサーバー


| | Fluentd |
|:-: |:-:|
|開発元|Tresure Data|
|最新版バージョン|v1.17.1（2024年8月）|
|初版リリース|2011年|
|成熟度|GRADUATED|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|Ruby（99.8%）|
|ライセンス|Apache-2.0|
|Contributor数|244|
|GitHubリポジトリURL|https://github.com/fluent/fluentd|

### コメント
**成熟度が最も高いGRADUATED**であることから、信頼性が非常に高く多くの企業やユーザに使用されていることが伺えます。

Fluentdは異なるサーバーやアプリケーションから生成されるログを集約し、後述するElasticsearchなどの分析ツールへ送信する役割を持っています。
そのため、Fluentdを使用する際にはElasticsearchなどの分析ツールと併用する必要がありそうです。

## 4. OpenTelemetry (collector)
OpenTelemetryは**テレメトリーデータを管理するための観測性フレームワーク**です。

https://opentelemetry.io/

### 特徴
- テレメトリーデータ（トレース、メトリクス、ログなど）のデータを収集
- 収集したデータをPrometheus、Jaegerなどの外部システムにエクスポート
- 特定のベンダーに依存せず、さまざまなツールやサービスと連携可能

| | OpenTelemetry (collector) |
|:-: |:-:|
|開発元|OpenTelemetry Project（Opentracing & OpenCensus）|
|最新版バージョン|v0.111.0（2024年10月）|
|初版リリース|2019年|
|成熟度|INCUBATING|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|Go（98.4%）|
|ライセンス|Apache-2.0|
|Contributor数|446|
|GitHubリポジトリURL|https://github.com/open-telemetry/opentelemetry-collector|

### コメント
**成熟度がINCUBATING**であることから、信頼性が高く多くの企業やユーザに使用されていることが伺えます。

OpenTelemetryはテレメトリーデータを統一的に収集し、JaegerやPrometheusなどの分析ツールへ送信するという役割を持っています。
そのため、OpenTelemetryを使用する際にはJaegerやPrometheusなどの分析ツールと併用する必要がありそうです。

## 5. Cortex
Cortexは**Prometheusのための可用性の高い長期間ストレージ**です。

https://cortexmetrics.io/

### 特徴
- クラスタ内の複数のマシンにまたがってスケーラブルに実行
- クラスタ内で実行されると、マシン間でデータを複製可能
- 1つのクラスタ内で複数の異なる独立したPrometheusソースからのデータとクエリを分離
- メトリックデータの長期ストレージとしてS3、GCS、Swift、Microsoft Azureをサポート

### ツール内で気になった用語
- **クラスタ**：複数のコンピュータやサーバーが連携して1つのシステムのように動作する構成

| | Cortex |
|:-: |:-:|
|開発元|Grafana Labs & SoundCloud|
|最新版バージョン|v1.18.0（2024年9月）|
|初版リリース|2016年|
|成熟度|INCUBATING|
|動作環境|macOS, Linux|
|公式コンテナイメージ|有り|
|開発言語|GO（99.1%）|
|ライセンス|Apache-2.0|
|Contributor数|294|
|GitHubリポジトリURL|https://github.com/cortexproject/cortex|

### コメント
**成熟度がINCUBATING**であることから、信頼性が高く多くの企業やユーザに使用されていることが伺えます。

Prometheusはデフォルトでは長期的なストレージが弱いという特徴がありますが、Cortexを使用することで長期的にデータストレージが可能になります。

## 6. Thanos
Thanos（サノス）は**Prometheusのための可用性の高い長期間ストレージ**です。

https://thanos.io/

### 特徴
- Prometheusメトリクスのクエリを可能にすることで、セットアップを拡張可能
- PrometheusのクエリAPIをサポートするGrafanaなどを使用可能
- 過去のデータをダウンサンプリングすることで大規模な時間範囲のクエリや複雑な保持ポリシーの設定時に、クエリを大幅に高速化
- メトリクスを無制限に保存（GCP、S3、Azure、Swift、Tencent COSに対応）

| | Thanos |
|:-: |:-:|
|開発元|Improbale|
|最新版バージョン|v0.36.1（2024年8月）|
|初版リリース|2017年|
|成熟度|INCUBATING|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|GO（87.2%）, TypeScript（8.0%）|
|ライセンス|Apache-2.0|
|Contributor数|624|
|GitHubリポジトリURL|https://github.com/thanos-io/thanos|

### コメント
**成熟度がINCUBATING**であることから、信頼性が高く多くの企業やユーザに使用されていることが伺えます。

「Cortex」と「Thanos」を比較すると、以下のような違いがあります。
- Cortex：マルチテナント環境でのスケーラビリティを重視
- Thanos：Prometheusとの統合が容易で、長期保存を重視

そのため、用途によって適切に選択する必要がありそうです。

## 7. Elasticsearch
Elasticsearchは**分散型の検索及び分析エンジン**です。

https://www.elastic.co/jp/

### 特徴
- AIを用いてあらゆる形やサイズのデータを迅速に検索可能
- アプリケーションのパフォーマンスとセキュリティデータを監視および分析
- ログ、メトリクス、イベントデータの保存
- アプリやウェブサイトに検索機能を追加

### ツール内で気になった用語
- **ログ**：システムやアプリケーションの動作記録

| | Elasticsearch |
|:-: |:-:|
|開発元|Elastic|
|最新版バージョン|v8.15.2（2024年10月）|
|初版リリース|2010年|
|成熟度|記載なし|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|Java（99.6％）|
|ライセンス|AGPL-3.0 license、SSPL、Elastic license 2.0|
|Contributor数|1,988|
|GitHubリポジトリURL|https://github.com/elastic/elasticsearch|

::: note warn
『**Elastic license 2.0**』に関して、ソースコードは公開されていますが、商業的な再頒布やサービスとして提供する際に制約があります。
Elasticsearchは**特定のファイルでのみElastic license 2.0が用いられている**ため、注意が必要です。
:::

### コメント
ElasticsearchはFluentdなどのログ収集ツールと**互換性**が高く、集めた大量のログデータをインデックス化、分析することが可能です。
そのため、エラー発見のためだけではなく、ユーザのアクセス状況を確認することで**システムのユーザ満足度の向上**にも役立つと考えられます。

アプリケーションやウェブサイトを公開した際には、ぜひとも導入してユーザのトレンドを把握したいですね！

## 8. Grafana
Grafanaは**モニタリング、可視化、メトリクス分析をサポートするツール**です。

https://grafana.com/

### 特徴
- 折れ線グラフや棒グラフなど様々な形式なデータの可視化
- テキスト、グラフ、表などを使ってカスタマイズ可能なダッシュボードの作成
- Prometheusなどの140種類以上のデータソースと連携可能
- システムの異常を検知した際に、メール等で通知
- 運用担当者以外も含めた全員がデータにアクセス可能

| | Grafana |
|:-: |:-:|
|開発元|Grafana Labs|
|最新版バージョン|v11.2.2（2024年10月）|
|初版リリース|2013年|
|成熟度|記載なし|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|TypeScript（57.1%）, GO（38.7%）|
|ライセンス|AGPL-3.0|
|Contributor数|2,369|
|GitHubリポジトリURL|https://github.com/grafana/grafana|

### コメント
Grafanaは可視化ダッシュボードとして、さまざまなデータソース（Jaeger、Prometheus、Elasticsearchなど）と高い**互換性**を持っています。

多種多様なデータを取得できたとしても、最終的にユーザが理解出来る形で「可視化」されてなければ意味がありません。
そのため、「可視化」に特化している**Grafanaはどのユースケースにおいても必須級のツール**だと私は感じました。

また、アラートをリアルタイムでメールなどに通知する機能は非常に有益だと感じました。
（仕事中ずっとダッシュボードを眺めてるわけにはいかないですからね...）

登録や導入なしでGrafanaを体験できるデモ版が用意されています。
軽く触ってみたい方は以下をチェックしてみてください。
参考情報：[Grafana Demo](https://play.grafana.org/d/bdnahipisghdsa/getting-started-with-grafana-play?from=now-1h&to=now&timezone=browser&refresh=)


## 9. OpenLIT
OpenLIT（オープンリット）は**Open Telemetryネイティブな生成AIアプリ観測ツール**です。

https://openlit.io/

### 特徴
- トレースとメトリクスを生成する自動計測機能を提供し、LLMとベクトルDB使用のパフォーマンスコストに関する洞察が可能
- カスタムJSONファイルを使用することで、特定モデルのコスト追跡をカスタマイズ可能
- OpenTelemetryネイティブかつベンダーニュートラルなSDK
- 一行のコードでLLMアプリケーションに結合

### ツール内で気になった用語
- **LLM（大規模言語モデル）**：大量のテキストデータを基に自然言語を理解・生成するAIモデル

- **ベクトルDB**：データをベクトルとして保存し、機械学習モデル向けの効率的な検索を行うデータベース


| | OpenLIT |
|:-: |:-:|
|開発元|OpenLIT|
|最新版バージョン|v1.9.2（2024年10月）|
|初版リリース|2024年1月|
|成熟度|記載なし|
|動作環境|-|
|公式コンテナイメージ|有り|
|開発言語|Python（68.2%）, TypeScript（31.4%）|
|ライセンス|Apache-2.0|
|Contributor数|13|
|GitHubリポジトリURL|https://github.com/openlit/openlit|

### コメント
**初版リリースが2024年**の比較的新しいツールです。

近年、生成AIはどこでも名前を聞くほどのトレンドとなっています。
そのため、**生成AIを監視するためのツール**自体もかなり需要が高いのではないだろうかと感じています。
また、導入が非常に簡単であるということも、初心者からするととてもありがたいです...！！

初版リリースが2024年1月ということもあり、触ったことのある人もかなり少ないのではないでしょうか。

## 10. Keep
Keepは**効率的にアラートを管理・自動化（AIOps）するツール**です。

https://www.keephq.dev/

### 特徴
- 単一のインターフェースですべてのアラートを管理可能
- 他のツールと統合することでアラートの重複排除と関連付けを行い、ノイズを低減
- 自動化されたアラートの充実と対応が可能

| | Keep |
|:-: |:-:|
|開発元|Keep|
|最新版バージョン|v0.25.4（2024年10月）|
|初版リリース|2023年2月|
|成熟度|記載なし|
|動作環境|-|
|公式コンテナイメージ|有り|
|開発言語|TypeScript（51.6%）, Python（47.7%）|
|ライセンス|MIT license|
|Contributor数|84|
|GitHubリポジトリURL|https://github.com/keephq/keep|

### コメント
**初版リリースが2023年**の比較的新しいツールです。

最先端のAIを駆使してアラートの相関を作成してくれるため、**根本的な原因の特定**に役立つと考えられます。
他ツールとの比較をしているページもあり、アラート相関に関してかなりの自信を持っていることが伺えます。
参考情報：[Keep-Comparison](https://docs.keephq.dev/overview/comparisons)

## 11. OpenObserve
OpenObserveは**コストを大幅に削減できる観測プラットフォーム**です。

https://openobserve.ai/

### 特徴
- ログ、メトリクス、トレースの監視を効率化
- 複数のツールを組み合わせて使う必要がない
- ストレージコストを大幅に削減（他ツールの140分の1）
- リアルタイムデータを視覚的、魅力的、効率的に表示

| | OpenObserve |
|:-: |:-:|
|開発元|OpenObserve|
|最新版バージョン|v0.12.1（2024年9月）|
|初版リリース|2023年2月|
|成熟度|記載なし|
|動作環境|macOS, Linux, Windows|
|公式コンテナイメージ|有り|
|開発言語|Rust（46.2%）, Vue（32.3%）, TypeScript（10.7%）|
|ライセンス|AGPL-3.0 license|
|Contributor数|67|
|GitHubリポジトリURL|https://github.com/openobserve/openobserve|

### コメント
**初版リリースが2024年**の比較的新しいツールです。

まるで今までのツール（Prometheus、Elasticsearch、Jaeger、Grafana）を統合したかのようなツールであり、メトリクス、ログ、トレース、ダッシュボードのための機能が備わっています。
多くの機能が一元化されることで、互換性を気にする必要のない環境構築、トレーニングコストの削減、チーム間の連携促進などが期待できます。

しかし、初版リリースが2023年であることを考慮すると、他の成熟したツール群を使いこなした方が機能面、サポート面的に優れていると考えられます。
公式曰く、ストレージコストが他ツール（Elasticsearch）と比較して140分の1にまで削減できているため、一概に他のツールに劣っているわけではないですが、「このツールさえあれば、他はいらない！！」というわけでもないのです。



# まとめ
以上の11ツールについて調査してみました。
本当はすべてのツールを調べてみたいところでしたが、時間が許してくれませんでした...。
それでも、有名なツールや最新のツールはおおむね調査できたと思います。

調査したすべてのツールに共通して言えることですが、どれも非常に興味深く、実際に導入したら便利だろうな～と率直に感じました。
**特に「OpenLIT」、「Keep」、「OpenObserve」の3つのツール**は近年リリースされたこともあり、興味を持ちました。
まだあまり知られていないツールを開拓できるなんて、ワクワクします！！

また、多くのツールはドキュメントが整っており、どのツールを導入する場合でもそれほど困ることはないと感じました。

以下に、Observabilityの分類、近年の傾向を示します。

## Observabilityの分類
Observabilityツールは大きく3種類に分けられます。下図に調査ツールの分類を示します。
これらすべての機能を包括しているツールは少なく、ユースケースに応じて**必要なツールを適切に選択し、使用することが重要**であることを学びました。

実際の業務に活用する際も、現状の問題点を洗い出した後に、適切なツールを選択できるようにしたいですね！！

![Observabilityの分類.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884298/2dfe66d1-1b86-5fc4-d82e-93f770510684.png)


## 近年の傾向
2023年以降にリリースされたツールは以下のような特徴を持ちます。
- AIを駆使して効率的に収集・管理・分析を行う
- 現在広く使用されているツールを統合したような機能をもつ
- 他ツールとの互換性が高い

世の中にObservabilityのOSSがこれほど溢れているにも関わらず、新しいツールが次々とリリースされ続けていることから、この分野は人々に必要とされ続けていると考えられます。

ぜひ、使いこなせるようになりたいですね！！

# おわりに
今回はIT初学者が**CNCFのLandscapeに掲載されているObservabilityツールについて調査**し、その概要についてまとめました。
私と同じ初学者の方や、Observabilityについてこれから触っていこうと考えている方の参考になれば幸いです。

今後は興味を持ったObservabilityツールを実際に触ってみての具体的な機能や感想、他のツール群の調査まとめを投稿する予定です。

まだまだ**Observabilityの世界は広く、深い**と感じていますが、これからも精進していきます...！！

最後までお読みいただき、ありがとうございました。