Fluent Bit:Syslog 数据高效入驻 Elasticsearch

55 阅读4分钟

本指南展示如何使用Fluent Bit作为中央Syslog服务器,通过UDP收集来自Alpine容器的日志,并将其转发到Elasticsearch进行存储和分析。

译自:Shipping Syslog Data to Elasticsearch With Fluent Bit

作者:Sharad Regoti

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

在现代基础设施中,尽管结构化 JSON 日志记录兴起,但 Syslog 仍然是网络设备、传统应用程序和 Linux发行版 的标准。然而,在每台服务器上本地分析 Syslog 文件并不实际。

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

先决条件

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

什么是 Syslog?

Syslog 是一种消息日志记录标准。它允许生成消息的软件、存储消息的系统以及报告和分析消息的软件相互分离。

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

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

我们的用例

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

  • Fluent Bit:配置为监听 UDP 端口 5140 的 Syslog 流量。
  • Alpine 日志记录器:两个独立的 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 监听 Syslog 消息并将它们转发到你的 Elasticsearch 实例。

注意: 更新输出部分中的 hosthttp_userhttp_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 CLI 以 Syslog 格式创建日志。

4. 运行容器

使用 Docker Compose 启动环境:

docker compose up -d

一旦容器运行起来,Alpine 实例将立即开始向 Fluent Bit 发送日志,Fluent Bit 会将它们转发到 Elasticsearch。

5. 在 Elasticsearch 中验证日志

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

6. 清理

docker compose down -v

结论

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