ELK+FileBeat日志分析系统
filebeat:负责将日志数据传输到redis
Redis:暂时进行缓存
logstash:收集缓存中的日志数据
elasticsearch:负责存储日志数据
kibana:负责显示日志的数据
流程图
拉取filebeat镜像
docker pull elastic/filebeat
启动filebeat
docker run -d --name filebeat -v /docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /docker/www:/docker/www --privileged=true elastic/filebeat:7.5.1
vim filebeat.yml
配置文件
filebeat.inputs:
- type: log
paths:
- /docker/www/lmrs-2008/storage/logs/laravel.log
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
multiline.timeout: 5s
scan_frequency: 5s
fields:
index: 'laravel-log'
output.redis:
hosts: ["192.168.126.105:6379"]
db: "0"
timeout: 5
password: "lmrs"
key: "%{[fields.index]:otherIndex}"
vim kibana.yml
配置文件
server.name: "kibana"
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.126.105:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
logging.dest: /var/log//kibana/kibana.log
i18n.locale: "zh-CN"
本作品采用《CC 协议》,转载必须注明作者和本文链接
楼主你好,问一下为什么 filebeat 和 es 中间为什么要插入 redis 和 logstash 呢? 明明filebeat 可以直接插入es, 看到过类似的部署方案,但一直没太明白。 希望楼主可以帮忙解惑~
@ligkwww 插入es是需要一个格式的,不大了解能不能直接转为特定的格式提交上es。增加redis和logstash这两块的话,可以把数据做一个暂存的,通过logstash读取并且转为特定的格式。
@HelloWorld-Q @sunrise丶 好的,谢谢。 那我理解原因大概有两点:
这个链路有长啊,感觉把简单的事情做的有点复杂了。 可以看看这个 github.com/lizhichao/log2ck 直接监听文件写入 clickhouse。实时写入 ,一个节点就可以到达每秒上千万的写入速度完全够用
我觉得用
redis
做消息中转有些问题,如果是解决网络链路中断的问题,每增加一个网络访问环节都会增加这个网络的不可靠性,通过网络访问redis
也适用这个逻辑。另外一个角度说,无论filebeat
还是logstash
都有相应的本地队列机制,且filebeat
有重试队列,logstash
有死信队列,用来处理消息投递失败的问题。