観測記録

アプリケーションの実行時に発生するあらゆる現象 (phenomenon, フェノメノン)を意味的に分類し、原因、深刻度、対応方針、関係者、技術的な文脈(トレース情報や実行環境)などとともに記録することで、ログ、監視、分析、監査、トラブル対応、アラート通知、エラー (error)通知などに一貫して活用することができます。

SimpleModelingでは、このような「あらゆる現象」の中で記録対象となるものを観測記録 (observation, オブザベーション)と呼びます。

SimpleModelingリファレンス・プロファイル (SMRP, SimpleModeling Reference Profile)では観測記録を記述するためのオブジェクトとしてorg.simplemodeling.observation.Observationを用意しています。

目的

観測記録は医療分野では中心的なモデル要素の一つですが、モデリング一般としては汎用の共通モデルという位置付けではなかったと思います。

しかし、クラウド・アプリケーションではオブサーバビリティ機能が重要な基盤となりつつあります。また、実装技術としてログ・トレース・通知・アラート・エラーの一元的構造化を図ることのメリットは非常に大きいものがあります。

このためSimpleModelingでは、観測記録を汎用の共通モデル要素とした上で、プログラミングで用いるオブジェクトとしても実体化しました。

現象-観測記録-ドメイン・イベント

システム動作やドメインの振る舞いの中で発生する様々なコトを「現象」と呼びます。

その中で記録に値するものが観測記録です。

さらに観測記録のうちシステムやドメインの鍵となるものをイベントとしてモデル化し、ドメイン・モデルで扱うものをドメイン・イベント (Domain Event, ドメインイベント)と呼びます。

SimpleModelingでは「現象観測記録ドメイン・イベント」の階層を明確に区別します。

構成要素

SMRPで導入されるorg.simplemodeling.observation.Observationオブジェクトの構成を説明します。

Observationオブジェクトは次の属性群で定義されます。

  • 意味的情報

  • 関係対象

  • トレース情報

  • 付加情報

意味的情報

意味的情報は、観測した現象を記述する属性群で定義されます。

phenomenon

Observed event or phenomenon観測された出来事や現象(例:Timeout, Failure)

cause

原因(例:ValidationError, NullPointer)

  • 深刻度(例:INFO, WARN, ERROR, FATAL)

strategy

対応方針(例:Recoverable, Retriable, Escalatable)

handler

対応すべき責任主体(例:EndUser, Developer)

Phenomenon

Phenomenonはシステムやドメインで観測される現象の種類です。エラーや不具合の兆候を表します。

Name 説明

Failure

機能が期待通りに動作しない現象

Rejection

入力や要求が受理されない現象

Incident

運用中に発生した予期しない事象

Deviation

基準値や仕様から外れる逸脱

Cause

CauseKindは現象の原因の種類を表します。

Name 説明

Defect

設計や実装の不備

Fault

システム内部に潜在する欠陥

Anomaly

通常と異なる振る舞いや挙動

Root Cause

根本的な原因

Severity

Severityは現象の重大度や影響範囲を示します。

Name 説明

Fatal

システム全体を停止させる致命的な障害 (defect)

Error

機能の一部が利用できなくなる障害

Warn

異常の兆候があるが継続可能

Info

参考情報や軽微な事象

Debug (バグ)

開発・調査のための詳細情報

Trace

システム動作を逐次記録した低レベル情報

Strategy

Strategyは現象が発生した際の対応方針を示します。

Name 説明

Manual

人手による介入が必要

Recoverable

自動回復が可能

Retriable

再試行により回復が期待できる

Escalatable

上位レベルの担当者やシステムに引き継ぐ

Alert

監視や通知を発する

Ignored

無視しても支障がない

Handler

Handlerは現象の対応を担う主体の分類です。

Name 説明

EndUser

利用者自身が対処する事象

ApplicationAdmin

アプリケーションの管理者が対処する事象

SystemAdmin

システム基盤の管理者が対処する事象

Developer

開発者による修正が必要な事象

関係対象

関係対象は、現象に関連する主体やリソースを示す属性群で定義されます。

項目 説明

subject

実行者(例:ユーザー、APIクライアント)

object

対象となったリソース(例:注文データ、ファイル)

component

処理を実行したコンポーネント(例:OrderService)

location

実行場所や環境(例:k8sノード、リージョンなど)

トレース情報

トレース情報は、分散トレーシングなどの外部オブザーバビリティ機能と連携する属性群で定義されます。

項目 説明

traceId

リクエスト全体のトレースID(分散トレーシング対応)

spanId

個々の処理単位を表すスパンID

付加情報

付加情報は、観測記録に補足的な内容を与える属性群で定義されます。

項目 説明

timestamp

観測された時刻

message

人間に読ませるエラーメッセージ(国際化対応)

exception

実際に発生した例外(可能なら)

properties

任意の補足情報(キー/値形式)

関連技術

観測記録は医療分野などの応用で分析パターンとして取り上げられてきましたが、観測記録ドメイン・イベントといった概念が広く注目されるようになったのは2010年代中盤以降と考えられます。背景にはクラウド・アプリケーションの要請が大きく影響しています。

SimpleModelingでは、現象観測記録ドメイン・イベントのモデリング技術とオブザーバビリティを統合するアプローチを採用していますが、現時点では独自の取り組みといえるかもしれません。

UML

UMLでは現象観測記録の概念は定義されていません。イベントは動的モデルの動作メカニズムを構成する部品として定義されています。

分析パターン

  • Analysis Patterns : Elements of Reusable Object-Oriented Software (1997)

分析パターンでは、分析モデルにおけるパターンの一つとして現象観測記録が詳しく記述されています。イベントについては顕著な定義は見られません。

ドメイン駆動設計

  • Domain-Driven Design : Tackling Complexity in the Heart of Software (2004)

  • Implementing Domain-Driven Design (2013)

DDDは静的モデルを中心としており、観測記録に関する言及はありません。また、初期のDDDではドメイン・イベントの概念も導入されていません。

IDDDでは観測記録への言及はないものの、ドメイン・イベントが主要な構成要素として導入されています。

ソフトウェア・アーキテクチャ

  • Patterns of Enterprise Application Architecture (2003)

  • Enterprise Integration Patterns (2004)

  • Clean Architecture (2017)

これらのソフトウェア・アーキテクチャ関連の文献では、現象観測記録ドメイン・イベントといった概念は登場しません。

オブザーバビリティ

  • Observability Engineering: Achieving Production Excellence (2022)

オブザーバビリティに関する代表的な文献の一つです。分散アプリケーションにおけるログ・トレース・メトリクスの統合が中心テーマですが、観測記録のモデリングやドメイン・イベントとの連続性はスコープ外となっています。