Tap can be used to generate events or records detailing what messages pass through Fluent Bit, at what time and what filters affect them.
Basic Tap example
Ensure that the container image supports Fluent Bit Tap (available in Fluent Bit 2.0+):
$dockerrun--rm-tifluent/fluent-bit:latest--help|greptrace-Z,--enable-chunk-traceenablechunktracing,itcanbeactivatedeitherthroughthehttpapiorthecommandline--trace-inputinputtostarttracingonstartup.--trace-outputoutputtousefortracingonstartup.--trace-output-propertysetapropertyforoutputtracingonstartup. --trace setup a trace pipeline on startup. Uses a single line, ie: "input=dummy.0 output=stdout output.format='json'"
If the --enable-chunk-trace option is present, your Fluent Bit version supports Fluent Bit Tap, but it's disabled by default. Use this option to enable it.
You can start Fluent Bit with tracing activated from the beginning by using the trace-input and trace-output properties:
This example defines the Tap pipeline using this configuration: input=dummy.0 output=stdout output.format=json_lines which defines the following:
input: dummy.0 listens to the tag or alias dummy.0.
output: stdout outputs to a stdout plugin.
output.format: json_lines sets the stdout format to json_lines.
Tap support can also be activated and deactivated using the embedded web server:
$dockerrun--rm-ti-p2020:2020fluent/fluent-bit:latest-Z-H-idummy-palias=input_dummy-ostdout-f1FluentBitv2.0.0* Copyright (C) 2015-2022 The Fluent Bit Authors* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd* https://fluentbit.io[2022/10/21 10:03:16] [ info] [fluent bit] version=2.0.0, commit=3000f699f2, pid=1[2022/10/21 10:03:16] [ info] [output:stdout:stdout.0] worker #0 started[2022/10/21 10:03:16] [ info] [storage] ver=1.3.0, type=memory, sync=normal, checksum=off, max_chunks_up=128[2022/10/21 10:03:16] [ info] [cmetrics] version=0.5.2[2022/10/21 10:03:16] [ info] [input:dummy:input_dummy] initializing[2022/10/21 10:03:16] [ info] [input:dummy:input_dummy] storage_strategy='memory'(memoryonly)[2022/10/21 10:03:16] [ info] [http_server] listen iface=0.0.0.0 tcp_port=2020[2022/10/21 10:03:16] [ info] [sp] stream processor started[0] dummy.0: [1666346597.203307010, {"message"=>"dummy"}][0] dummy.0: [1666346598.204103793, {"message"=>"dummy"}]...
In another terminal, activate Tap by either using the instance id of the input (dummy.0) or its alias. The alias is more predictable, and is used here:
When activating Tap, any plugin parameter can be given. These parameters can be used to modify the output format, the name of the time key, the format of the date, and other details.
The following example uses the parameter "format": "json" to demonstrate how to show stdout in JSON format.
1: Input record. This is the unadulterated input record.
2: Filtered record. This is a record after it was filtered. One record is generated per filter.
3: Pre-output record. This is the record right before it's sent for output.
This example is a record generated by the manipulation of a record by a filter so it has the type 2.
start_time and end_time: Records the start and end of an event, and is different for each event type:
type 1: When the input is received, both the start and end time.
type 2: The time when filtering is matched until it has finished processing.
type 3: The time when the input is received and when it's finally slated for output.
trace_id: A string composed of a prefix and a number which is incremented with each record received by the input during the Tap session.
plugin_instance: The plugin instance name as generated by Fluent Bit at runtime.
plugin_alias: If an alias is set this field will contain the alias set for a plugin.
records: An array of all the records being sent. Fluent Bit handles records in chunks of multiple records and chunks are indivisible, the same is done in the Tap output. Each record consists of its timestamp followed by the actual data which is a composite type of keys and values.
Dump Internals / Signal
When the service is running, you can export metrics to see the overall status of the data flow of the service. There are other use cases where you might need to know the current status of the service internals, like the current status of the internal buffers. Dump Internals can help provide this information.
Fluent Bit v1.4 introduced the Dump Internals feature, which can be triggered from the command line triggering the CONT Unix signal.
This feature is only available on Linux and BSD operating systems.
Usage
Run the following kill command to signal Fluent Bit:
kill-CONT`pidoffluent-bit`
The command pidof aims to identify the Process ID of Fluent Bit.
Fluent Bit will dump the following information to the standard output interface (stdout):
[engine] caught signal (SIGCONT)
[2020/03/23 17:39:02] Fluent Bit Dump
===== Input =====
syslog_debug (syslog)
│
├─ status
│ └─ overlimit : no
│ ├─ mem size : 60.8M (63752145 bytes)
│ └─ mem limit : 61.0M (64000000 bytes)
│
├─ tasks
│ ├─ total tasks : 92
│ ├─ new : 0
│ ├─ running : 92
│ └─ size : 171.1M (179391504 bytes)
│
└─ chunks
└─ total chunks : 92
├─ up chunks : 35
├─ down chunks: 57
└─ busy chunks: 92
├─ size : 60.8M (63752145 bytes)
└─ size err: 0
===== Storage Layer =====
total chunks : 92
├─ mem chunks : 0
└─ fs chunks : 92
├─ up : 35
└─ down : 57
Input plugins
The input plugins dump provides insights for every input instance configured.
Status
Overall ingestion status of the plugin.
Tasks
When an input plugin ingests data into the engine, a Chunk is created. A Chunk can contains multiple records. At flush time, the engine creates a Task that contains the routes for the Chunk associated in question.
The Task dump describes the tasks associated to the input plugin:
Chunks
The Chunks dump tells more details about all the chunks that the input plugin has generated and are still being processed.
Depending of the buffering strategy and limits imposed by configuration, some Chunks might be up (in memory) or down (filesystem).
Storage Layer
Fluent Bit relies on a custom storage layer interface designed for hybrid buffering. The Storage Layer entry contains a total summary of Chunks registered by Fluent Bit:
Entry
Sub-entry
Description
Entry
Description
Entry
Sub-entry
Description
Entry
Sub-Entry
Description
overlimit
If the plugin has been configured with Mem_Buf_Limit, this entry will report if the plugin is over the limit or not at the moment of the dump. Over the limit prints yes, otherwise no.
mem_size
Current memory size in use by the input plugin in-memory.
mem_limit
Limit set by Mem_Buf_Limit.
total_tasks
Total number of active tasks associated to data generated by the input plugin.
new
Number of tasks not yet assigned to an output plugin. Tasks are in new status for a very short period of time. This value is normally very low or zero.
running
Number of active tasks being processed by output plugins.
size
Amount of memory used by the Chunks being processed (total chunk size).
total_chunks
Total number of Chunks generated by the input plugin that are still being processed by the engine.
up_chunks
Total number of Chunks loaded in memory.
down_chunks
Total number of Chunks stored in the filesystem but not loaded in memory yet.
busy_chunks
Chunks marked as busy (being flushed) or locked. Busy Chunks are immutable and likely are ready to be or are being processed.
size
Amount of bytes used by the Chunk.
size err
Number of Chunks in an error state where its size couldn't be retrieved.
total chunks
Total number of Chunks.
mem chunks
Total number of Chunks memory-based.
fs chunks
Total number of Chunks filesystem based.
up
Total number of filesystem chunks up in memory.
down
Total number of filesystem chunks down (not loaded in memory).