Visualizing Log Files with Netdata and Fluent Bit
To visualize log files on multiple machines using Netdata and Fluent Bit, you’ll need to set up a data pipeline. Here’s a high-level overview of how you can achieve this:
- Install Fluent Bit on each machine with log files
- Configure Fluent Bit to collect and parse your log files
- Set up Netdata on a central server or each machine
- Configure Fluent Bit to send data to Netdata
- Configure Netdata to receive and visualize the data from Fluent Bit
Let’s break this down into more detailed steps:
1. Install Fluent Bit
Follow the official installation guide for your operating system: Fluent Bit Installation Guide
2. Configure Fluent Bit
Create a configuration file (usually /etc/fluent-bit/fluent-bit.conf
) to collect and parse your log files. Here’s a basic example:
[INPUT]
Name tail
Path /path/to/your/logfile.log
Parser your_log_parser
[PARSER]
Name your_log_parser
Format regex
Regex ^(?<time>[^ ]*) (?<message>.*)$
Time_Key time
Time_Format %Y-%m-%d %H:%M:%S
[OUTPUT]
Name http
Match *
Host your_netdata_host
Port 19999
URI /api/v1/collector/charts
Format json_stream
Adjust the Path
, Parser
, and Regex
fields according to your log format.
3. Install Netdata
Follow the official installation guide: Netdata Installation
4. Configure Netdata
Enable the web_log plugin in Netdata by editing /etc/netdata/netdata.conf
:
[web_log]
enabled = yes
5. Start Both Services
sudo systemctl start fluent-bit
sudo systemctl start netdata
Now, Fluent Bit should be collecting your log data and sending it to Netdata, which will visualize it in real-time.
Advanced Configuration
This is a basic setup. Depending on your specific needs, you might want to add more advanced configurations, such as:
Filtering and Transforming Log Data
Add filters to process your logs before sending them:
[FILTER]
Name grep
Match *
Regex message error|warning|critical
[FILTER]
Name record_modifier
Match *
Record hostname ${HOSTNAME}
Record service_name my_application
Multiple Log Sources
Monitor multiple log files by adding more INPUT sections:
[INPUT]
Name tail
Path /var/log/app1/*.log
Tag app1
Parser app1_parser
[INPUT]
Name tail
Path /var/log/app2/*.log
Tag app2
Parser app2_parser
Aggregation for Multiple Machines
If you have multiple machines, you can set up a central Fluent Bit aggregator:
# On each machine
[OUTPUT]
Name forward
Match *
Host central_fluent_bit_host
Port 24224
# On central aggregator
[INPUT]
Name forward
Port 24224
[OUTPUT]
Name http
Match *
Host netdata_host
Port 19999
URI /api/v1/collector/charts
Format json_stream
Custom Parsers
Create custom parsers for your specific log formats:
[PARSER]
Name apache_access
Format regex
Regex ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
[PARSER]
Name json_parser
Format json
Time_Key timestamp
Time_Format %Y-%m-%dT%H:%M:%S.%L
Security Considerations
When setting up this pipeline, consider:
- TLS/SSL Encryption: Use HTTPS for the HTTP output
- Authentication: Add authentication headers if required
- Network Security: Ensure proper firewall rules between machines
- Log Rotation: Configure log rotation to prevent disk space issues
Netdata Configuration for Better Visualization
Configure Netdata to better visualize your log data:
# In /etc/netdata/go.d/web_log.conf
jobs:
- name: custom_app_logs
path: /var/log/custom_app/*.log
custom_log_format:
pattern: '(?P<address>[\da-f.:]+) - (?P<user>.*) \[(?P<time>.*)\] "(?P<method>[A-Z]+) (?P<url>.*) HTTP/[0-9.]+" (?P<code>[0-9]+) (?P<bytes_sent>[0-9]+) "(?P<referer>.*)" "(?P<user_agent>.*)"'
time_format: "%d/%b/%Y:%H:%M:%S %z"
Alerting Configuration
Set up alerts in Netdata based on log patterns:
# In /etc/netdata/health.d/logs.conf
alarm: high_error_rate
on: web_log.custom_app_logs
lookup: sum -5m unaligned of errors
units: errors
every: 1m
warn: $this > 100
crit: $this > 500
info: High error rate detected in application logs
Troubleshooting
Common issues and solutions:
- Fluent Bit not sending data: Check connectivity and firewall rules
- Parser not matching: Test your regex patterns with sample log lines
- High memory usage: Adjust buffer sizes and flush intervals
- Missing data in Netdata: Verify the API endpoint and data format
This setup provides a robust solution for centralizing and visualizing logs from multiple machines using Netdata and Fluent Bit.