applicationName および subsystemName メタデータ・フィールドにカスタム値を設定するエージェントの構成

ロギング・エージェントがIBM Cloud Logsサービスにログを送信するように設定できます。

送信するログには、applicationNamesubsystemName のメタデータフィールドの値を含める必要があります。

デフォルトでは、ロギング・エージェントを設定すると、エージェントはこれらのフィールドにデフォルト値を設定します。 デフォルト値を置き換えるために、独自のカスタム値を設定することができます。 デフォルト値の詳細については、メタデータ・フィールド を参照してください。

IBM Cloud Logsでは、applicationNamesubsystemName のメタデータフィールドを使って、以下の機能のいずれかを設定できます:

  • TCOポリシー
  • 解析ルール
  • データ利用レポート
  • アラート
  • ビュー
  • ダッシュボード
  • イベントから測定基準まで
  • ロギング

IBM Cloud Logs については、IBM Cloud Logs ドキュメント を参照してください。

カスタム値を設定するエージェントの設定

ロギング・エージェントは、APIオプションを指定することで、applicationNamesubsystemName のメタデータフィールドにカスタム値を設定することができます。

  • -a を使って、使いたい applicationName を指定します。

    デフォルトでは、applicationName は Red Hat OpenShift on IBM Cloud または IBM Cloud Kubernetes Service クラスタの名前空間名 kubernetes.namespace_name になります。

    また、'${POD_NAMESPACE}' のように、環境変数を使ってカスタム値を設定することもできます。

  • -s を使って、使いたい susbsystemName を指定します。

    デフォルトでは、subsystemName はRed Hat OpenShift on IBM CloudまたはIBM Cloud Kubernetes Serviceクラスタのコンテナ名 kubernetes.container_name になります。

    たとえば '${POD_NAME}' のように、環境の変数を使うこともできます。

これらのメタデータ・フィールドを設定する際、以下のオプションがある:

  • 値を固定文字列に設定できる。 たとえば、-s 'production' を使うことができます。
  • 例えば -a '${POD_NAMESPACE}' のように、環境変数が使えます。
  • 例えば -a 'mycluster:${POD_NAME}' のように、固定文字列と環境の変数を組み合わせることができます。

applicatioNamesubsystemName、またはその両方を設定できます。 値が設定されていない場合は、デフォルト値が適用される。 applicationNamesubsystemName のメタデータフィールドに設定されるデフォルト値については、メタデータを参照してください。

例動的な値の設定

ロギング・エージェントを applicationNamesubsystemName メタデータ・フィールドのカスタム動的値で構成するには、Kubernetesクラスタに以下のようにエージェントをデプロイします:

curl -sSL https://ibm.biz/logs-router-setup | bash -s --   -v 1.1.1   -m IAMAPIKey    -k xxxx   -t Kubernetes   -r eu-es   -p 3443 -s '${POD_NAME}' -a '${POD_NAMESPACE}'

例固定値と動的値を組み合わせた値の設定

ロギング・エージェントを applicationNamesubsystemName メタデータ・フィールドのカスタム値で構成するには、Kubernetesクラスタに以下のようにエージェントをデプロイします:

curl -sSL https://ibm.biz/logs-router-setup | bash -s --   -v 1.1.1   -m IAMAPIKey    -k xxxx   -t Kubernetes   -r eu-es   -p 3443 -s '${POD_NAME}' -a 'mycluster-dallas:${POD_NAMESPACE}'

この例では、クラスタ名を文字列として追加している。

例固定値の設定

ロギング・エージェントを、applicationNamesubsystemName メタデータ・フィールドのカスタム固定値で構成するには、Kubernetesクラスタに以下のようにエージェントをデプロイします:

curl -sSL https://ibm.biz/logs-router-setup | bash -s --   -v 1.1.1   -m IAMAPIKey    -k xxxx   -t Kubernetes   -r eu-es   -p 3443 -s 'mysubsystem' -a 'myapp'

ログラインに基づいてカスタム値を設定するエージェントの設定

ログ行に応じて、アプリケーション名とサブシステム名の値を動的に追加できます。

次の例では、Kubernetes クラスター用に、JSON フォーマットのメッセージにカスタム・アプリケーション名を追加するエージェントを構成する方法を示します:

  1. applicationNameをログ行に追加する。

    例えば、ログラインは次のようになる:{"level":"info", "msg":"Test message", "applicationName":"my-application"}

  2. JSON PARSERプラグインを logger-agent-iks.yaml ファイルに追加して、stingifyのJSONをJSONオブジェクトに変換します。 詳細は JSONを参照。

    [PARSER]
        # Converts the original log source from a JSON map string to the internal binary representation.
        Name   json
        Format json
        # Time_Key: Set the time in your log entry to the log record time included with the log. If not set, Fluenti Bit uses its own time.
        Time_Key time
        Time_Format %d/%b/%Y:%H:%M:%S %z
        # Time_Keep: To keep all fields in the original log record
        Time_Keep On
    
  3. PARSER プラグインを logger-agent-iks.yaml ファイルに追加して、ログからフィールドを抽出します。 詳細は パーサーを参照。

    デフォルトでは、パーサープラグインは解析されたフィールドのみを出力に保持します。

    [FILTER]
       # Name: Specify the name of the parser
       Name parser
       # Match: A pattern that is used to match against the tags that are defined on incoming records.
       Match *
       # Key_Name: Specify the field name in the log to be parsed.
       Key_Name message
       # Parser: Specify the parser name to interpret the field.
       Parser json
       # Reserve_Data: Set to keep all the fields
       Reserve_Data On
       # preserve_key: Set to keep the original key field.
       Preserve_Key On
    
  4. Nest filterプラグインを使用してアプリケーション名を抽出する

    ネスト・フィルター・プラグインは、ネストされたデータを操作することができます。 その動作モードは次のとおりである:nest では、レコードのセットを受け取り、それをマップに入れる。lift では、キーによってマップを受け取り、そのレコードを持ち上げる。 詳しくは ネストを参照。

    applicationNameはトップレベルでなければならないので、lift オペレーションを使わなければなりません。

    [FILTER] ネスト名 マッチ 操作リフト ネスティッド_アンダーメッセージ ワイルドカード applicationName

このようにすると、上記のログ行の例の"applicationName"は、その特定の行では "my-application "となります。