Skip to content

Commit f43f0fa

Browse files
committed
Switch fluentbit for vectordev
1 parent f611220 commit f43f0fa

File tree

7 files changed

+116
-78
lines changed

7 files changed

+116
-78
lines changed

services/logging/docker-compose.aws.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ services:
1515
constraints:
1616
- node.labels.logging==true
1717

18-
fluentbit:
18+
vector:
1919
deploy:
2020
placement:
2121
constraints:

services/logging/docker-compose.dalco.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ services:
1717
constraints:
1818
- node.labels.logging==true
1919

20-
fluentbit:
20+
vector:
2121
deploy:
2222
placement:
2323
constraints:

services/logging/docker-compose.local.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
placement:
1515
constraints: []
1616

17-
fluentbit:
17+
vector:
1818
deploy:
1919
placement:
2020
constraints: []

services/logging/docker-compose.master.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ services:
1717
constraints:
1818
- node.labels.logging==true
1919

20-
fluentbit:
20+
0.49.X-debian:
2121
deploy:
2222
placement:
2323
constraints:

services/logging/docker-compose.yml.j2

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -99,41 +99,26 @@ services:
9999
- traefik.http.middlewares.graylog_replace_regex.replacepathregex.regex=^/graylog/?(.*)$$
100100
- traefik.http.middlewares.graylog_replace_regex.replacepathregex.replacement=/$${1}
101101
- traefik.http.routers.graylog.middlewares=ops_whitelist_ips@swarm, ops_gzip@swarm, graylog_replace_regex
102-
fluentbit:
103-
image: cr.fluentbit.io/fluent/fluent-bit:4.0.9
104-
configs:
105-
- source: fluentbit_config
106-
target: /fluent-bit/etc/fluent-bit.conf
107-
environment:
108-
- GRAYLOG_HOST=graylog
109-
- GRAYLOG_PORT=12201
110-
- LOKI_HOST=loki
102+
vector:
103+
image: timberio/vector:0.49.X-debian
111104
ports:
112-
- "12201:12201/udp"
105+
- "12201:12201/udp" # GELF input
106+
volumes:
107+
- /var/run/docker.sock:/var/run/docker.sock:ro
108+
environment:
109+
- VECTOR_CONFIG=/etc/vector/vector.yaml
110+
- VECTOR_LOG=info
111+
configs:
112+
- source: vector_config
113+
target: /etc/vector/vector.yaml
113114
deploy:
114-
restart_policy:
115-
condition: on-failure
116115
resources:
117116
limits:
118-
cpus: '1.0'
119-
memory: 1G
120-
reservations:
121-
cpus: '0.5'
117+
cpu: "1.0"
122118
memory: 512M
123-
update_config:
124-
parallelism: 1
125-
delay: 10s
126-
order: start-first
127-
labels:
128-
- traefik.enable=true
129-
- traefik.docker.network=${PUBLIC_NETWORK}
130-
- traefik.http.services.fluentbit.loadbalancer.server.port=2020
131-
- traefik.http.routers.fluentbit.rule=Host(`${MONITORING_DOMAIN}`) && PathPrefix(`/fluentbit`)
132-
- traefik.http.routers.fluentbit.entrypoints=https
133-
- traefik.http.routers.fluentbit.tls=true
134-
- traefik.http.middlewares.fluentbit_replace_regex.replacepathregex.regex=^/fluentbit/?(.*)$$
135-
- traefik.http.middlewares.fluentbit_replace_regex.replacepathregex.replacement=/$${1}
136-
- traefik.http.routers.fluentbit.middlewares=ops_whitelist_ips@swarm, ops_gzip@swarm, fluentbit_replace_regex
119+
reservations:
120+
memory: 256M
121+
labels: []
137122
networks:
138123
- monitoring
139124
- graylog
@@ -197,9 +182,9 @@ configs:
197182
graylog_config:
198183
name: ${STACK_NAME}_graylog_config_{{ "./data/contentpacks/osparc-custom-content-pack-v2.json" | sha256file | substring(0,10) }}
199184
file: ./data/contentpacks/osparc-custom-content-pack-v2.json
200-
fluentbit_config:
201-
name: ${STACK_NAME}_fluentbit_config_{{ "./fluentbit/fluentbit.conf" | sha256file | substring(0,10) }}
202-
file: ./fluentbit/fluentbit.conf
185+
vector_config:
186+
name: ${STACK_NAME}_vector_config_{{ "./vector.yaml" | sha256file | substring(0,10) }}
187+
file: ./vector.yaml
203188
loki_config:
204189
name: ${STACK_NAME}_loki_config_{{ "./loki.yaml" | sha256file | substring(0,10) }}
205190
file: ./loki.yaml

services/logging/fluentbit/fluentbit.conf

Lines changed: 0 additions & 41 deletions
This file was deleted.

services/logging/vector.yaml

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Vector configuration to replace Fluent Bit
2+
# Ingests GELF logs from Docker daemon and forwards to Loki and Graylog
3+
4+
sources:
5+
# Receive GELF messages from Docker containers via UDP
6+
docker_gelf:
7+
type: socket
8+
address: "0.0.0.0:12201"
9+
mode: udp
10+
decoding:
11+
codec: gelf
12+
13+
transforms:
14+
# Process and enrich the logs
15+
process_logs:
16+
type: remap
17+
inputs: ["docker_gelf"]
18+
source: |
19+
if !exists(.host) {
20+
.host = get_hostname!()
21+
}
22+
23+
# Map short_message to message for Loki compatibility
24+
if exists(.short_message) {
25+
.message = .short_message
26+
}
27+
28+
# Handle container name - GELF uses _container_name (with underscore prefix)
29+
if exists(._container_name) {
30+
.container_name = ._container_name
31+
} else {
32+
.container_name = "unknown"
33+
}
34+
35+
# Handle container ID
36+
if exists(._container_id) {
37+
.container_id = ._container_id
38+
} else {
39+
.container_id = "unknown"
40+
}
41+
42+
# Handle image name
43+
if exists(._image_name) {
44+
.image_name = ._image_name
45+
} else {
46+
.image_name = "unknown"
47+
}
48+
49+
# Add processing metadata
50+
.processed_by = "vector"
51+
52+
sinks:
53+
# Send to Loki
54+
loki:
55+
type: loki
56+
inputs: ["process_logs"]
57+
endpoint: "http://loki:3100"
58+
encoding:
59+
codec: json
60+
labels:
61+
job: "docker"
62+
source: "vector"
63+
# Simple field references - defaults are set in transform above
64+
host: "{{ host }}"
65+
container_name: "{{ container_name }}"
66+
# Remove label fields from the log line to avoid duplication
67+
remove_label_fields: true
68+
healthcheck:
69+
enabled: true
70+
71+
# Send to Graylog via GELF over UDP (not TCP with framing)
72+
graylog:
73+
type: socket
74+
inputs: ["process_logs"]
75+
address: "logging_graylog:12201"
76+
mode: udp
77+
encoding:
78+
codec: gelf
79+
healthcheck:
80+
enabled: true
81+
82+
# Temporary: Output to console for debugging
83+
#console_debug:
84+
# type: console
85+
# inputs: ["process_logs"]
86+
# encoding:
87+
# codec: json
88+
89+
# Global configuration
90+
api:
91+
enabled: true
92+
address: "0.0.0.0:8686"
93+
94+
data_dir: "/var/lib/vector"

0 commit comments

Comments
 (0)