内容简介:针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析。1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到Redis消息队列。2.在另外一台服务器上部署Logstash,作为Indexer的角色,从Redis消息队列中读取数据(可以对数据进行处理),输出到Elasticsearch-Master主节点。
针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析。
1.ELK整体方案
1.1 ELK架构图
1.2 ELK工作流程
1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到 Redis 消息队列。
2.在另外一台服务器上部署Logstash,作为Indexer的角色,从Redis消息队列中读取数据(可以对数据进行处理),输出到Elasticsearch-Master主节点。
3.Elasticsearch-Master主节点内部与副节点同步数据。(Elasticsearch集群建议3个服务以上奇数)
4.Kibana部署一台服务器内,读取Elasticsearch集群数据,展示Web查询页面,提供数据展示。
2.消息队列选型
2.1 Redis
在我这个最终方案中,选择了使用Redis作为消息队列进行缓冲,降低Elasticsearch压力,起到削峰作用,主要原因还是由于公司考虑成本问题,日志收集也是只针对我们单个项目组来使用,所以选择了公司现在就已经有的Redis集群进行复用。
2.2 Kafka
最初方案中,在消息队列上选择的是Kafka,毕竟Kafka天生就是做为消息队列的,具体二者的毕竟在这里我就不多说了,百度上一大堆。
3.安装
这里就不在这里写出来了,提供三个地址仅供参考:
4.Logstash配置
4.1 log2redis
从日志文件读取到redis
#从日志文件读取数据 #file{} #type 日志类型 #path 日志位置 # 可以直接读取文件(a.log) # 可以所有后缀为log的日志(*.log) # 读取文件夹下所有文件(路径) #start_position 文件读取开始位置 (beginning) #sincedb_path 从什么位置读取(设置为/dev/null自动从开始位置读取) input { file { type => "log" path => ["/root/logs/info.log"] start_position => "beginning" sincedb_path => "/dev/null" } } #根据时间戳分隔日志 #grok 区分日志中得字段 filter { multiline { pattern => "^%{TIMESTAMP_ISO8601} " negate => true what => previous } #定义数据的格式 grok { match => { "message" => "%{DATA:datetime} - %{DATA:logLevel} - %{DATA:serviceName} - %{DATA:ip} - %{DATA:pid} - %{DATA:thread} - %{DATA-msg}"} } } #输出数据到Redis #host Redis主机地址 #port Redis端口 #db Redis数据库编号 #data_type Redis数据类型 #key Redis的key #password Redis密码 output { redis { host => "ip" port => "6379" db => "6" data_type => "list" password => "password" key => "test_log" } } 复制代码
4.2 redis2es
从redis读取到es
#从redis内读取数据 #host Redis主机ip #port Redis端口 #data_type Redis数据类型 #batch_count #password Redis密码 #key Redis读取Key input { redis { host => "ip" port => "6379" db => "6" data_type => "list" password => "password" key => "test_log" } } #数据的输出我们指向了es集群 #hosts Elasticsearch主机地址 #index Elasticsearch索引名称 output { elasticsearch { hosts => "ip:9200" index => "logs-%{+YYYY.MM.dd}" } } 复制代码
以上所述就是小编给大家介绍的《ELK日志分析方案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP Cookbook
Adam Trachtenberg、David Sklar / O'Reilly Media / 2006-08-01 / USD 44.99
When it comes to creating dynamic web sites, the open source PHP language is red-hot property: used on more than 20 million web sites today, PHP is now more popular than Microsoft's ASP.NET technology......一起来看看 《PHP Cookbook》 这本书的介绍吧!