整体架构:
逻辑架构:
一个零碎(project)蕴含多个服务(service),一个服务有多个正本,elk零碎须要将不同零碎的日志对立归集,按project-service-date归集到index便于查看系统日志,防止寻找零碎所有正本日志的繁琐。
Filebeat定义所采集的零碎、服务及其日志地址,发送到project-service的topic。Logstash订阅kafka以该project结尾所有的topic,通过对立解析后增加日期信息,发往project-service-date的index中。
如果须要采集其余系统日志,更改filebeat的project,service及日志地址,并在logstash增加新的数据源(project-*)即可。
filebeat:采集日志发往kafka
input:
- 配置日志地址,监听*All.log文件,不采集error,防止日志反复采集
- 定义project和service
- 配置换行,如果非日期结尾,则合并至下一行,便于采集堆栈报错信息
Output:
- kafka:topic为projectservice
部署:
- 把配置打进镜像,在swarm集群中以global模式部署,
- Docker-compose中把监听的日志文件映射进容器
Logstash:解析数据发往es
input:kafka
- group_id:分布式环境下group_id应该雷同,可横向扩大
- topic_pattern,通过正则解决同一project的所有topic
filter:
- 通过mutate,json,grok
- 一条日志中蕴含:日志工夫,线程号,日志级别,日志信息。
- 把日志工夫里的日期解析进去,做为index里的date,插入es。
output:
- 可依据不同的条件发送至不同的数据库