将 Syslog 数据通过 Fluent Bit 发送到 Elasticsearch

Sharad Regoti 2025-12-01 14:41:02

Fluent Bit 是一款被广泛使用的开源数据收集智能体、处理器和转发器,它能让你从各种来源收集日志、指标和追踪数据,对其进行过滤和转换,然后将其转发到多个目的地。

在现代基础设施中,尽管结构化JSON日志日益普及,但系统日志(Syslog)仍是网络设备、遗留应用程序和Linux发行版的标准。然而,在每台服务器上本地分析系统日志文件并非最佳实践。

在本指南中,我们将把 Fluent Bit 设置为一个集中式 Syslog 服务器,它通过 UDP(用户数据报协议)接收日志,并将其直接发送到 Elasticsearch 进行分析。

先决条件

  • Docker 和 Docker Compose:已在您的系统上安装。
  • Elasticsearch:我们将把日志发送到一个 Elasticsearch 实例。要跟上操作,你需要有一个正在运行的实例。你可以参考这份指南在本地运行它。
  • 熟悉 Fluent Bit 的相关概念:例如输入、输出和缓冲区。如果您不熟悉这些概念,请参考官方文档

什么是 Syslog?

Syslog 是一种消息日志标准。它支持将生成消息的软件、存储消息的系统以及报告和分析消息的软件分离开来。

系统日志消息通常通过 UDP 端口514(或非root环境中的5140)传输。由于它是一种“发后即忘”的协议,因此速度快且轻量,非常适合从路由器、防火墙和轻量级Linux容器进行大量日志记录。然而,原始的系统日志文本难以查询。通过使用 Fluent Bit,我们可以接收这些消息,对其进行结构化处理,并将它们存储在 Elasticsearch 等搜索引擎中。

要了解有关 Syslog 的更多信息,您可以参考Syslog维基百科页面

我们的用例

在本演示中,我们将使用 Docker Compose 创建一个模拟环境:

  • Fluent Bit: 配置为监听 UDP 端口5140以接收系统日志(Syslog)流量。
  • Alpine loggers: 两个独立的 Alpine Linux 容器,将充当“网络设备”。它们将使用logger命令每10秒生成一次日志消息,并将其发送到我们的 Fluent Bit 容器。
  • Elasticsearch:我们的日志将被存储和索引的目的地。

操作说明

1. 创建项目目录

首先,创建一个目录来存放你的配置文件和 Docker Compose 文件。

mkdir fluent-bit-syslog-demo
cd fluent-bit-syslog-demo

2. 创建 Fluent Bit 配置

创建一个名为 fluent-bit/config 的目录,并在其中创建一个名为 fluent-bit.yaml 的文件,内容如下:

service:
  flush: 1
  log_level: info
  parsers_file: parsers.conf
 
pipeline:
 
  inputs:
    - name: syslog
      mode: udp
      listen: 0.0.0.0
      port: 5140
 
  outputs:
    - name: es
      match: '*'
      # CHANGE THESE TO MATCH YOUR ELASTICSEARCH SETUP
      host: 192.168.1.5
      port: 9200
      index: syslog-data
      http_user: elastic
      http_passwd: rslglTS4
      suppress_type_name: 'On'

此文件指示 Fluent Bit 监听系统日志消息,并将其转发到您的 Elasticsearch 实例。

注意:更新输出部分中的 host, http_user 和 http_passwd,使其与您实际的 Elasticsearch 凭据匹配。

3. 创建 Docker Compose 文件

创建一个名为 docker-compose.yaml 的文件,内容如下:

services:
  fluent-bit:
    image: 'fluent/fluent-bit:latest'
    container_name: fluent-bit
    ports:
      - '6000:5140/udp'
      - '24224:24224'
    volumes:
      - './fluent-bit/config/fluent-bit.yaml:/fluent-bit/etc/fluent-bit.yaml'
    networks:
      - syslog-test
    restart: unless-stopped
    command: '-c /fluent-bit/etc/fluent-bit.yaml'
  alpine-logger-1:
    image: 'alpine:latest'
    container_name: alpine-logger-1
    depends_on:
      - fluent-bit
    networks:
      - syslog-test
    command: |
      /bin/sh -c " apk add --no-cache util-linux && while true; do
        logger -n fluent-bit -P 5140 -t alpine-test \"This is a test message from Alpine Logger 1 at \$(date)\"
        sleep 10
      done "      
  alpine-logger-2:
    image: 'alpine:latest'
    container_name: alpine-logger-2
    depends_on:
      - fluent-bit
    networks:
      - syslog-test
    command: |
      /bin/sh -c " apk add --no-cache util-linux && while true; do
        logger -n fluent-bit -P 5140 -t alpine-test \"This is a test message from Alpine Logger 2 at \$(date)\"
        sleep 10
      done "      
networks:
  syslog-test:
    driver: bridge

此文件定义了我们的 Fluent Bit 服务以及两个生成流量的 Alpine 容器。Alpine 容器使用 logger 命令行界面以 Syslog 格式创建日志。

4. 运行容器

使用 Docker Compose 启动环境:

docker-compose up -d

容器运行后,Alpine 实例会立即开始将日志发送到 Fluent Bit,后者会将日志转发到 Elasticsearch。

5. 在 Elasticsearch 中验证日志

注意:我们仅在 Elasticsearch 中创建了模式为 syslog-data* 的索引。要在 Kibana 中查看这些日志,您需要创建一个数据视图。

6. 清理

docker compose down -v

总结

在本指南中,我们成功使用 Fluent Bit 搭建了一个轻量级的 Syslog 收集器。我们模拟了一个真实的环境,其中多台服务器通过 UDP 将日志发送到一个中心点。Fluent Bit 收集这些日志并将其传输到 Elasticsearch 进行存储和分析。

当然,把各类 Metrics、Logs、Traces、Profiles 相关数据构建起来,也只是构建了数据底座,如果没有办法从数据中提取洞察,没有办法帮我们排障,那可观测性体系就失去了意义。快猫星云的 Flashcat 产品,以开源夜莺为内核打造的统一可观测平台,是国内顶级互联网公司可观测性实践的产品化落地,赋能千行百业快速构建统一的可观测性体系和数据驱动的稳定性治理框架,用 AI 驱动,加速您的故障定位!申请产品技术交流和试用

原文:https://thenewstack.io/shipping-syslog-data-to-elasticsearch-with-fluent-bit/

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat
Flashduty
Flashduty