イベント追跡

イベント追跡を使用すると、特定のフローによって処理されているメッセージに関するリアルタイムの情報を表示できます。処理前、処理中、処理後のメッセージペイロードを表示できるのに加えて、フロー内のメッセージプロセッサーやメッセージメタデータに関する情報も表示できます。

イベント追跡を使用することで、Mule サーバー上でのビジネストランザクションやイベントを表示することができ、特定のメッセージのフローと処理を追跡して分析できます。たとえば、このデータを使用して、ビジネストランザクション内の障害の根本原因分析を実行したり、メッセージ処理のボトルネックを特定したりできます。

通知種別

Mule Runtime Engine は、フローコンポーネントの実行に関する情報を通知します。 「Mule イベント」​を参照してください。

Mule が提供する通知の種別については、​「通知インターフェース」​を参照してください。

転送イベント情報

各通知について、Runtime Manager エージェントは、次の情報をイベント追跡サービスに転送します。

  • timestamp

    イベントのタイムスタンプ

  • notificationType

    イベント種別 (メッセージプロセッサーイベント、インバウンドエンドポイントイベントなど)

  • action

    イベントアクション (開始、終了、完了、ロールバックなど)

  • resourceIdentifier

    フローの名前

  • muleMessage

    (設定されている場合) シリアル化された Mule メッセージまたはエラーメッセージ。

Runtime Manager エージェントは、次の情報は送信しません。

  • Mule Message ID (Mule メッセージ ID)

  • Exception (例外)

    例外が発生した場合のメッセージとスタック追跡

  • Path (パス)

    コンポーネントの Mule パス

  • Annotations (アノテーション)

    コンポーネントのアノテーション (ある場合)

  • Application (アプリケーション)

イベント追跡通知

Runtime Manager エージェントは、Mule アプリケーションのイベント追跡通知を保存して、イベント追跡サービスにストリーミングします。ネットワークトポロジーと Mule アプリケーションのデザインによっては、イベント追跡通知を Runtime Manager エージェントからオンラインイベント追跡サービスにネットワーク経由でコピーすると、パフォーマンスに大きな影響が出る場合があります。

追跡レベルの粒度を変更することで、パフォーマンスへの影響を抑えることができます。グローバルイベント追跡レベルを指定してから、指定した Mule アプリケーションでレベルを変更できます。さらに Mule アプリケーション内の特定のフローでもイベント追跡レベルを変更できます。

イベント追跡レベルのほかにも、メッセージ再生機能ですべてのメッセージを保存して後で再生できます。これは、メッセージ処理の重複につながる可能性もありますが、再生機能が提供するメカニズムによって、運用チームは失敗したトランザクションを復元して再生できます。追跡レベルと同じように、再生レベルはグローバルに設定しておいて、特定の Mule アプリケーションでレベルを上書きしたり、Mule アプリケーション内の特定のフローで上書きしたりできます。

イベント追跡レベル

使用できるイベント追跡レベルは次のとおりです。

  • None

    デバッグを行わないように指定します。

  • BE

    ビジネスイベントに関連するイベントのみが追跡されます。

  • Tracking

    BE​ レベルに加えて、エンドポイント、例外戦略、トランザクション関連の通知を追跡します。

  • Debug​ +​Tracking​ レベルに加えて、追加コンポーネントとメッセージプロセッサー通知を指定します。

    イベント追跡を ​Debug​ に設定するとパフォーマンスが低下することがあるため、この追跡レベルはデバッグ時にのみ使用してください。

次の表は、各デバッグレベルでアクティブな通知の種別を示しています。

Mule 種別は、通知種別を定義する (​org.mule.context.notification​ パッケージにある) ​org.mule.api.context.notification.ServerNotification​ サブクラスです。

通知 Mule 種別 None (なし) BE (ビジネスイベント) Tracking (追跡) Debug (デバッグ)

Pipeline Message (パイプラインメッセージ)

PipelineMessageNotifications

Async Message (非同期メッセージ)

AsyncMessageNotifications

例外

ExceptionStrategyNotifications

Event (イベント)

EventNotifications

Exception Strategy (例外戦略)

ExceptionStrategyNotifications

Transaction (トランザクション)

TransactionNotifications

Endpoint Message (エンドポイントメッセージ)

EndpointMessageNotifications

Message Processor (メッセージプロセッサー)

MessageProcessorNotification

Component Message (コンポーネントメッセージ)

ComponentMessageNotifications

イベント追跡の設定

すべてのアプリケーション (グローバル)、単一のアプリケーション、またはフローに対して追跡レベルを設定できます。

  • Global (グローバル)

    Mule Runtime Engine にデプロイされているすべてのアプリケーションとそれらのフローの追跡方法を指定します。

  • App (アプリケーション)

    特定のアプリケーションのグローバル追跡レベルを上書きします。

  • Flow (フロー)

    特定のフローのグローバルまたはアプリケーション追跡レベルを上書きします。

mule-agent.yml でのイベント追跡の設定

イベント追跡は ​mule-agent.yml​ で設定できます。

すべての Mule アプリケーションに対するイベント追跡のグローバル設定

Mule Runtime Engine にデプロイされているすべてのアプリケーションとそれらのフローの追跡方法を指定します。追跡レベルは ​mule-agent.yml​ ファイルの ​services/mule.agent.tracking.service​ セクションで設定します。

次の例では、グローバル追跡レベルを ​TRACKING​ に設定しています。追跡レベルの説明は、「​イベント追跡レベル​」を参照してください。

mule-agent.yml​ 内で次のように設定します。

services:
 mule.agent.tracking.service:
 globalTrackingLevel: TRACKING

Mule アプリケーションに対する追跡の設定

Mule アプリケーションの追跡レベルを設定することで、そのアプリケーションにおいてグローバル追跡設定を上書きできます。

Mule アプリケーションの追跡プロパティは、​trackingLevel​、​replayLevel​、​trackedFlows​ です。

  • trackingLevel

    NONE​、​BE​、​TRACKING​、または ​DEBUG​ のいずれかの追跡レベルを指定します。この追跡レベルは、Mule アプリケーションのすべてのフローに影響します。「​イベント追跡レベル​」を参照してください。

  • replayLevel​'

    Mule アプリケーションのすべてのフローで、各メッセージを後で再生できるように保存する方法を指定します。​NONE​、​SOURCED​、または ​ALL​ を指定できます。

再生レベルオプション 説明

NONE

メッセージの再生に関するデータを保存せず、これらのフローに対して再生機能を無効にします。

SOURCED

Mule アプリケーション内の、メッセージソースで始まる各フローのメッセージのみを後で再生するために保存します。

ALL

Mule アプリケーションのすべてのフローのメッセージを再生用に保存します。

次の例では、​mule-flights​ アプリケーションとそのフローの追跡レベルを ​TRACKING​ に設定し、メッセージ再生機能を無効にしています。​mule-flights​ アプリケーションは、一部の通知をイベント追跡サービスに送信しますが、受信した各メッセージはコピーしません。​mule-flights​ アプリケーションのフローは、いずれもイベント追跡サービスから再生することはできません。

次の例でも ​globalTrackingLevel​ を ​BE​ に設定しており、デフォルト値の ​NONE​ を上書きしています。この設定により、他の Mule アプリケーションも ​BE​ レベルで追跡されます。

mule-agent.yml​ 内で次のように設定します。

services:
 mule.agent.tracking.service:
 globalTrackingLevel: BE
 trackedApplications:
    - appName: mule-flights
      trackingLevel: TRACKING
      replayLevel: NONE

Mule アプリケーションのフローに対する追跡の設定

trackedFlows​ 要素を追加することにより、指定した Mule アプリケーション内でフローのグローバルおよびアプリケーション設定を上書きできます。この要素は、フローで追跡する対象と、メッセージ再生の動作を指定します。

フロー追跡オプションを下表に示します。

フロー追跡オプション 説明

flow name

Mule アプリケーション XML 設定ファイルで指定されているフローの名前。

tracking level

NONE​、​BE​、​TRACKING​、または ​DEBUG​ を指定します。「​イベント追跡レベル​」を参照してください。

replayLevel

NONE​、​SOURCED​、または ​ALL​ を指定します。​再生レベル​のテーブルを参照してください。

payloadExcluded

メッセージペイロードも後で再生するために保存するか、メッセージメタデータのみを保存するかを指定します (​replayLevel​ が ​SOURCED​ または ​ALL​ の場合)。

次の例では、​mule-flights​ アプリケーションのフローに追跡を追加しています。グローバルおよび Mule アプリケーション追跡には、デフォルト値 (​NONE​) を使用しています。

mule-agent.yml​ 内で次のように設定します。

services:
  mule.agent.tracking.service:
    trackedApplications:
      - appName: mule-flights
        trackedFlows:
          - flowName: purchaseFlight
            trackingLevel: DEBUG
            replayLevel: ALL

複雑な追跡例

次の例では、グローバル、Mule アプリケーション、およびフローの追跡レベルを設定しています。

グローバル:

  • globalTrackingLevel​ を ​NONE​ (​globalTrackingLevel​ を指定しなかった場合のデフォルト) に設定します。

アプリケーション ​mule-flights​:

  • trackingLevel: アプリケーションに対して ​TRACKING​ レベルを設定します。

  • replayLevel: アプリケーションに対して ​NONE​ を設定します。メッセージは保存されず、再生は無効です。

    • フロー ​purchaseFlight

      • trackingLevel: この 1 つのフローに対して ​DEBUG​ (デバッグ) レベル (​TRACKING​ (追跡) レベルを上書き)。

      • replayLevel: この 1 つのフローに対して ​ALL​ を設定します。フローにメッセージソースがない場合でも、すべてのメッセージを再生用に保存します。

アプリケーション ​mule-ticketing​:

  • trackingLevel: アプリケーションに対して ​BE​ を設定します。

  • replayLevel: アプリケーションに対して ​SOURCE​ を設定します。メッセージは保存されず、再生は無効です。

    • フロー ​confirmReservation

      • trackingLevel: この 1 つのフローに対して ​DEBUG​ (デバッグ) レベル (​TRACKING​ (追跡) レベルを上書き)。

      • replayLevel: この 1 つのフローに対して ​ALL​。フローにメッセージソースがない場合でも、すべてのメッセージを再生用に保存します。

Mule インスタンス内のその他のすべてのアプリケーションとそのフロー:

  • trackingLevel: NONE​ (デフォルト)

mule-agent.yml​ 内で次のように設定します。

services:
  mule.agent.tracking.service:
    globalTrackingLevel: NONE
    trackedApplications:
      - appName: mule-flights
        trackingLevel: TRACKING
        replayLevel: NONE
        trackedFlows:
          - flowName: purchaseFlight
            trackingLevel: DEBUG
            replayLevel: ALL
          - flowName: help
            trackingLevel: NONE
            replayLevel: NONE
      - appName: mule-ticketing
        trackingLevel: BE
        replayLevel: SOURCE
        trackedFlows:
          - flowName: confirmReservation
            trackingLevel: DEBUG
            replayLevel: ALL

エージェント API を使用した実行中の追跡の設定

エージェント API を使用すると、実行中にエージェント追跡設定を変更できます。たとえば、API を使用して実行中のアプリケーションの追跡設定を変更できます。

現在の設定の取得

次の例では、追跡サービスに関する情報を取得しています。取得される情報には、設定可能な項目とその現在の値が含まれています。

要求:

GET <Runtime Manager Agent URL>/mule/agent/mule.agent.tracking.service

応答:

"configurableFields": [
    {
      "name": "globalTrackingLevel",
      "valueType": "com.mulesoft.agent.services.tracking.TrackingLevel",
      "value": "NONE",
      "configurableType": "DYNAMIC",
      "description": ""
    },
    {
      "name": "trackedApplications",
      "valueType": "[Lcom.mulesoft.agent.services.tracking.TrackedApplication;",
      "value": [],
      "configurableType": "DYNAMIC",
      "description": ""
    }
  ],
  "injectedHandlers": [
    {
      "name": "com.mulesoft.agent.handlers.internal.InternalTrackingNotificationHandler",
      "path": "/mule/agent/tracking.notification.internal.message.handler/configuration",
      "type": "class com.mulesoft.agent.domain.tracking.AgentTrackingNotification"
    }
  ],
  "serviceHandlerTypes": [
    "class com.mulesoft.agent.domain.tracking.AgentTrackingNotification"
  ]
}

現在の設定の変更

実行中に現在の設定を変更するには、変更した設定の JSON 表現を使用して要求を送信します。この表現は、現在の設定を上書きします。JSON 表現に含まれていない項目では、現在の値が保持されます。

次の例では、​globalTrackingLevel​ 項目と ​trackedApplications​ 項目の上書きを要求します。他のすべての項目は変更されません。

要求:

PATCH <Runtime Manager Agent URL>/mule/agent/mule.agent.tracking.service HTTP/1.1

{
  "globalTrackingLevel": "BE",
  "trackedApplications": [
  {
    "appName": "mule-flights",
    "trackingLevel": "DEBUG",
    "trackedFlows": [
    {
      "flowName": "purchaseFlight",
      "trackingLevel": "TRACKING"
    }
    ]
  }
  ]
}

応答:

{
  "configurableFields": [
  {
    "name": "globalTrackingLevel",
    "valueType": "com.mulesoft.agent.services.tracking.TrackingLevel",
    "value": "BE",
    "configurableType": "DYNAMIC",
    "description": ""
    },
    {
      "name": "trackedApplications",
      "valueType": "[Lcom.mulesoft.agent.services.tracking.TrackedApplication;",
      "value": [
      {
        "appName": "mule-flights",
        "trackingLevel": "DEBUG",
        "trackedFlows": [
        {
          "flowName": "purchaseFlight",
          "trackingLevel": "TRACKING"
        }
        ]
      }
      ],
      "configurableType": "DYNAMIC",
      "description": ""
    }
    ],
    "injectedHandlers": [
    {
      "name": "com.mulesoft.agent.handlers.internal.InternalTrackingNotificationHandler",
      "path": "/mule/agent/tracking.notification.internal.message.handler/configuration",
      "type": "class com.mulesoft.agent.domain.tracking.AgentTrackingNotification"
    }
    ],
    "serviceHandlerTypes": [
    "class com.mulesoft.agent.domain.tracking.AgentTrackingNotification"
    ]
  }
イベント追跡ログファイル (​$MULE_HOME/logs/events-%d{yyyy-dd-MM}-%i.log​) は自動的には削除されません。定期的に手動でログを削除する必要があります。