转发器与聚合器模式, 在每个application也布署一个fluent bit(Forwarder), 只负责抓取日志并转发出去给Aggregator.
Aggregator再来负责Filter跟输出处理.
适合用在需要输出到多个存储地方上, 像上图的Splunk, S3等等的.
pros:
cons:
其实就是上面的简化,
将aggregator的角色, 浓缩进去上面的forwarder.
使之成为一个agent, 负责把处理好的日志给输出到存储地方.
这个模式跟上面的架构怎取舍呢?
就是这里只适合只有一个输出的存储地方, 且有把握短期内都不会改变了XD
pros:
cons:
主要针对各种网路设备或是syslog的抓取.
关於syslog的抓取收集, 其实有Rsyslog这工具
能看fluent bit这里的示范
Rsyslog to fluent bit
---参考
Fluent bit Blog - 3 COMMON ARCHITECTURE PATTERNS WITH FLUENTD AND FLUENT BIT
这次讲这麽多, 来用Day19介绍的Docker Compose快速搭建环境
先安装一个基本的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
第二天 各位点进来的朋友,你们好阿 一样废话不多说直接上内容啦~~ ----------------...
没百度帐号,想下载百度档案,,请问可以帮我吗? 万分感谢 ...
提到 Web 前端的效能优化,有许多的技巧是聚焦在如何减少页面的「载入时间 Loading Tim...
Q1. 什麽是 报错型SQL注入? 在一些网页程序出错时,会直接将错误讯息显示到前端,而部分错误讯息...
动机 这篇内容讲的是我在今年暑假参加 AIS3 暑期营队软件安全组所做的专题,队友分别为郑永泰、许智...