No commit activity in last 3 years
No release in over 3 years
fluentd filter plugin to insert unique id into the message
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 12.0
>= 3.0

Runtime

>= 0.14.10, < 2
 Project Readme

fluent-plugin-insert-id

Fluentd filter plugin to insert unique ID string into the message.

The original implementation was copied from fluent-plugin-google-cloud which was created by Google to handle GCP GKE's official Stackdriver Logging reporting in sidecar container for each pod. You can check the difference between these plugins in here

How it works

# Input message
{"a": "foo", "b": "bar"}
{"a": "foo", "b": "bar"}
{"a": "foo", "b": "bar"}
{"a": "foo", "b": "bar"}
{"a": "foo", "b": "bar"}

# Output message
2019-08-25 21:20:43.539536458 +0000 message.test: {"a":"foo","b":"bar","insert-id":"nu8a3ptahpbetddw"}
2019-08-25 21:20:44.625784851 +0000 message.test: {"a":"foo","b":"bar","insert-id":"nu8a3ptahpbetddx"}
2019-08-25 21:20:45.579060596 +0000 message.test: {"a":"foo","b":"bar","insert-id":"nu8a3ptahpbetddy"}
2019-08-25 21:20:47.019565139 +0000 message.test: {"a":"foo","b":"bar","insert-id":"nu8a3ptahpbetddz"}
2019-08-25 21:20:50.035415329 +0000 message.test: {"a":"foo","b":"bar","insert-id":"nu8a3ptahpbetdea"}
  • Inserted ID contains 0-9 and a-z lowercase characters.
  • Initial ID generated is random string like "nu8a3ptahpbetddc".
  • Series ID after the initial ID are 'incremented' string which uses Ruby's String.next().
  • 'incremented' string also has 'carry' feature. Please check below links for more details.
  • This ordered ID makes debugging easier in most cases.

ID string length

  • From version 1.1.0, it is guaranteed that ID is fixed length string.
  • In version 1.0.0, the ID string length is incremented when carry happens at left-most characters.
# Version 1.0.0
{"a":"foo","b":"bar","insert-id":"z99999999999999z"}
{"a":"foo","b":"bar","insert-id":"aa00000000000000z"} # Left most character carry adds new digit.

# Version 1.1.0
{"a":"foo","b":"bar","insert-id":"z99999999999999z"}
{"a":"foo","b":"bar","insert-id":"a00000000000000z"} # Left most character carry is ignored.

Existing ID protection

If the message already has the key for inserted ID, the filter doesn't touch it and existing value is protected.

2019-08-27 02:10:07.422911774 +0000 message.test: {"a":"foo","b":"bar","insert-id":"ehrbwzp772xitjsv"}
2019-08-27 02:10:08.129842499 +0000 message.test: {"a":"foo","b":"bar","insert-id":"ehrbwzp772xitjsw"}
2019-08-27 02:10:08.940316454 +0000 message.test: {"a":"foo","b":"bar","insert-id":"ehrbwzp772xitjsx"}
2019-08-27 02:11:02.498772740 +0000 message.test: {"a":"foo","b":"bar","insert-id":"existing_ID"}
2019-08-27 02:11:06.802934944 +0000 message.test: {"a":"foo","b":"bar","insert-id":"ehrbwzp772xitjsy"}

Differences between original IP(fluent-plugin-google-cloud) and this plugin

The fluent-plugin-google-cloud also provides ID insertion filter plugin as one of its function. Please note that there are some differences between these two plugins.

fluent-plugin-insert-id fluent-plugin-google-cloud
Fluentd 0.12 support NO YES
Fluentd 0.14 support YES NO
Default ID field key insert-id logging.googleapis.com/insertId
Initial ID length 16 17
Fixed length ID is guaranteed YES (>= v1.1.0) NO
ID characters 0-9a-z 0-9a-z
Ordered ID YES YES

Requirements

fluent-plugin-insert-id fluentd ruby
>= 1.0.0 >= v0.14.x >= 2.1

fluentd v0.12 is not supported.

Installation

RubyGems

$ gem install fluent-plugin-insert-id

Bundler

Add following line to your Gemfile:

gem "fluent-plugin-insert-id"

And then execute:

$ bundle

Configuration

insert_id_key (string) (optional)

The key of inserted-id. Default value is "insert-id".

Usage : Insert ID with default key

<filter **>
  @type insert_id
</filter>

Usage : Insert ID with custom key

In this case, key of ID is changed to 'message_id'

<filter **>
  @type insert_id
  insert_id_key message_id
</filter>

Copyright

  • Copyright(c) 2019- Kamome Shido
  • Copyright(c) 2014- Google Inc. All rights reserved.
  • License
    • Apache License, Version 2.0