根据需求对LEK进行改进

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangkezhi_471885889/article/details/85764032
  1. LEK解释
    ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana。
    利用Logstash对日志文件中日志进行收集,收集的数据存入Elasticsearch中,然后通过前端Kibana进入数据汇总、分析和展示。

  2. 问题
    1、由于公司系统日志量太大,担心收集所有日志直接插入ES会承受不了。
    2、由于公司系统需要把收集到的日志根据一个唯一编号进行关联,才能知道某一个流程是否出现问题,问题出现在哪一个步骤。所以Kibana不能满足展示需求。
    3、需要对系统单量进行监控,及时报警异常情况。

  3. 解决方案
    1、对问题1解决方案:在系统中进行重要日志埋点,只收集埋点日志。并且每台业务系统收集到的日志不直接插入Elasticsearch中,而是中间加了一个redis缓冲,在用Logstash的server进行推送到Elasticsearch中。
    2、对问题2解决方案:定制开发前端页面展示,从Elasticsearch中根据各种条件查询数据并展示到页面中。
    3、对问题3解决方案:收集的埋点日志存入redis缓冲同时在发送一份到kafka中,利用流计算平台进行数据统计,满足异常情况就发送报警消息。

  4. 流程图
    在这里插入图片描述

  5. 流程中相关代码
    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
        }
}

猜你喜欢

转载自blog.csdn.net/zhangkezhi_471885889/article/details/85764032
今日推荐