# InfluxDB

The **influxdb** output plugin, allows to flush your records into a [InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/) time series database. The following instructions assumes that you have a fully operational InfluxDB service running in your system.

## Configuration Parameters

| Key           | Description                                                                                                     | default   |
| ------------- | --------------------------------------------------------------------------------------------------------------- | --------- |
| Host          | IP address or hostname of the target InfluxDB service                                                           | 127.0.0.1 |
| Port          | TCP port of the target InfluxDB service                                                                         | 8086      |
| Database      | InfluxDB database name where records will be inserted                                                           | fluentbit |
| Bucket        | InfluxDB bucket name where records will be inserted - if specified, `database` is ignored and v2 of API is used |           |
| Org           | InfluxDB organization name where the bucket is (v2 only)                                                        | fluent    |
| Sequence\_Tag | The name of the tag whose value is incremented for the consecutive simultaneous events.                         | \_seq     |
| HTTP\_User    | Optional username for HTTP Basic Authentication                                                                 |           |
| HTTP\_Passwd  | Password for user defined in HTTP\_User                                                                         |           |
| HTTP\_Token   | Authentication token used with InfluDB v2 - if specified, both HTTP\_User and HTTP\_Passwd are ignored          |           |
| HTTP\_Header  | Add a HTTP header key/value pair. Multiple headers can be set                                                   |           |
| Tag\_Keys     | Space separated list of keys that needs to be tagged                                                            |           |
| Auto\_Tags    | Automatically tag keys where value is *string*. This option takes a boolean value: True/False, On/Off.          | Off       |
| Uri           | Custom URI endpoint                                                                                             |           |

### TLS / SSL

InfluxDB output plugin supports TLS/SSL, for more details about the properties available and general configuration, please refer to the [TLS/SSL](https://docs.fluentbit.io/manual/3.0/administration/transport-security) section.

## Getting Started

In order to start inserting records into an InfluxDB service, you can run the plugin from the command line or through the configuration file:

### Command Line

The **influxdb** plugin, can read the parameters from the command line in two ways, through the **-p** argument (property) or setting them directly through the service URI. The URI format is the following:

```
influxdb://host:port
```

Using the format specified, you could start Fluent Bit through:

```
$ fluent-bit -i cpu -t cpu -o influxdb://127.0.0.1:8086 -m '*'
```

### Configuration File

In your main configuration file append the following *Input* & *Output* sections:

```python
[INPUT]
    Name  cpu
    Tag   cpu

[OUTPUT]
    Name          influxdb
    Match         *
    Host          127.0.0.1
    Port          8086
    Database      fluentbit
    Sequence_Tag  _seq
```

#### Tagging

Basic example of `Tag_Keys` usage:

```python
[INPUT]
    Name            tail
    Tag             apache.access
    parser          apache2
    path            /var/log/apache2/access.log

[OUTPUT]
    Name          influxdb
    Match         *
    Host          127.0.0.1
    Port          8086
    Database      fluentbit
    Sequence_Tag  _seq
    # make tags from method and path fields
    Tag_Keys      method path
```

With **Auto\_Tags=On** in this example cause error, because every parsed field value type is *string*. Best usage of this option in metrics like record where one or more field value is not *string* typed.

Basic example of `Tags_List_Key` usage:

```python
[INPUT]
    Name              dummy
    # tagged fields: level, ID, businessObjectID, status
    Dummy             {"msg": "Transfer completed", "level": "info", "ID": "1234", "businessObjectID": "qwerty", "status": "OK", "tags": ["ID", "businessObjectID"]}

[OUTPUT]
    Name          influxdb
    Match         *
    Host          127.0.0.1
    Port          8086
    Bucket        My_Bucket
    Org           My_Org
    Sequence_Tag  _seq
    HTTP_Token    My_Token
    # tag all fields inside tags string array
    Tags_List_Enabled True
    Tags_List_Key tags
    # tag level, status fields
    Tag_Keys level status
```

### Testing

Before to start Fluent Bit, make sure the target database exists on InfluxDB, using the above example, we will insert the data into a *fluentbit* database.

#### 1. Create database

Log into InfluxDB console:

```
$ influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.0
InfluxDB shell version: 1.1.0
>
```

Create the database:

```
> create database fluentbit
>
```

Check the database exists:

```
> show databases
name: databases
name
----
_internal
fluentbit

>
```

#### 2. Run Fluent Bit

The following command will gather CPU metrics from the system and send the data to InfluxDB database every five seconds:

```
$ bin/fluent-bit -i cpu -t cpu -o influxdb -m '*'
```

Note that all records coming from the *cpu* input plugin, have a tag *cpu*, this tag is used to generate the measurement in InfluxDB

#### 3. Query the data

From InfluxDB console, choose your database:

```
> use fluentbit
Using database fluentbit
```

Now query some specific fields:

```
> SELECT cpu_p, system_p, user_p FROM cpu
name: cpu
time                  cpu_p   system_p    user_p
----                  -----   --------    ------
1481132860000000000   2.75        0.5      2.25
1481132861000000000   2           0.5      1.5
1481132862000000000   4.75        1.5      3.25
1481132863000000000   6.75        1.25     5.5
1481132864000000000   11.25       3.75     7.5
```

The CPU input plugin gather more metrics per CPU core, in the above example we just selected three specific metrics. The following query will give a full result:

```
> SELECT * FROM cpu
```

#### 4. View tags

Query tagged keys:

```
> SHOW TAG KEYS ON fluentbit FROM "apache.access"
name: apache.access
tagKey
------
_seq
method
path
```

And now query *method* key values:

```
> SHOW TAG VALUES ON fluentbit FROM "apache.access" WITH KEY = "method"
name: apache.access
key    value
---    -----
method "MATCH"
method "POST"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fluentbit.io/manual/3.0/pipeline/outputs/influxdb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
