観測記録
アプリケーションの実行時に発生するあらゆる現象 (phenomenon, フェノメノン)を意味的に分類し、原因、深刻度、対応方針、関係者、技術的な文脈(トレース情報や実行環境)などとともに記録することで、ログ、監視 (Monitoring)、分析、監査、トラブル対応、アラート通知、エラー通知などに一貫して活用することができます。
SimpleModeling (シンプルモデリング)では、このような「あらゆる現象」の中で記録対象となるものを観測記録 (observation, オブザベーション)と呼びます。
SimpleModelingリファレンス・プロファイル (SMRP, SimpleModeling Reference Profile)では観測記録を記述するためのオブジェクト (Object)としてorg.simplemodeling.observation.Observationを用意しています。
目的
観測記録は医療分野では中心的なモデル要素の一つですが、モデリング一般としては汎用の共通モデルという位置付けではなかったと思います。
しかし、クラウド・アプリケーションではオブサーバビリティ機能が重要な基盤となりつつあります。また、実装技術としてログ・トレース・通知・アラート・エラーの一元的構造化を図ることのメリットは非常に大きいものがあります。
このためSimpleModelingでは、観測記録を汎用の共通モデル要素とした上で、プログラミングで用いるオブジェクトとしても実体化しました。
現象-観測記録-ドメイン・イベント
システム動作やドメインの振る舞い (Behavior)の中で発生する様々なコトを「現象」と呼びます。
その中で記録に値するものが観測記録です。
さらに観測記録のうちシステムやドメインの鍵となるものをイベント (Event)としてモデル化し、ドメイン・モデル (Domain Model)で扱うものをドメイン・イベント (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
| Name | 説明 |
|---|---|
Failure |
機能が期待通りに動作しない現象 |
Rejection |
入力や要求が受理されない現象 |
Incident |
運用中に発生した予期しない事象 |
Deviation |
基準値や仕様から外れる逸脱 |
Cause
CauseKindは現象の原因の種類を表します。
| Name | 説明 |
|---|---|
Defect |
設計や実装の不備 |
Fault |
システム内部に潜在する欠陥 |
Anomaly |
通常と異なる振る舞いや挙動 |
Root Cause |
根本的な原因 |
Severity
Severityは現象の重大度や影響範囲を示します。
| Name | 説明 |
|---|---|
Fatal |
システム全体を停止させる致命的な障害 |
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
-
The Unified Modeling Language (UML) User Guide 2nd (2005)
-
The Unified Modeling Language Reference Manual 2nd (2005)
分析パターン
-
Analysis Patterns : Elements of Reusable Object-Oriented Software (1997)
ドメイン駆動設計
-
Domain-Driven Design (DDD, ドメイン駆動設計) : Tackling Complexity in the Heart of Software (2004)
-
Implementing Domain-Driven Design (2013)
参照
用語集
- 現象 (phenomenon, フェノメノン)
-
「現象」はドメイン内で発生する様々な事象を表します。 その中で記録に値するものは観測記録として保存されます。 さらに観測記録の中で、ドメインにおいて意味を持ち対応する振る舞いを引き起こすものをドメイン・イベントとしてモデル化します。
- 監視 (Monitoring)
-
Undefined
- エラー (error)
-
汎用的な表現として用いられる用語。ソフトウェア工学では多義的に使われ、バグや障害全般を指す。SimpleModeling では広義のラベルとして使用し、個別には Mistake・Defect・Fault・Failure・Deviation に整理する。
- 観測記録 (observation, オブザベーション)
-
対象の現象を捉えて記録した結果。
- シンプルモデリング (SimpleModeling)
-
SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。
- オブジェクト (Object)
-
Objectとは、Classまたは他のClassifierによって分類され、構造、State、Behaviorを持ち得るInstanceです。Objectは、同じClassifierの他のInstanceと区別して参照できる個体として扱われます。
- SimpleModelingリファレンス・プロファイル (SMRP, SimpleModeling Reference Profile)
-
SimpleModelingのリファレンス・プロファイルです。 SimpleModelingによる文芸モデル駆動開発の説明を具体的にするために、リファレンス・プロファイルを定義しています。
- オブザーバビリティ (observability, 可観測性)
-
Observabilityは、システムやドメインの内部状態を外部からの観測を通じて推論・理解できる性質を表します。 単なるモニタリング可能性を超え、現象(Phenomenon)や観測記録(Observation)を一貫して収集・関連付け、ドメイン・イベント(Domain Event)として意味づけられることで、システムの挙動を総合的に把握できる状態を指します。
- 振る舞い (Behavior)
-
UMLにおけるBehaviorは、そのContextとなるBehaviored Classifierが時間とともにどのようにStateを変えるかを定める仕様です。可能な実行、創発する振る舞い、または特定の実行例を表せます。
- イベント (Event)
-
UMLにおけるEventは、Behaviorの実行中に発生し得る出来事を記述するものです。EventのOccurrenceを受け取ることで、StateMachineのTransitionなどのBehaviorが起動されます。
- ドメイン・イベント (Domain Event, ドメインイベント)
-
Domain Eventは、Observation(観測記録)の中でドメインに意味を持ち、対応する振る舞いや処理を引き起こすものを表します。 ドメイン・イベントはシステムや業務上の状態変化を明確にモデル化し、アプリケーション層や他システムとの連携を駆動します。
- ドメイン・モデル (Domain Model)
-
Undefined
- 逸脱 (deviation)
-
計算値や観測値が、基準値や真値から外れている状態。観測可能な量的ずれを表す。
- 障害要因 (fault, フォルト)
-
システム内部に存在する技術的な欠陥。Defect が具現化したもので、実行時に Failure を引き起こす可能性がある。IEEE 610.12 に基づく。
- 障害 (defect)
-
成果物(設計書、仕様書、コードなど)に存在する不完全さや不足。要求や仕様を満たさず、修正や置換が必要となる状態。ISO/IEC 24765 に基づく。
- コンポーネント (Component)
-
責務・契約・依存関係を明示的に定義し、再利用可能で交換可能な単位としてカプセル化されたソフトウェア構成要素。論理モデルでは抽象構造単位として、物理モデルでは実装・デプロイメント単位として扱われる。
- UML (Unified Modeling Language)
-
オブジェクト指向分析・設計のための統一モデリング言語。クラス図、シーケンス図、ユースケース図などを通じてシステム構造と動作を表現する。UPおよびCBDの基盤言語。
- ドメイン駆動設計 (DDD, Domain-Driven Design)
-
Domain-Driven Designとは、複雑な問題領域をDomain Modelによって捉え、Ubiquitous Language、Bounded Context、Aggregateなどを用いて、業務上の意味とソフトウェア設計を接続するための原則、パターン、プラクティスの集合です。