ELK(elastic search+logstash+kibana)日志收集系统简单搭建(版本6.5.3)

        现在基本上有一定规模负载的项目都会用分布式来部署项目,分布式带来的好处自然就是很直观的扩大了项目的负载能力,但是随之而来的弊端就是在运维部署以及维护时候的复杂度直线上升,一个典型的例子就是项目的日志收集变得困难重重,试想如果线上的一个业务出现了问题,得去每一台机器上的日志去挨个grep……

   目前处理这种分布式日志的做法大约有三种:

  1. 机器数不是很多的话,不是不可以挨个去找错误发生的位置,然后定位。
  2. 机器数较多的话,就得写脚本然后每次设定参数去每一台机子上吧相关的日志文件抓取过来,然后放到一起grep。
  3. 搭建一套自己的日志收集系统,把需要的日志通过这个系统收集起来,然后经过处理放入类似redis、mongo、elasticsearch的数据库里面,一方面可以很方便的查看日志,另一方面还可以通过大数据计算来获取一些有用的信息,一举两得

我选择了elastic公司的ELK搭建系统,相对来说该系统操作起来比较方便,elasticsearch也是一个很好用的索引型数据库,话不多说从零开始搭建。

系统:centOS

    1.安装elasticsearch:

        https://www.elastic.co/cn/downloads/elasticsearch,进去之后可以选择相应的格式,这里为了方便,用wget直接下载了rpm格式的安装包,然后用 rpm -ivh xxx.rpm 命令直接安装好,默认安装位置可以用whereis 来查看

值得注意的是,如果选择通过压缩包或者其他方式来安装和运行的话,elasticsearch是不允许以root权限来安装的,你需要新建一个账户来chown 改变该目录的所有人和操作权限,具体操作可以在网上搜一下其他贴子,rpm包是可以帮你建立好一个elastic账户来运行elasticsearch数据库的,省去了一些麻烦。

安装完之后,若想通过外网访问默认的9200端口的话需要将/etc/elasticsearch/elasticsearch.yml中的

network.host: 0.0.0.0

设置好,这样就可以在外网访问9200了,可以直接在浏览器输入xxx.xxxx.xxxx.xxx:9200

会得到类似这样的返回值。

2. kibana的安装

    kibana作为一个可视化的图形工具,在集成elastic可视化方面可是非常方便(废话,一家公司嘛),所以直接模仿上面的安装方式来安装,https://www.elastic.co/cn/downloads/kibana需要注意的是,ELK的版本需要保持一致例如6.5.X和6.4.X是不兼容的,切记注意版本。

还是下载rpm包安装完成之后,在yml文件里面将

server.host:"0.0.0.0"
elasticsearch.username:"xxxxx"
elasticsearch.password:"xxxxx"

配置完成就可以通过外网登陆kibana来查看es里面的数据了,如果es没有auth,用户名密码就可以不用填写了。

这个界面你看到的应该是英文,网上有如何汉化的教程,大家可以去搜一下,在这里我就不做教程了。需要提一下的是,一会下面有部分用户管理的时候会用到x-pack插件,在这个版本x-pack是会默认安装到es里面的,不用手动安装了。

3. logstash

 这一步就是最后一步了,也是最关键的一步,将日志收集到es里面。

logstash也是安装es的安装方法安装好之后,这时候会在/etc/logstash/下面有一个conf.d的文件夹,在这个文件夹里面,新建一个logstash.conf的文件

sudo vim /etc/logstash/conf.d/logstash.conf

文件名可以随便起,其实位置也可以随便放,不过官方推荐放在这里。

logstash的配置文件的写法大概其就是一个“三段式”,是这个样子的:

#顾名思义 就是输入、过滤、然后输出
input{

}
filter{

}
output{

}

每个“段落”都会有很多的辅助插件来帮助你处理你要的数据,本人的场景是将一个文件夹的log文件来通过过滤输出到es中来,使用到的插件就是,file插件和grok插件

input{
	file{
		 path => "xxxxxx/*.log" #文件路径
		 start_position => "beginning" #文件开始的位置
		 type => "xxxxx" #自定义的类型
	}
}
filter{
	grok{
		match => { "message" => "\s*%{TIMESTAMP_ISO8601:time}\s*\[\s*(?<threads> 
        ([\s\S]*))\s*\]\s*%{LOGLEVEL:level}\s*%{JAVAFILE:classname}\s*-\s*(?<info> 
         ([^\r]*))"}#grok正则表达式过滤关键信息
	}
	if "_grokparsefailure" in [tags] {
    drop {}
    } #不匹配的过滤掉

}
output {
  elasticsearch { hosts => ["localhost:9200"] }#输出到es
  stdout { codec => rubydebug }#同时输出到控制台
}

这个配置的重点是如何编写正则表达式,我的正则表达式匹配的日志格式为

2018-12-26 10:09:55.236 [XNIO-2 task-60] ERROR xxx.xxx.xxx.xxx.xxxx - 解析失败

大家可以对照一下,大概就能理解,另外在kibana的开发者工具里面有一个grok测试工具,写完正则表达式之后一定要去测试一下,事半功倍。

然后启动的时候注意在 bin/logstash -f /etc/logstash/conf.d/logstash 加上知道配置文件启动,这样就可以将知道文件按照过滤格式导入es了。

4. 要点

   到此为止elk的初步搭建应该已经完成了,下面有几点注意事项

  • logstash 默认在每天8:00创建当天的索引,这个可以通过配置文件修改
  • kibana的用户管理需要许可才可以开启,大家可以通过试用凭证来开启用户验证管理,然后在es的配置文件中将用户验证打开,设置号密码后就可以在kibana开启用户管理了。

elk的搭建到此结束!希望大家可以用到

猜你喜欢

转载自blog.csdn.net/zhangqx1994/article/details/85256728