Данная связка будет применяться для хранения логов от приложений. Ниже пример compose файла:
version: "3.5"
services:
elasticsearch:
image: elasticsearch:8.19.3
ports:
- "9200:9200"
- "9300:9300"
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
- xpack.security.enabled=false # Disable security for development
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
- ./elasticsearch/logs:/usr/share/elasticsearch/logs
fluentbit:
build: .
ports:
- "8888:8888"
- "24224:24224"
- "24224:24224/udp"
depends_on:
- elasticsearch
Примеры Dockerfile для сервиса fluentbit:
FROM fluent/fluent-bit:4.0
ADD fluent-bit.conf /fluent-bit/etc/
Пример конфигурации fluent-bit.conf
[SERVICE]
log_level debug
[INPUT]
Name http
Listen 0.0.0.0
port 8888
[INPUT]
Name forward
Listen 0.0.0.0
port 24224
[OUTPUT]
Name es
Match **
Host elasticsearch
Port 9200
# When Logstash_Format is enabled, the Index name is composed using a prefix and the date
#Logstash_Format True
Suppress_Type_Name On
Index logs
Id_Key id
# HTTP_User <user>
# HTTP_Passwd <pw>
# Alternative time key, useful if your log entries contain an @timestamp field that is used by Elasticsearch
# Time_Key es_time
# If your Elasticsearch is using TLS, configure this
# tls On
# tls.verify Off
В итоге должна быть следующая структура:

- elasticsearch — папка для хранения данных от elasticsearch, подключенная через volume
- docker-compose.yml — файл compose
- Dockerfile — собственный образ fluent-bit:4.0
- fluent-bit.conf — конфигурация fluent-bit
После выполнения команды docker compose up будут запущены хосты:
- 8888 — приём данных по http
- 24224 — приём данных через адаптеры (https://docs.fluentd.org/language-bindings)
- 9200 — хост приёма данных elasticsearch
Примеры
Передача данных при помощи curl:
curl -X POST -H "Content-Type: application/json" -d '
{
"@timestamp":"2099-11-15T13:12:00",
"message":"Hello World"
}' "localhost:9200/logs/_create/1"
Передача данных через python:
from fluent import sender
from fluent import event
sender.setup('INFO', host='localhost', port=24224)
event.Event('INFO', {
"id": 2,
"@timestamp":"2099-11-15T13:13:00",
"message":"Hello World"
})
Пример проекта на github