干货实战|基于Elastic Stack的日志分析系统
Elastic Stack简介
Elastic Stack是Elastic公司旗下的一系列软件总称,包括Elasticsearch、Logstash、Kibana和Beats。Elasticsearch是一个分布式搜索引擎,负责数据的存储、查询,支持高并发的写入与查询;Logstash是动态数据收集管道,可以进行数据的清洗、格式化等处理;Kibana是基于Elasticsearch的数据可视化平台,提供种类丰富的图表来呈现数据;Beats通常部署在生产环境下,扫描日志文件并向Elasticsearch或Logstash发送数据,在本文中我们使用FileBeat。
Elastic Stack的应用非常广泛,常见的有日志管理与分析、指标分析、性能监测、应用搜索等。本篇文章中我们借助腾讯云的Elasticsearch、使用Elastic Stack搭建自动化流转过程的监控与统计系统。
准备工作
日志消息协议
前边提到,Logstash是可以进行数据处理的,所以对于日志文件的格式并没有要求,只需要后期在Logstash处借助grok进行格式化即可。方便起见,在本次使用中我们统一了日志消息协议,并统一使用json格式单独存储,因此省去了Logstash处的格式化操作。
图1. 自动化流转日志消息协议
图1为我们定义的日志协议,其中log_type字段用于在Elasticsearch中建立索引(相当于我们熟悉的数据表),phase、finish_time是我们后期监控与统计主要的划分维度,miles是我们监控的指标。其他的一些字段是我们业务中会使用到的信息,主要用于后期统计使用。
日志获取方式
在我们的使用中,日志的产生源有两大类:已完成开发的和正在进行开发的。对于前者,为了避免重新开发带来的工作量,我们采取定时扫库的方式“自给自足”的产生日志消息;对于后者,我们要求开发根据上述日志消息协议生产日志。两种日志都需要通过部署在环境内的FileBeat发送至Logstash,再由Logstash发送至Elasticsearch中。
数据接入
日志的准备
以Python为例,将日志消息msg使用fp.write(json.dumps(msg))输出到文件中
Beats-Logstash-Elasticsearch接入
Logstash配置(conf)
input {
beats {
port => 8888
codec => "json"
}
}
output {
elasticsearch {
hosts => ["<elasticsearch_ip>:<elasticsearch_port>"]
index => "%{log_type}"
}
stdout {
codec => rubydebug
}
}
上述配置中,Logstash监听本地8888端口、并使用json解码器对消息进行解析。对于解析后的消息,根据消息中的log_type字段发送至Elasticsearch对应的索引中,同时在命令行中输出。
Logstash启动
./bin/logstash -c logstash.conf(可以使用nohup)
FileBeat配置(yml)
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/app/wsd_cron_agent/script/logs/*.log
output.logstash:
hosts: ["<logstash_ip>:<logstash_port>"]
上述配置中,FileBeat定时扫描/usr/local/app/wsd_cron_agent/script/logs/路径下的log文件,发送至远端的Logstash处。
FileBeat启动
./filebeat -e -c filebeat.yml(可以使用nohup)
接下来FileBeat和Logstash就会自动将路径下的日志文件传输至Elasticsearch了。
Kibana可视化
对于第一次接入的数据,首先要做的是创建索引,操作方法是[Management]->[Index Patterns]->[Create Index Pattern]->Index pattern中输入索引名->单击[Create]
图2. Kibana建立索引
之后是使用Kibana自带的visualize进行数据的可视化,这里就是根据自身需求进行设置即可。可以在Dashboard中制作一个自定义的监控窗口,可以清楚直接的看到各个自动化流程的运转情况。
图3. 地图中业流转Dashboard
一些需要注意的问题 & 可以改进的地方
总的来说,Elastic Stack搭建日志分析系统是非常简单、方便的,不过需要注意以下几点:
Elasticsearch是一种非关系型数据库,不能做连表查询操作,因此必须将所有信息都放在一条消息/一例数据中
请避免重复日志消息的产生
目前得到的消息是腾讯云在和Elastic官方谈合作,之后会有一些插件(如报警功能)加入,使得监控和分析功能更加强大
由于之前没有接触过Elastic Stack,所以也是磕磕碰碰的做了一些尝试,一些地方为了避免出错做了简化,之后可以再进一步优化以提升性能:
需要单独产生日志消息,对于开发不够方便;可以考虑在Logstash出增加grok操作对日志进行格式化后再送入Elasticsearch
FileBeat和Logstash的负载均衡存在进一步提升的可能
中生代技术社区 Elasticsearch在线分享直播预告
﹀
﹀
﹀
2020-04-15 15:00 线上Elasticsearch大数据搜索和分析应用 网络研讨会
演讲者:朱杰 Jerry
现在是 Elastic 解决方案架构师,专注于 Elastic Stack的解决方案的设计和咨询。在加入Elastic之前,Jerry有十五年软件开发经验,涉及服务器端程序、Web、移动开发等多个领域。在大数据分析领域也有十年实践经验,熟悉Hadoop 生态、Elastic Stack。
演讲者:李季
北京云科创凯信息技术有限公司董事长兼CEO,公司创始人,保险业务专家,计算机技术专家。曾在PICC总部研发中心任主管项目经理,负责保险核心业务系统研发管理工作。10年+信息技术公司运营管理经验。
Elasticsearch在当今大数据搜索和分析领域热度非常之高,稳居DB-Engine搜索引擎排行榜首,本次研讨会为你讲解Elasticsearch搜索能力的演进,强大的搜索和聚合能力,适用的大数据应用场景,和Hadoop生态的配合使用,使用高级安全特性保护您的大数据安全。并邀请我们合作伙伴云科凯创介绍相关行业应用案例。
报名方式:识别图片二维码或阅读原文报名
想要加入中生代直播群的小伙伴,请添加群助手大白的微信
申请备注(姓名+公司+技术方向)才能通过哦!
点在看,让更多人看到!
上一篇: 推荐阅读如何让文案更“撩人”?7个让销量暴增的文案套路
下一篇: 不想过马路