サードパーティサービスの Flex Gateway ログ出力の設定

Anypoint Flex Gatewa を使用すると、サポートされている Fluent Bit v2.0 出力種別にランタイムとアクセスログを配信できます。カスタム YAML ファイルを介してログ出力を設定します。さらに、アクセスログを表示するには、メッセージログポリシーも適用する必要があります。

次の設定ファイルの例は、Flex Gateway ログを出力種別 (​File​、​HTTP​、および ​Splunk​) に送信する方法を示しています。ただし、​Azure Log Analytics​、​Amazon S3​、​Kafka​ など、任意の Fluent Bit v2.0 出力種別を使用できます。Fluent Bit 出力種別の完全なリストについては、 Fluent Bit 出力のドキュメント​を参照してください。

追加の Fluent Bit ログ出力種別を設定できるだけでなく、Flex Gateway はランタイムログを Runtime Manager に送信し、アクセスログを API Manager に送信します。追加のログ出力が必要ない場合は、ログを簡単なログチェックに使用します。ランタイムログを表示するには、​Anypoint Monitoring でのログの表示, and to configure and view access logs, see 接続モードでの Flex Gateway のメッセージログの設定​を参照してください。​[Logs (ログ)]​ にアクセスログを表示するには、さらにメッセージログポリシーを適用する必要があります。

20%

25%

20%

始める前に

Flex Gateway ログ出力を設定する前に、次のタスクを完了します。

さらに、出力に応じて、ログの送信先のサービスが動作していて、必要な情報が揃っていることを確認します。

  • Splunk:

    • 実行中の Splunk​ サービス。無料の Splunk Cloud トライアルを使用して Splunk をテストできます。

    • Cloud または Enterprise Splunk サービスに HTTP イベントコレクター (HEC) データ入力を追加済み。データ入力を追加する方法と HEC トークンを作成する方法については、 Splunk ドキュメント​ を参照してください。

  • Dynatrace:

    • 実行中の Dynatrace​ サービス。無料の Dynatrace トライアルを使用して Dynatrace をテストできます。

    • 環境 ID。Dynatrace 環境 ID の見つけ方については、 「環境 ID」​を参照してください。

    • アクセストークン。Dynatrace アクセストークンを生成するには、 「アクセストークン」​を参照してください。トークンに ​Ingest logs​ トークンスコープがあることを確認します。

ランタイムログとアクセスログ

ランタイムログとアクセスログの両方は、同じログ出力に表示されます。ただし、両方のログをログ出力に含めるかどうかを選択できます。アクセスログを使用するには、メッセージログポリシーも適用する必要があります。

ランタイムログ

ランタイムログには、次の情報が含まれます。

  • Flex Gateway、Fluent Bit、および Envoy の起動とシャットダウン

  • デプロイされた API とポリシー

  • Flex Gateway の設定ミスの可能性またはその他のエラー

アクセスログ

アクセスログには、一定期間の Envoy との受信インタラクション、および特定の API に対する受信要求と応答が示されます。

アクセスログを有効にするには、監視する API インスタンスにメッセージログポリシーを適用する必要があります。メッセージログポリシーを適用するには、​「アクセスログの設定」​を参照してください。

ログ設定ファイル

logging​ オブジェクトは、メッセージログポリシーを介してランタイムおよびアクセスログの配信を設定します。ログは、サポートされている Fluent Bit v2.0 出力に配信されます。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
  name: <value>
  namespace: <namespace name>
spec:
  logging:
    outputs:
    - name: <output-name>
      type: <output-type>
      parameters:
        <param-name>: <param-value>
    runtimeLogs:
      logLevel: <value>
      outputs: <value>
    accessLogs:
      outputs: <value>
パラメーター 必須または省略可能 デフォルト値 説明

logging.outputs[#].name

必須

なし

後でランタイムとアクセスログの設定で参照する、この出力の名前。

logging.outputs[#].type

必須

なし

Fluent Bit でサポートされる出力種別。Fluent Bit 出力種別については、 Fluent Bit 出力のドキュメント​ を参照してください。

logging.outputs[#].parameters

必須

なし

特定の Fluent Bit 出力種別のパラメーターのマップ。Fluent Bit 出力種別のパラメーターについては、 Fluent Bit 出力のドキュメント​ を参照してください。

logging.accessLogs.outputs

省略可能

アクセスログをリダイレクトする出力名のリスト。

logging.runtimeLogs.logLevel

省略可能

info

ログの詳細を指定するパラメーター。サポートされる ​logLevel​ の種別は冗長レベルの高い順にリストされており、​debug​、​info​、​warn​、​error​、​fatal​ です。

logging.runtimeLogs.outputs

省略可能

ランタイムログをリダイレクトする出力名のリスト。

値を空白のままにすると、デフォルト値が設定に適用されます。

上記のパラメーターに加えて、Flex Gateway にはログ出力用の変数が用意されています。設定されている場合、変数はログ内のそれぞれの出力の 1 つとして表示されます。

変数 説明 出力

date

ログに記録されたイベントの日時

特定の時刻 (例: 17/11/2022-09:48:27AM​)

logger

ログに記録されたイベントが発生した Flex Gateway サービス

flex-gateway-agent​、​flex-gateway-envoy​、または ​flex-gateway-fluent

level

ログに記録されたイベントの ​Loglevel

debug​、​info​、​warn​、​error​、または ​fatal

kind

ログ種別

runtimeLog​ または ​accessLog

適用された値を含む設定ファイルを確認するには、次の設定ファイルの例を参照してください。

Linux サービスとして Flex Gateway のログ出力を設定する

  1. Flex Gateway 設定ディレクトリに YAML 設定ファイルを作成します。

    sudo touch /usr/local/share/mulesoft/flex-gateway/conf.d/logs-config.yaml
  2. 次の例に示すように、目的の出力設定の詳細でファイルを更新します。

  3. アクセスログを設定する場合、​「アクセスログの設定」​を参照してメッセージログポリシーを適用します。

Docker コンテナで Flex Gateway のログ出力を設定する

Flex Gateway 設定ファイルを含むフォルダーのボリュームをすでに追加している場合、YAML ファイルの作成と保存のステップに進みます。
  1. Ctrl+C を押して、Flex Gateway とレプリカを停止します。

  2. Flex Gateway 設定ファイルを含むディレクトリに ​app​ という名前のフォルダーを作成します。

  3. 新しい ​app​ ディレクトリの追加ボリュームで Flex Gateway を再起動します。

    docker run --rm \
    -v "$(pwd)":/usr/local/share/mulesoft/flex-gateway/conf.d \
    -p 8080:8080 \
    mulesoft/flex-gateway
    -e ​FLEX_NAME​=<name-for-flex-replica> \ を含めて、Flex レプリカに割り当てる名前 (省略可能) を指定します。
  4. 次の例に示すように、目的の出力設定の詳細を含む YAML ファイルを作成して保存します。

  5. アクセスログを設定する場合、​「アクセスログの設定」​を参照してメッセージログポリシーを適用します。

Kubernetes クラスターで Flex Gateway のログ出力を設定する

Flex Gateway のログを設定する手順は、次のとおりです。

  1. 次の例に示すように、目的の出力設定の詳細を含む YAML 設定ファイルを使用して、新しいリソースを作成します。

  2. アクセスログを設定する場合、​「アクセスログの設定」​を参照してメッセージログポリシーを適用します。

ファイルの設定例

書式設定されたランタイムログとアクセスログを ​/var/log​ ディレクトリの ​log.txt​ という名前のファイル (Fluent Bit の ​File​ 出力) に送信するように Flex Gateway を設定します。この例の定義では、​file​ の値として ​spec.logging.outputs.type​ が指定されています。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
  name: logging-config
spec:
  logging:
    outputs:
    - name: default
      type: file
      parameters:
        file: /var/log/log.txt # Docker: replace `/var/log` with the absolute path to the mounted configuration directory
        format: template
        template: |
          [{date}][{logger}][{level}][{kind}] {message}
    runtimeLogs:
      logLevel: info
      outputs:
      - default
    accessLogs:
      outputs:
      - default
Docker の場合は、​spec.logging.output.parameters.file​ の ​/var/log​ を、マウントされた設定ディレクトリへの絶対パスに置き換えてください。

HTTP の設定例

書式設定されたランタイムログとアクセスログを ​HTTP​ 出力に送信するように Flex Gateway を設定できます。この例の定義では、​HTTP​ の値として ​spec.logging.outputs.type​ が指定されています。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
  name: logging-config
spec:
  logging:
    outputs:
    - name: default
      type: HTTP
      parameters:
        host: collectors.au.sumologic.com
        port: "443"
        URI: /receiver/v1/http/[PrivateKey]
        format: json_lines
        json_date_key: timestamp
        json_date_format: iso8601
    runtimeLogs:
      logLevel: info
      outputs:
      - default
    accessLogs:
      outputs:
      - default

Splunk の設定例

Splunk は、このリソースを適用するとすぐにログの取り込みを開始します。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
  name: splunk-config
spec:
  logging:
    outputs:
    - name: splunk
      type: splunk
      parameters:
        host: <instance-name>.splunkcloud.com
        port: "8088"
        splunk_token: <Splunk's HEC token>
        tls: "on"
        tls.verify: "off"
    runtimeLogs:
      logLevel: info
      outputs: [splunk]
    accessLogs:
      outputs: [splunk]

Dynatrace の設定例

書式設定されたランタイムログとアクセスログを Dynatrace 環境の ​HTTP​ 出力に送信するように Flex Gateway を設定できます。たとえば、次のファイルには必要な設定が含まれています。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
  name: dynatrace-config
spec:
  logging:
    outputs:
    - name: dynatrace
      type: http
      parameters:
        host: <environmentID>.live.dynatrace.com
        Port: "443"
        allow_duplicated_headers: "false"
        header:
          - Content-Type application/json; charset=utf-8
          - Authorization Api-Token <accessToken>
        URI: /api/v2/logs/ingest
        Format: json
        json_date_key: timestamp
        json_date_format: iso8601
        tls: "on"
        tls.verify: "off"
    runtimeLogs:
      logLevel: info
      outputs:
        - dynatrace
    accessLogs:
      outputs:
        - dynatrace

設定オプションについての詳細は、 「HTTP Output (HTTP 出力)」​を参照してください。

アクセスログの設定

ログ出力内のアクセスログを設定するには、要求および応答データの監視の対象である API にメッセージログポリシーを適用する必要があります。すでにメッセージログポリシーを API インスタンスに割り当てている場合、別のメッセージログポリシーを設定する必要はありません。

メッセージログポリシーを設定するには、「接続モードでの Flex Gateway のメッセージログの設定」を参照してください。

メッセージログポリシーを設定すると、API Manager の ​[Logs (ログ)]​ とサードパーティログサービスの両方にアクセスログが表示されます。

アクセスログが表示されない場合、メッセージログポリシーが実行される前に、より高い実行順序を持つポリシーによってエラーが発生している可能性があります。ポリシーの実行を並び替えるには、「ポリシーの順序付け」を参照してください。

ログイベントの例

次のログ出力の例は、次のイベントで発生する可能性がある出力を示しています。

グレースフルシャットダウン

[flex-gateway-agent][info] SignalHandler: Signal terminated received
[flex-gateway-agent][info] FilesystemWatcher(/usr/local/share/mulesoft/flex-gateway/conf.d): Stopping with context done
[flex-gateway-agent][info] XdsService: Stopping with context done
[flex-gateway-agent][error] flex-gateway-envoy: Stopped with error context canceled
[flex-gateway-agent][info] FilesystemWatcher(/etc/mulesoft/flex-gateway/conf.d): Stopping with context done
[flex-gateway-agent][error] flex-gateway-fluent: Stopped with error context canceled
[flex-gateway-agent][error] flex-gateway-fluent: Stopped with error context canceled
[flex-gateway-agent][info] Server dropped connection
[flex-gateway-agent][info] Agent communication closed

サービス停止

[flex-gateway-agent][error] WebSocket receiver got error: read tcp 172.17.0.2:60780->100.64.1.37:443: i/o timeout
[flex-gateway-agent][info] Server dropped connection
[flex-gateway-agent][warn] Dropped connection due to error read tcp 172.17.0.2:60780->100.64.1.37:443: i/o timeout
[flex-gateway-agent][info] Reconnecting after connection was dropped
[flex-gateway-agent][error] Error connecting to Websocket Server: dial tcp: lookup arm-mcm2-service.kstg.msap.io on 192.168.65.7:53: dial udp 192.168.65.7:53: connect: network is unreachable

Envoy のクラッシュ

[flex-gateway-envoy][critical] Caught Segmentation fault, suspect faulting address 0xffff87e8fb89485b
[flex-gateway-envoy][critical] Backtrace (use tools/stack_decode.py to get line numbers):
[flex-gateway-envoy][critical] Envoy version: 36cbae1aeedd8c3b4eb88cd28268d21fe0905ce5/1.23.0/Clean/RELEASE/BoringSSL
[flex-gateway-envoy][critical] #0: __restore_rt [0x7ff79db2f140]
[flex-gateway-envoy][critical] #1: [0x557dcfad249b]
[flex-gateway-envoy][critical] #2: [0x557dcdf35237]
[flex-gateway-envoy][critical] #3: [0x557dce16d49f]
[flex-gateway-envoy][critical] #4: [0x557dce1a8ff5]
[flex-gateway-envoy][critical] #5: [0x557dce1a8e47]
[flex-gateway-envoy][critical] #6: ...
[flex-gateway-agent][error] flex-gateway-envoy: Stopped with error flex-gateway-envoy: command error: signal: segmentation fault
[flex-gateway-agent][error] flex-gateway-fluent: Stopped with error context canceled
[flex-gateway-agent][error] flex-gateway-fluent: Stopped with error context canceled
[flex-gateway-agent][info] FilesystemWatcher(/etc/mulesoft/flex-gateway/conf.d): Stopping with context done
[flex-gateway-agent][info] FilesystemWatcher(/usr/local/share/mulesoft/flex-gateway/conf.d): Stopping with context done
[flex-gateway-agent][info] XdsService: Stopping with context done
[flex-gateway-agent][info] Server dropped connection
[flex-gateway-agent][info] Agent communication closed