基于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处的格式化操作。

为我们定义的日志协议,其中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的负载均衡存在进一步提升的可能
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值