fluentbit JSON のネストしたキーの取得方法

fluentbit JSON のネストしたキーの取得方法


ECS Service のコンテナログからネストされたキーの取得をどのように対応したかをまとめました。

実施内容は https://github.com/kenzo0107/sample-fluentbit-get-nested-key にてまとめています。

キー log の中身だけ欲しい場合

  • ログ
1
2
3
4
5
6
{
"log": {
"a": "1",
"b": "2"
}
}
1
2
3
4
5
6
7
8
$ docker run --rm -it \
-v $(PWD)/sample1.conf:/fluent-bit/etc/sample.conf \
amazon/aws-for-fluent-bit:2.23.0 /fluent-bit/bin/fluent-bit \
-c /fluent-bit/etc/sample.conf

...

[0] *-firelens-*: [1648191581.185935500, {"a"=>"1", "b"=>"2"}]

抽出できました。

キー log の中の b の中身だけ欲しい場合

1
2
3
4
5
6
7
8
{
"log": {
"a": "1",
"b": {
"c": "2"
}
}
}
1
2
3
4
5
6
7
8
$ docker run --rm -it \
-v $(PWD)/sample2.conf:/fluent-bit/etc/sample.conf \
amazon/aws-for-fluent-bit:2.23.0 /fluent-bit/bin/fluent-bit \
-c /fluent-bit/etc/sample.conf

...

[0] *-firelens-*: [1648192323.237149000, {"c"=>"2"}]

抽出できました

キー log の b のリストの中身だけ欲しい場合 その 2

  • ログ
1
2
3
4
5
6
7
8
9
10
{
"log": {
"a": "1",
"b": [
{
"c": "2"
}
]
}
}
1
2
3
4
5
6
7
8
9
$ docker run --rm -it \
-v $(PWD)/sample3.conf:/fluent-bit/etc/sample.conf \
-v $(PWD)/test.lua:/fluent-bit/etc/test.lua \
amazon/aws-for-fluent-bit:2.23.0 /fluent-bit/bin/fluent-bit \
-c /fluent-bit/etc/sample.conf

...

[filter:nest:nest.1] Value of key 'b' is not a map. Will not attempt to lift from here

b は map 型でなく nest では抽出できませんでした。

lua スクリプトで対応

以下 lua スクリプトをかませて b キーの中身を取得します。

1
2
3
4
5
6
7
function cb_split(tag, timestamp, record)
if record['b'] ~= nil then
return 2, timestamp, record['b']
else
return 2, timestamp, record
end
end
1
2
3
4
5
[Filter]
Name lua
Match *-firelens-*
script test.lua
call cb_split
1
2
3
4
5
6
7
8
9
$ docker run --rm -it \
-v $(PWD)/sample4.conf:/fluent-bit/etc/sample.conf \
-v $(PWD)/test.lua:/fluent-bit/etc/test.lua \
amazon/aws-for-fluent-bit:2.23.0 /fluent-bit/bin/fluent-bit \
-c /fluent-bit/etc/sample.conf

...

[0] *-firelens-*: [1648192853.650025200, {"c"=>"2"}]

抽出できました。

まとめ

Value of key 'xxx' is not a map. Will not attempt to lift from here エラーについて
fluentbit の公式マニュアルにある Lua script で非常にシンプルなスクリプトで対応できました。

以上
参考になれば幸いです。

Author

Kenzo Tanaka

Posted on

2022-03-25

Licensed under

コメント