FileLog および WinLog の両方のコレクタに対応するようにキー/値ペア (KVP) パーサを構成できます。

キー/値ペア (KVP) パーサ

kvp パーサを使用すると、任意のログ メッセージ テキストからすべての key=value の一致を検索して抽出することができます。次に、 kvp パーサのフォーマットの例を示します。
[parser|kvp_parser]
base_parser=kvp
fields=*

たとえば、key-value ログには次の形式があります:scope=local; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;

kvp パーサでは、値を抽出するフィールドを指定する必要があります。たとえば、構成に fields=name,lastname,country という定義がある場合、指定されたキーを持つ値のみが解析され、サーバに送信されます。

スペースやその他の特殊文字を定義するには、キーと値の両方を二重引用符 (" ") で任意に囲むことができます。

キーまたは値に二重引用符を使用した場合は、バックスラッシュ文字 (\) をエスケープ文字として使用できます。バックスラッシュに続く文字はすべて、二重引用符文字やバックスラッシュ文字も含め、リテラルに定義されます。たとえば、“ \\ ” のようにします。

以下の検討事項に注意してください。

  • 等号の後にキー/値ペアのキーがなく、VALUE が指定されていない場合、オプションはフリー テキスト フィールドと同様にスキップされます。
  • キーは空白にできませんが、値は空白にできます。
  • 等号の後に値がない場合はフリー テキストと見なされ、スキップされます。
  • 値は二重引用符で囲んで文字列にすることも、空にすることもできます。バックスラッシュを使用して、値の一部の特殊文字をエスケープ処理します。

KVP パーサのオプション

kvp パーサの構造については、以下の情報に注意してください。

オプション 説明
fields

データの単位として記述された、抽出対象の情報です。たとえば、fields=name,lastname,country など。

特定のフィールド名が fields オプションによって定義されている場合、ログから抽出されたフィールド名にあるそれぞれの無効な文字がアンダースコアに置き換えられます。たとえば、fields オプションでフィールド「x-A」および「a*(X+Y)」というフィールドを検索する場合、パーサーはこれらのフィールドをログから抽出し、それぞれ「x_a」および「a__x_y」というフィールドに置き換えます。これにより、名前に任意の文字を持つフィールドを抽出することができます。

fields オプションが「*」として指定されている場合、kvp パーサはフィールド/値のペアを自動的に認識し、「英数字 + アンダースコア」文字(LI サーバでサポートされる)のみを持つフィールドを検索します。その他のすべての無効な文字は、アンダースコアに変換される代わりに削除されます。そのため、パーサが不要な情報を静的フィールドに抽出するのを防ぐことができます。

delimiter

任意。

デフォルトの区切り文字はスペース、タブ、改行文字、カンマ、セミコロンです。

区切り文字が指定されていない場合、kvp パーサは解析にデフォルトの区切り文字を使用します。

デフォルトの区切り文字を特定の区切り文字に変更するには、その区切り文字を二重引用符で囲んで定義する必要があります。たとえば、delimiter = "#^|" のようにします。この定義は、二重引用符で囲まれた各文字が区切り文字として使用されることを意味します。kvp パーサでは任意の文字を区切り文字と見なすことができます。定義には、デフォルトの区切り文字とその他の区切り文字を混在させることができます。

たとえば、delimiter = "#^|\t\r\n\s" のステートメントには、区切り文字としてタブ、改行文字、およびスペースが含まれています。これらの文字を使用する場合は、先頭にエスケープ文字を付ける必要があります。たとえば、スペース文字を区切り文字として定義するには、delimiter="\s" のように、スペース文字の前にエスケープ文字 (\) を入力します。

field_decoder

ネストされたパーサは JSON 文字列として指定されます。キーはネストされたパーサに適用されるフィールドの名前で、値はそのフィールドに使用されるパーサの名前です。

ネストされたパーサは、ベース パーサによるデコードに従って、それぞれ対応するフィールドに適用されます。

キー/値のペアがタイムスタンプやカンマ区切りのリストなどの複雑な場合、フィールド デコーダが便利です。

debug =

任意。 debug = の値は yes または no になります。パーサに対する debug のデフォルト値は debug=no です。

オプションが yes に設定されていると、パーサ取り込みの詳細なログが liagent_<date>.log で確認できます。

キー値の追加オプション

キー 定義
KVP_MESSAGE = *(MESSAGE_ENTRY [WSPR])

オプションのスペースで区切られたメッセージ エントリのリストです。

MESSAGE_ENTRY = KVP / FREE_TEXT

エントリは、キー/値ペアまたはフリー テキストのみです。

KVP = KEY ["=" VALUE]

キー/値ペアです。KEY に続くのが等記号と VALUE ではない場合は、フリー テキストのようにスキップされます。

KEY = BARE_KEY / QUOTED_KEY
FREE_TEXT = "="

単独の等記号はフリー テキストとして見なされてスキップされます。

BARE_KEY = *1BARE_KEY_CHAR

少なくとも 1 文字です。

BARE_KEY_CHAR = %0x00-08 / %0x10-19 / %0x21-3C / %3E-%FF

等記号、スペース、または TAB を除く任意の文字です。

QUOTED_KEY = 0x22 *1(QUOTED_STRING_CHAR / "\" CHAR) 0x22

二重引用符で囲まれた少なくとも 1 文字です。エスケープ文字としてバックスラッシュが使用されます。

QUOTED_STRING_CHAR = %0x00-21 / %0x23-FF

二重引用符を除く任意の文字です。

VALUE = BARE_VALUE / QUOTED_VALUE
BARE_VALUE = *BARE_VALUE_CHAR

ゼロ個以上の文字です。

BARE_VALUE_CHAR = %0x00-08 / %0x10-19 / %0x21-FF

スペースまたはタブを除いた任意の文字です。

QUOTED_VALUE = 0x22 *(QUOTED_STRING_CHAR / "\" CHAR) 0x22

二重引用符で囲まれた文字列です。空白にすることもできます。エスケープ文字としてバックスラッシュが使用されます。

KVP パーサの構成例

必要に応じて、fields=* を使用してすべてのフィールドを解析することができます。

[parser|simple_kvp]
base_parser =kvp
fields=*

この例は、フィールド デコーダの指定方法を示します。

[parser|mykvp]
debug=no
base_parser=kvp
delimiter="#^|"
fields=*
;OR fields=scope,abstract,lazyInit,autowireMode,dependencyCheck
field_decoder={"field1":"field1_parser1"}

[parser|field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":"field_parser2"}

次の KVP ログを解析するには:

Configuring transport... proto = cfapi server_hostname = LOCALHOST ssl = no port = 9000 reconnect = 30
KVP パーサ構成を定義します。
[parser|kvp_log_parser]
base_parser=kvp
fields=*
KVP パーサは以下のフィールドを返します。
proto=cfapi
server_hostname=LOCALHOST
ssl=no
port=9000
reconnect=30
注: 入力ログで、代入演算子( =)の前にランダムに生成されたキーがある場合、KVP パーサを * オプションとともに使用しないことをお勧めします。KVP パーサは多数のランダム フィールドを生成するため、UI とクエリのパフォーマンスの問題につながるおそれがあるからです。代わりに、解析する必要があるフィールドを指定して、パーサを使用できます。

単純な KVP パーサと複雑な KVP パーサの例

単純な KVP パーサの例

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*

複雑な KVP パーサの例

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*
field_decoder={"field1":" field1_parser1"}

[parser| field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":" field1_parser2"}