ELK之logstash
最近在工作中发现一些服务 不是经常使用,所以当出现内存溢出的时候无法实时感知到,所以我这边使用了logstash,之前有考虑过zabbix但是zabbix日志监控实施起来比较麻烦 并且日志查看起来非常麻烦,最后发现logstash有日志监控的功能并且可以将日志保存在Elasticsearch中并且可以在Kibana中显示出来。接下来我将下具体实现:
首先我搭建的是Elasticsearch+logstash+Kibana+filebeat elk的搭建我就不讲了 之前的文章已经介绍过了。Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。并且filebeat不需要配置正则表达式就可以达到很好的效果。当然有些人会在Filebeat和Elasticsearch加一层redis,但是日志量不是很大,完全没必要加,如果怕Elasticsearch宕机导致一部分日志没有收集到可以考虑加redis
我目前所设计的架构是:
安装filebeat的话非常简单:
rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
sudo rpm -vi filebeat-5.1.1-x86_64.rpm
接下来就是配置了:
配置文件是/etc/filebeat/filebeat.yml这个文件
paths:对应的是日志收集的文件目录
document_type:是设置该文件的自定义类型(在设置logstash的时候会用到)
output部分是将日志实时输出到logstash中进行处理
hosts:设置logstash的IP地址以及暴露的端口号
其余的默认就可以了
设置好之后我们就可以去logstash中进行设置了
在logstash中对应几个文件如下
logstash-stdin.conf对应的是日志输入的时候进行处理也就是input部分
logstash-output-online-java.conf和logstash-output-pre-java.conf是output部分
logstash-filter-pre-java.conf是filter部分
这三个之前我是现在一个文件因为当时没有考虑大大量配置,如果有大量配置的话如果放在一个文件不利于维护
首先看下logstash-stdin.conf的内容
input部分直接是用filebeat的模块指定输入时的端口号以及字符格式类型
ports部分指定的是输入到logstash的端口好也就是logstash服务
logstash-filter-pre-java.conf是过滤部分,考虑到日志量比较大,并且有些日志只是一些dubbo的信息,所以我和dev讨论是否可以直接过滤掉 这样会有便于查找问题
目前就过滤掉这些字符当然filter中还可以设置很多东西 这里就不讲了
接下来是output的部分是最关键的部分,当我们从input收集到日志的时候并且处理完成之后 我们需要把这些日志放到Elasticsearch中
并且当出现”java.lang.OutOfMemoryError”关键字的时候 第一时间发送邮件报警
其中关心的是hosts指定的是Elasticsearch服务地址和端口号
index是索引的名字,我这里按照日期将他们按天分开
if下面的是判断语句当内存溢出的关键字出现在messages的时候我将发送报警邮件
to是指发送给谁
from指的是从那里发送过来
address指的是smtp的地址
username和password我就不说了
下面的分别是标题和内容
实现效果见: