Skip to content

Latest commit

 

History

History
14 lines (11 loc) · 1.48 KB

README.md

File metadata and controls

14 lines (11 loc) · 1.48 KB

Solving the problem of logs rejection in OpenSearch/ElasticSearch due to field type conflict when parsing log field in fluent-bit

We use the official fluent-bit helm chart and deploy it to Kubernetes. So, the script itself can be found here. And the settings for passing it to fluent-bit are here. The settings are optimized for our load and now it specifies a large write-to-file cache, if you don't need that, remove those settings.

So, what does this script do? It takes the log field and checks if there is a JSON string there. If there isn't, it doesn't do anything. But if there is a JSON string, it starts parsing it and serializes all nested objects into a string with a dot. Thus the data type of all keys and values become strings, except for those strings where the content contains timestamp, and any strings with timestamp OpenSearch/ElasticSearch (OS/ES) assigns the date type. This behavior can be disabled at the index template level.

Also note that in our setup, fluent-bit will replace any dots with underscores: Replace_Dots On. Also we do not enable the built-in parser: Merge_Log Off, but it is disabled by default and you can remove the setting. The built-in parser perfectly parses the log field and its subobjects, however, sometimes the field types of object values can be different and this is what causes OS/ES to refuse to accept logs.