CNCFにおけるObservability
AI駆動開発では、SecurityやObservabilityのような非機能要件をどのように成立させるのかが大きな論点になります。
Observabilityだけを考えても、分散トレース、メトリクス、構造化診断、Payload保護、外部監視基盤連携など、多数の横断的機能が必要になります。
これらを毎回AIへ自然文で指示し、個別実装へ委譲すると、生成コスト・レビューコスト・運用コストが急速に増大し、品質保証も不安定になります。
そのためCML&CNCFでは、文芸モデル (literate model)へ十分な構造情報を記述すると、モデルコンパイラと実行フレームワークがSecurityやObservabilityを横断的に成立させます。
AI駆動開発でRuntime Supportが必要になる理由
理論上は、SecurityやObservabilityのような非機能要件も、すべてをプロンプト (Prompt)や仕様書へ記述することは可能かもしれません。
しかし現実には、Observabilityだけを考えても、分散トレース、メトリクス、構造化診断、相関ID、Payload保護、機密情報マスキング、外部監視基盤との接続など、多数の横断的機能が必要になります。
これらを毎回AIへ自然文で指示し、個別実装へ委譲すると、実装複雑度と運用複雑度は急速に増加します。
なぜAI駆動開発で問題が増幅されるのか
さらに問題になるのは、生成AIの利用コストです。
SecurityやObservabilityのような横断的品質属性を毎回プロンプトや仕様書で詳細に指示しようとすると、要求仕様は急速に肥大化します。
さらに、Trace、Metrics、Correlation、Payload Protection、Redaction、Export、Retry、Backend Integrationなどの要素が相互作用し始めると、実装複雑度と運用複雑度は実質的に指数関数的に増加します。
その結果、生成AIへ与えるコンテキスト量も急増し、生成コスト・レビューコスト・再生成コストが大きく膨らみます。
しかも、生成AIは理解できない要求や複雑すぎる要求に遭遇すると、簡単に省略・単純化・見落としを行います。
そのため、すべてをプロンプトや仕様書へ押し込む方式では、品質保証そのものが不安定になります。
CNCFにおけるObservability
CNCFでは、CNCF内で自動的にObservability情報を採取すると同時に、ダッシュボードを含めたObservabilityの運用環境を用意しています。
ただし、CNCFを含めたシステム全体でのObservabilityを考えた場合、各システムの出力するObservability情報を集約して運用管理する機能が必要です。
CNCFでは、この目的で業界標準となっているOpenTelemetryとの連携をサポートしています。
CNCF内部では、以下のような構造化実行情報が保持されます。
-
CallTree
-
Action / UoW / Space / I/O実行情報
-
構造化診断情報
-
Conclusion詳細コード
-
previous-chainによるエラー連鎖
-
Payloadサマリ・参照情報
-
Runtime Metrics Snapshot
-
Job / Task / Saga文脈
OpenTelemetryと連携することにより、システム全体のObservability情報と統合した形で、CNCFが採取するObservability情報を、JaegerやPrometheus、Grafanaといった専用ツールで参照することができるようになります。
最小Jaeger構成による検証
CNCFでのObservabilityの実例をチュートリアルを例に説明します。
以下の場所に格納されているチュートリアルを使用します。
展開後の以下のディレクトリにサンプルコードが入っています。
-
samples/13-observability-jaeger
このサンプルは、「最小構成でTrace Exportできるか」を確認するためのものです。
構成:
-
Jaeger all-in-one
-
OTLP HTTP
CNCFは直接JaegerへTraceを送信します。
起動
JaegerとCNCFの起動は、用意されているスクリプトを使います。
$ bash start-jaeger.sh
$ bash run-server.sh
オペレーションの実行は以下のように行います。
オペレーションを実行することで、Observabilityの結果がJaegerに通知され参照可能になります。
$ cncf client minimal.main.hello --baseurl http://127.0.0.1:19613
Hello CNCF
最初に確認するもの
CNCF自身もObservability機能を持っています。
まず、CNCF自身のObservability機能を使って、オペレーションの実行結果を確認しましょう。
確認順序は以下の通りです。
-
CNCF Observability UI observability
-
Jaeger UI http://127.0.0.1:16686
Observability Stack Lab構成
前述の例はObservability機能側は最小構成のJaegerのみでした。
次はOpenTelemetry Collector, Jaeger, Prometheus, Grafanaを使った本格構成です。
製品版でも適用できる構成になっています。
ZIPファイル展開後の以下のディレクトリにサンプルコードが入っています。
-
samples/13.a-observability-stack-lab
こちらは、Collector中心の標準Observability構成です。
-
-
CNCF本体
-
-
OpenTelemetry Collector
-
Observabilityデータの収集・変換・配送を行う中継コンポーネントです。
-
-
Jaeger
-
分散トレースを保存・検索・可視化するためのシステムです。
-
-
Prometheus
-
時系列メトリクスを収集・保存・検索するための監視システムです。
-
-
Grafana
-
PrometheusやJaegerなどのデータを統合的に可視化するDashboard/Query Frontendです。
-
Observabilityのシステム構成を以下に示します。
CNCFはOpenTelemetry CollectorにObservabilityの情報を渡すと、JaegerやPrometheusに情報が伝搬されます。
さらにGrafanaはJaegerとPrometheusから情報を取得し、ダッシュボードとして可視化します。
起動
システムを以下のように起動します。
$ bash start-stack.sh
$ bash run-server.sh
Observabilityで観測する情報を以下のようにして作ります。
$ bash run-operation.sh
$ bash export-metrics.sh
確認順序
確認順序は以下の通りです。
Prometheusで確認すること
Prometheusは以下のURLでアクセスしてください。
確認用PromQLは以下のものを使ってください。
cncf_web_request_requests_count
cncf_action_execution_executions_count
ここでは、CNCF Runtime MetricsがCollector経由でPrometheusへ流れていることを確認します。
Grafanaで確認すること
Grafanaは以下のURLでアクセスしてください。
以下のアカウントでログインすることができます。
admin / admin
Grafanaは、運用者向けDashboard/Query Frontendとして扱います。
以下の情報を確認することができます。
-
Prometheus datasource
-
CNCF metrics series
-
Jaeger datasource
-
Trace検索
まとめ
AI駆動開発では、SecurityやObservabilityのような横断的品質属性を毎回プロンプトや仕様書へ詳細に記述し続けることは現実的ではありません。
要求仕様が肥大化すると、生成AIへ与えるコンテキスト量・生成コスト・レビューコスト・再生成コストが急速に増大し、品質保証そのものも不安定になります。
さらに、生成AIは複雑すぎる要求や理解できない要求に遭遇すると、省略・単純化・見落としを行いやすくなります。
そのためCML&CNCFでは、SecurityやObservabilityをアプリケーションコードへ委譲するのではなく、モデルコンパイラと実行フレームワークによるRuntime Capabilityとして吸収します。
今回のサンプルでは、Jaeger単体構成からCollector中心構成までを通じて、CNCF RuntimeがObservabilityをどのように統合的に実現するのかを確認しました。
参照
用語集
- オブザーバビリティ (observability, 可観測性)
-
Observabilityは、システムやドメインの内部状態を外部からの観測を通じて推論・理解できる性質を表します。 単なるモニタリング可能性を超え、現象(Phenomenon)や観測記録(Observation)を一貫して収集・関連付け、ドメイン・イベント(Domain Event)として意味づけられることで、システムの挙動を総合的に把握できる状態を指します。
- CML (Cozy Modeling Language)
-
CMLは、Cozyモデルを記述するための文芸モデル記述言語です。 SimpleModelingにおける分析モデルの中核を担うDSL(ドメイン固有言語)として設計されています。 モデル要素とその関係性を自然言語に近い文体で記述できるよう工夫されており、AIによる支援や自動生成との高い親和性を備えています。 CMLで記述された文芸モデルは、設計モデル、プログラムコード、技術文書などに変換可能な中間表現として機能します。
- Cloud Native Component Framework (CNCF)
-
Cloud Native Component Framework(CNCF)は、クラウド・アプリケーションを構成するコンポーネントを、単一かつ一貫した実行モデルで実行するためのフレームワークです。 Component / Service / Operation という構造を中核とし、command、server(REST / OpenAPI)、client、script といった異なる実行形態から、同一の Operation を再利用できることを特徴とします。 ログ、エラー処理、設定、配備といったクラウド・アプリケーションに必要な品質属性をフレームワーク側に集約することで、コンポーネントはドメイン・ロジックの実装に集中できます。 CNCF は、文芸モデル駆動開発および AI 支援開発を前提に、「何を実行するか」と「どのように呼び出すか」を分離するための実行基盤として設計されています。
- 文芸モデル (literate model)
-
文芸モデル(Literate Model)は、モデル構造と自然言語による語り(構造化文書)を統合した「読めるモデル」です。 文芸的プログラミング(Literate Programming)の思想をモデリング領域に拡張し、 構造(モデル)+語り(構造化文書) を一体化することで、人間とAIの双方が理解・操作できる知識表現を実現します。 「Literate Modeling(文芸的モデリング)」という発想自体は、 これまでにも一部の研究者や開発者によって試みられてきました。 しかし、それらは主にドキュメント生成やコード理解の支援にとどまっており、 モデルと言語・語り・AI支援を統合した体系的なモデリング手法として確立されたものではありません。 文芸モデル(Literate Model)は、SimpleModelingがAI時代に向けて新たに体系化・提唱したモデリング概念です。 文芸的モデリングの思想を継承しつつ、 AI協調型の知識循環とモデル生成を可能にする知的モデリング基盤として再構成されています。 文芸モデルは、単なるモデル記述技法ではなく、 人間の思考過程や設計意図を語りとしてモデルに埋め込み、 AIがそれを解析・再構成して設計や生成を支援するための枠組みです。
- プロンプト (Prompt)
-
RAGによって取得された知識を、AIモデルの推論プロセスに橋渡しするための構造化指示または文脈表現。 BoKに格納された構造化知識を、モデルが理解し行動・内化できる物語的/命令的形式に変換する。
- 仕様確認 (verification)
-
Verification(仕様確認)とは、規定された設計仕様や要求仕様に対して、実装が一致しているかを確認する行為である。