# Build and Install

[Fluent Bit](http://fluentbit.io) uses [CMake](http://cmake.org) as its build system.

## Requirements

* CMake 3.12 or greater. You might need to use `cmake3` instead of `cmake`.
* Flex
* Bison 3 or greater
* YAML headers
* OpenSSL headers

## Prepare environment

If you already know how CMake works, you can skip this section and review the available [build options](#general-options).

The following steps explain how to build and install the project with the default options.

1. Change to the `build/` directory inside the Fluent Bit sources:

   ```bash
   cd build/
   ```
2. Let [CMake](http://cmake.org) configure the project specifying where the root path is located:

   ```bash
   cmake ../
   ```

   This command displays a series of results similar to:

   ```
   -- The C compiler identification is GNU 4.9.2
   -- Check for working C compiler: /usr/bin/cc
   -- Check for working C compiler: /usr/bin/cc -- works
   -- Detecting C compiler ABI info
   -- Detecting C compiler ABI info - done
   -- The CXX compiler identification is GNU 4.9.2
   -- Check for working CXX compiler: /usr/bin/c++
   -- Check for working CXX compiler: /usr/bin/c++ -- works
   ...
   -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
   -- Looking for accept4
   -- Looking for accept4 - not found
   -- Configuring done
   -- Generating done
   -- Build files have been written to: /home/edsiper/coding/fluent-bit/build
   ```
3. Start the compilation process using the `make` command:

   ```bash
   make
   ```

   This command displays results similar to:

   ```
   Scanning dependencies of target msgpack
   [  2%] Building C object lib/msgpack-1.1.0/CMakeFiles/msgpack.dir/src/unpack.c.o
   [  4%] Building C object lib/msgpack-1.1.0/CMakeFiles/msgpack.dir/src/objectc.c.o
   [  7%] Building C object lib/msgpack-1.1.0/CMakeFiles/msgpack.dir/src/version.c.o
   ...
   [ 19%] Building C object lib/monkey/mk_core/CMakeFiles/mk_core.dir/mk_file.c.o
   [ 21%] Building C object lib/monkey/mk_core/CMakeFiles/mk_core.dir/mk_rconf.c.o
   [ 23%] Building C object lib/monkey/mk_core/CMakeFiles/mk_core.dir/mk_string.c.o
   ...
   Scanning dependencies of target fluent-bit-static
   [ 66%] Building C object src/CMakeFiles/fluent-bit-static.dir/flb_pack.c.o
   [ 69%] Building C object src/CMakeFiles/fluent-bit-static.dir/flb_input.c.o
   [ 71%] Building C object src/CMakeFiles/fluent-bit-static.dir/flb_output.c.o
   ...
   Linking C executable ../bin/fluent-bit
   [100%] Built target fluent-bit-bin
   ```
4. To continue installing the binary on the system, use `make install`:

   ```bash
   make install
   ```

   If the command indicates insufficient permissions, prefix the command with `sudo`.

## Build options

Fluent Bit provides configurable options to CMake that can be enabled or disabled.

### General options

| Option                 | Description                                                                                                                 | Default |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------- |
| `FLB_ALL`              | Enable all features available                                                                                               | *No*    |
| `FLB_JEMALLOC`         | Use Jemalloc as default memory allocator                                                                                    | *No*    |
| `FLB_TLS`              | Build with SSL/TLS support                                                                                                  | *Yes*   |
| `FLB_BINARY`           | Build executable                                                                                                            | *Yes*   |
| `FLB_EXAMPLES`         | Build examples                                                                                                              | *Yes*   |
| `FLB_SHARED_LIB`       | Build shared library                                                                                                        | *Yes*   |
| `FLB_MTRACE`           | Enable mtrace support                                                                                                       | *No*    |
| `FLB_INOTIFY`          | Enable Inotify support                                                                                                      | *Yes*   |
| `FLB_POSIX_TLS`        | Force POSIX thread storage                                                                                                  | *No*    |
| `FLB_SQLDB`            | Enable SQL embedded database support                                                                                        | *No*    |
| `FLB_HTTP_SERVER`      | Enable HTTP Server                                                                                                          | *No*    |
| `FLB_LUAJIT`           | Enable Lua scripting support                                                                                                | *Yes*   |
| `FLB_RECORD_ACCESSOR`  | Enable record accessor                                                                                                      | *Yes*   |
| `FLB_SIGNV4`           | Enable AWS Signv4 support                                                                                                   | *Yes*   |
| `FLB_STATIC_CONF`      | Build binary using static configuration files. The value of this option must be a directory containing configuration files. |         |
| `FLB_STREAM_PROCESSOR` | Enable Stream Processor                                                                                                     | *Yes*   |
| `FLB_CONFIG_YAML`      | Enable YAML configuration support                                                                                           | *Yes*   |
| `FLB_WASM`             | Build with WASM runtime support                                                                                             | *Yes*   |
| `FLB_WAMRC`            | Build with WASM AOT compiler executable                                                                                     | *No*    |

### Development options

| Option               | Description                         | Default |
| -------------------- | ----------------------------------- | ------- |
| `FLB_DEBUG`          | Build binaries with debug symbols   | *No*    |
| `FLB_VALGRIND`       | Enable Valgrind support             | *No*    |
| `FLB_TRACE`          | Enable trace mode                   | *No*    |
| `FLB_SMALL`          | Minimise binary size                | *No*    |
| `FLB_TESTS_RUNTIME`  | Enable runtime tests                | *No*    |
| `FLB_TESTS_INTERNAL` | Enable internal tests               | *No*    |
| `FLB_TESTS`          | Enable tests                        | *No*    |
| `FLB_BACKTRACE`      | Enable backtrace/stacktrace support | *Yes*   |

### Optimization options

| Option                                    | Description                                                                                              | Default |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------- | ------- |
| `FLB_MSGPACK_TO_JSON_INIT_BUFFER_SIZE`    | Determine initial buffer size for `msgpack` to `json` conversion in terms of memory used by payload.     | `2.0`   |
| `FLB_MSGPACK_TO_JSON_REALLOC_BUFFER_SIZE` | Determine percentage of reallocation size when `msgpack` to `json` conversion buffer runs out of memory. | `0.1`   |

### Input plugins

Input plugins gather information from a specific source type like network interfaces, some built-in metrics, or through a specific input device. The following input plugins are available:

| Option                                                                                                 | Description                                                               | Default |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------- | ------- |
| [`FLB_IN_COLLECTD`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/collectd)                     | Enable Collectd input plugin                                              | *On*    |
| [`FLB_IN_CPU`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/cpu-metrics)                       | Enable CPU input plugin                                                   | *On*    |
| [`FLB_IN_DISK`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/disk-io-metrics)                  | Enable Disk I/O Metrics input plugin                                      | *On*    |
| [`FLB_IN_DOCKER`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/docker-events)                  | Enable Docker metrics input plugin                                        | *On*    |
| [`FLB_IN_EXEC`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/exec)                             | Enable Exec input plugin                                                  | *On*    |
| [`FLB_IN_EXEC_WASI`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/exec-wasi)                   | Enable Exec WASI input plugin                                             | *On*    |
| [`FLB_IN_FLUENTBIT_METRICS`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/fluentbit-metrics)   | Enable Fluent Bit metrics input plugin                                    | *On*    |
| [`FLB_IN_ELASTICSEARCH`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/elasticsearch)           | Enable Elasticsearch/OpenSearch Bulk input plugin                         | *On*    |
| [`FLB_IN_FORWARD`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/forward)                       | Enable Forward input plugin                                               | *On*    |
| [`FLB_IN_HEAD`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/head)                             | Enable Head input plugin                                                  | *On*    |
| [`FLB_IN_HEALTH`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/health)                         | Enable Health input plugin                                                | *On*    |
| [`FLB_IN_KMSG`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/kernel-logs)                      | Enable Kernel log input plugin                                            | *On*    |
| [`FLB_IN_MEM`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/memory-metrics)                    | Enable Memory input plugin                                                | *On*    |
| [`FLB_IN_MQTT`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/mqtt)                             | Enable MQTT Server input plugin                                           | *On*    |
| [`FLB_IN_NETIF`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/network-io-metrics)              | Enable Network I/O metrics input plugin                                   | *On*    |
| [`FLB_IN_PROC`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/process)                          | Enable Process monitoring input plugin                                    | *On*    |
| [`FLB_IN_RANDOM`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/random)                         | Enable Random input plugin                                                | *On*    |
| [`FLB_IN_SERIAL`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/serial-interface)               | Enable Serial input plugin                                                | *On*    |
| [`FLB_IN_STDIN`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/standard-input)                  | Enable Standard input plugin                                              | *On*    |
| [`FLB_IN_SYSLOG`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/syslog)                         | Enable Syslog input plugin                                                | *On*    |
| [`FLB_IN_SYSTEMD`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/systemd)                       | Enable Systemd / Journald input plugin                                    | *On*    |
| [`FLB_IN_TAIL`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/tail)                             | Enable Tail (follow files) input plugin                                   | *On*    |
| [`FLB_IN_TCP`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/tcp)                               | Enable TCP input plugin                                                   | *On*    |
| [`FLB_IN_THERMAL`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/thermal)                       | Enable system temperature input plugin                                    | *On*    |
| [`FLB_IN_UDP`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/udp)                               | Enable UDP input plugin                                                   | *On*    |
| [`FLB_IN_WINLOG`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/windows-event-log)              | Enable Windows Event Log input plugin (Windows Only)                      | *On*    |
| [`FLB_IN_WINEVTLOG`](https://docs.fluentbit.io/manual/3.2/pipeline/inputs/windows-event-log-winevtlog) | Enable Windows Event Log input plugin using `winevt.h` API (Windows Only) | *On*    |

### Filter plugins

Filter plugins let you modify, enrich or drop records. The following table describes the filters available on this version:

| Option                                                                                                | Description                       | Default |
| ----------------------------------------------------------------------------------------------------- | --------------------------------- | ------- |
| [`FLB_FILTER_AWS`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/aws-metadata)                | Enable AWS metadata filter        | *On*    |
| [`FLB_FILTER_ECS`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/ecs-metadata)                | Enable AWS metadata filter        | *On*    |
| `FLB_FILTER_EXPECT`                                                                                   | Enable Expect data test filter    | *On*    |
| [`FLB_FILTER_GREP`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/grep)                       | Enable Grep filter                | *On*    |
| [`FLB_FILTER_KUBERNETES`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/kubernetes)           | Enable Kubernetes metadata filter | *On*    |
| [`FLB_FILTER_LUA`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/lua)                         | Enable Lua scripting filter       | *On*    |
| [`FLB_FILTER_MODIFY`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/modify)                   | Enable Modify filter              | *On*    |
| [`FLB_FILTER_NEST`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/nest)                       | Enable Nest filter                | *On*    |
| [`FLB_FILTER_PARSER`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/parser)                   | Enable Parser filter              | *On*    |
| [`FLB_FILTER_RECORD_MODIFIER`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/record-modifier) | Enable Record Modifier filter     | *On*    |
| [`FLB_FILTER_REWRITE_TAG`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/rewrite-tag)         | Enable Rewrite Tag filter         | *On*    |
| [`FLB_FILTER_STDOUT`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/standard-output)          | Enable Stdout filter              | *On*    |
| [`FLB_FILTER_SYSINFO`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/sysinfo)                 | Enable Sysinfo filter             | *On*    |
| [`FLB_FILTER_THROTTLE`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/throttle)               | Enable Throttle filter            | *On*    |
| [`FLB_FILTER_TYPE_CONVERTER`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/type-converter)   | Enable Type Converter filter      | *On*    |
| [`FLB_FILTER_WASM`](https://docs.fluentbit.io/manual/3.2/pipeline/filters/wasm)                       | Enable WASM filter                | *On*    |

### Output plugins

Output plugins let you flush the information to some external interface, service, or terminal. The following table describes the output plugins available:

| Option                                                                                          | Description                                                       | Default |
| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------- |
| [`FLB_OUT_AZURE`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/azure)                  | Enable Microsoft Azure output plugin                              | *On*    |
| [`FLB_OUT_AZURE_KUSTO`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/azure_kusto)      | Enable Azure Kusto output plugin                                  | *On*    |
| [`FLB_OUT_BIGQUERY`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/bigquery)            | Enable Google BigQuery output plugin                              | *On*    |
| [`FLB_OUT_COUNTER`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/counter)              | Enable Counter output plugin                                      | *On*    |
| [`FLB_OUT_CLOUDWATCH_LOGS`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/cloudwatch)   | Enable Amazon CloudWatch output plugin                            | *On*    |
| [`FLB_OUT_DATADOG`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/datadog)              | Enable Datadog output plugin                                      | *On*    |
| [`FLB_OUT_ES`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/elasticsearch)             | Enable [Elastic Search](http://www.elastic.co) output plugin      | *On*    |
| [`FLB_OUT_FILE`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/file)                    | Enable File output plugin                                         | *On*    |
| [`FLB_OUT_KINESIS_FIREHOSE`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/firehose)    | Enable Amazon Kinesis Data Firehose output plugin                 | *On*    |
| [`FLB_OUT_KINESIS_STREAMS`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/kinesis)      | Enable Amazon Kinesis Data Streams output plugin                  | *On*    |
| [`FLB_OUT_FLOWCOUNTER`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/flowcounter)      | Enable Flowcounter output plugin                                  | *On*    |
| [`FLB_OUT_FORWARD`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/forward)              | Enable [Fluentd](http://www.fluentd.org) output plugin            | *On*    |
| [`FLB_OUT_GELF`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/gelf)                    | Enable Gelf output plugin                                         | *On*    |
| [`FLB_OUT_HTTP`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/http)                    | Enable HTTP output plugin                                         | *On*    |
| [`FLB_OUT_INFLUXDB`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/influxdb)            | Enable InfluxDB output plugin                                     | *On*    |
| [`FLB_OUT_KAFKA`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/kafka)                  | Enable Kafka output                                               | Off     |
| [`FLB_OUT_KAFKA_REST`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/kafka-rest-proxy)  | Enable Kafka REST Proxy output plugin                             | *On*    |
| `FLB_OUT_LIB`                                                                                   | Enable Lib output plugin                                          | *On*    |
| [`FLB_OUT_NATS`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/nats)                    | Enable [NATS](http://www.nats.io) output plugin                   | *On*    |
| `FLB_OUT_NULL`                                                                                  | Enable NULL output plugin                                         | *On*    |
| `FLB_OUT_PGSQL`                                                                                 | Enable PostgreSQL output plugin                                   | *On*    |
| `FLB_OUT_PLOT`                                                                                  | Enable Plot output plugin                                         | *On*    |
| `FLB_OUT_SLACK`                                                                                 | Enable Slack output plugin                                        | *On*    |
| [`FLB_OUT_S3`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/s3)                        | Enable Amazon S3 output plugin                                    | *On*    |
| [`FLB_OUT_SPLUNK`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/splunk)                | Enable Splunk output plugin                                       | *On*    |
| [`FLB_OUT_STACKDRIVER`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/stackdriver)      | Enable Google Stackdriver output plugin                           | *On*    |
| [`FLB_OUT_STDOUT`](https://docs.fluentbit.io/manual/3.2/installation/sources/build-and-install) | Enable STDOUT output plugin                                       | *On*    |
| `FLB_OUT_TCP`                                                                                   | Enable TCP/TLS output plugin                                      | *On*    |
| [`FLB_OUT_TD`](https://docs.fluentbit.io/manual/3.2/pipeline/outputs/treasure-data)             | Enable [Treasure Data](http://www.treasuredata.com) output plugin | *On*    |

### Processor plugins

Processor plugins handle the events within the processor pipelines to allow modifying, enriching, or dropping events.

The following table describes the processors available:

\| Option | Description | Default || :--- | :--- | :--- | | [`FLB_PROCESSOR_METRICS_SELECTOR`](https://docs.fluentbit.io/manual/3.2/pipeline/processors/metrics-selector) | Enable metrics selector processor | *On* | | [`FLB_PROCESSOR_LABELS`](https://docs.fluentbit.io/manual/3.2/pipeline/processors/labels) | Enable metrics label manipulation processor | *On* |
