Log Agent - Fluent Bit 安装与常见架构模式

Fluent Bit常见的架构

  1. Forwarder and Aggregator
  2. Sidecar / Agent deployment
  3. Network Device / Syslog aggregator

Forwarder and Aggregator


转发器与聚合器模式, 在每个application也布署一个fluent bit(Forwarder), 只负责抓取日志并转发出去给Aggregator.
Aggregator再来负责Filter跟输出处理.
适合用在需要输出到多个存储地方上, 像上图的Splunk, S3等等的.

pros:

  • application上的fluent bit就几乎不怎吃资源了, 因为只负责抓取日志跟批量转抛
  • 能在Aggregator单独扩展, 看到图上Forwarder与Aggregator之间多个Load Balancer, 扩展出来的aggregator跟load balancer注册就好
  • 需要增加更多输出的存储地方, 就图上的Destination, 以物件导向设计来说, forwarder就不必要认知destination的存在了, 统一由aggregator来管理

cons:

  • 费用问题了XD 因为需要为aggregator提供独立的资源(machine, 人力管理等等的)

Sidecar / Agent deployment


其实就是上面的简化,
将aggregator的角色, 浓缩进去上面的forwarder.
使之成为一个agent, 负责把处理好的日志给输出到存储地方.

这个模式跟上面的架构怎取舍呢?
就是这里只适合只有一个输出的存储地方, 且有把握短期内都不会改变了XD

pros:

  • 跟上面的架构比, 少了一些费用问题

cons:

  • 只要输出的存储地方有改, 就要改动非常多台

Network Device / Syslog aggregator


主要针对各种网路设备或是syslog的抓取.
关於syslog的抓取收集, 其实有Rsyslog这工具

能看fluent bit这里的示范
Rsyslog to fluent bit

---参考
Fluent bit Blog - 3 COMMON ARCHITECTURE PATTERNS WITH FLUENTD AND FLUENT BIT

环境基本安装与示范

这次讲这麽多, 来用Day19介绍的Docker Compose快速搭建环境
https://ithelp.ithome.com.tw/upload/images/20211010/201049300FAhDAriT4.png
先安装一个基本的fluent bit, 开启24224 port, 这是input plugin里的Forwar所监听的预设port
更多细节在Input套件再说.

示范的是有2个nginx container, 会把log写到指定的fluentd, 然後fluent bit就能收到log了
然後看到conf/fluent-bit.conf这档案的filter, 顺便演示了昨天讲的Filter能添加资料的作用.
Output则是把格式转成JSON.
最终将收到处理完的日志, 给输出到stdout上

目录夹下需要有以下两个档案
docker-compose.yml

version: '3'
services:
  fluentd:
    image: fluent/fluent-bit
    volumes:
        - ./conf:/fluent-bit/etc
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    hostname: fluentd
    logging:
      driver: "json-file"
      options:
          max-size: 100m
          max-file: "5"
  nginx:
    logging:
      driver: fluentd
      options:
        fluentd-address: localhost:24224
        tag: nginx
    image: nginx
    ports:
        - "8080:80"
    depends_on:
      - fluentd
    hostname: nginx
  nginx2:
    logging:
      driver: fluentd
      options:
        fluentd-address: localhost:24224
        tag: nginx
    image: nginx
    ports:
        - "8081:80"
    depends_on:
        - fluentd
    hostname: nginx2

conf/fluent-bit.conf

[SERVICE]
    flush 1
    Daemon off
    log_level error
    http_server on
    http_listen 0.0.0.0
    storage.metrics on

[INPUT]
    name forward
    listen 0.0.0.0
    port 24224

[FILTER]
    Name record_modifier
    Match *
    Record hostname ${HOSTNAME}

[OUTPUT]
    Name stdout
    Format json

ps fluent bit conf格式很像INI, 但它的indent是用4个space, 而不是tab

然後执行docker compose启动这Project

docker-compose up -d

接着打开浏览器, 输入http://localhost:8080/ 和输入http://localhost:8081//
应该要能成功看到Nginx画面,
然後

docker-compose logs -f fluentd 

应该会看到这样的讯息被输出到stdout

fluentd_1  | [{"date":1633714237.0,"log":"172.27.0.1 - - [08/Oct/2021:17:30:37 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36\" \"-\"","container_id":"bb3ba777a382ec03129096a684206639701ea77d7a017cad7447274925a4f35f","container_name":"/demo2_nginx_1","source":"stdout","hostname":"fluentd"}]

fluentd_1  | [{"date":1633714590.0,"log":"172.27.0.1 - - [08/Oct/2021:17:36:30 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36\" \"-\"","container_id":"efd839534da8051add32a05a35a7faaafcb9287ebb090482b5dece7999ff6126","container_name":"/demo2_nginx2_1","source":"stdout","hostname":"fluentd"}]

可以看到格式是JSON, 这是Output转出来的格式.
其中hostname这是我自己在filter加上的
然後log里面可以看到另外两个容器透过logging driver传过来的log, 还帮我们带上container_id和container_name,


<<:  Day 26. Zabbix 实际报警案例分享 - 机器服务被关机

>>:  【Day 25】又绕!又绕!又绕 ETW! - Bypass ETW

C语言和你 SAY HELLO!!

第二天 各位点进来的朋友,你们好阿 一样废话不多说直接上内容啦~~ ----------------...

百度存档列印

没百度帐号,想下载百度档案,,请问可以帮我吗? 万分感谢 ...

Day28 X Runtime Performance Debugging

提到 Web 前端的效能优化,有许多的技巧是聚焦在如何减少页面的「载入时间 Loading Tim...

【第十二天 - 报错型 SQL注入】

Q1. 什麽是 报错型SQL注入? 在一些网页程序出错时,会直接将错误讯息显示到前端,而部分错误讯息...

【Day 04】CVE 哪有那麽萌 - 找漏洞经验分享

动机 这篇内容讲的是我在今年暑假参加 AIS3 暑期营队软件安全组所做的专题,队友分别为郑永泰、许智...