版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangkezhi_471885889/article/details/85764032
-
LEK解释
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana。
利用Logstash对日志文件中日志进行收集,收集的数据存入Elasticsearch中,然后通过前端Kibana进入数据汇总、分析和展示。 -
问题
1、由于公司系统日志量太大,担心收集所有日志直接插入ES会承受不了。
2、由于公司系统需要把收集到的日志根据一个唯一编号进行关联,才能知道某一个流程是否出现问题,问题出现在哪一个步骤。所以Kibana不能满足展示需求。
3、需要对系统单量进行监控,及时报警异常情况。 -
解决方案
1、对问题1解决方案:在系统中进行重要日志埋点,只收集埋点日志。并且每台业务系统收集到的日志不直接插入Elasticsearch中,而是中间加了一个redis缓冲,在用Logstash的server进行推送到Elasticsearch中。
2、对问题2解决方案:定制开发前端页面展示,从Elasticsearch中根据各种条件查询数据并展示到页面中。
3、对问题3解决方案:收集的埋点日志存入redis缓冲同时在发送一份到kafka中,利用流计算平台进行数据统计,满足异常情况就发送报警消息。 -
流程图
-
流程中相关代码
1、利用Logstash过滤器只收集埋点日志
#利用过滤器只收集埋点日志
filter {
if [message] =~ /.*monitorLogsMsg.*/{
mutate {
split => { "message" => "monitorLogsMsg" }
add_field => {
"newmsg" => "%{[message][1]}"
"classmsg" => "%{[message[0]]}"
}
}
json {
source => "newmsg"
remove_field => [ "message" ]
remove_field => [ "newmsg" ]
}
}
}
2、加redis缓冲并发送一份日志数据到kafka中
output {
#中间加了一个redis缓冲
redis {
host => "10.xx.xx.xx"
port => 6379
password => "password"
data_type => "list"
key => "keys_word"
codec => "json"
}
#发送一份到kafka中
kafka{
topic_id => "realTimeCount"
bootstrap_servers => "10.xx.xx.xx:9092"
batch_size => 5
}
}