日志分析工具ELK

一、ELK简介

日志主要分为系统日志、应用程序日志和安全日志,系统运维和开发人员可通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因,那么经常分析日志可以了解服务器的负荷、性能安全性,从而及时采取措施纠正错误 通常日志被分散的储存不同的设备上,如果管理数十上百台服务器,还依次登录每台机器的传统方法查阅日志,这样太繁琐、效率低;这时可使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。 完整的集中式日志系统,需要包含以下几个主要特点: 1、收集:能够采集多种来源的日志数据 2、传输:能够稳定的把日志数据传输到中央系统 3、存储:如何存储日志数据 4、分析:可以支持 UI 分析 5、警告:能够提供错误报告,监控机制

 当集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般用grep、awk和wc等Linux命令能实现检索和统计,但对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

	开源实时日志分析ELK平台能够完美的解决上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成,官方网站:https://www.elastic.co/products

	Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、自动搜索负载等。

	Logstash是一个完全开源的工具,可对日志进行收集、分析,并将其存储供以后使用(如搜索),一般工作方式为C/S架构,Client端安装在需要收集日志的主机上,Server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch。

Kibana 也是一个开源和免费的工具,可为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。 如图Logstash收集产生的Log,并存放到ElasticSearch中,而Kibana则从ES中查询数据生成图表,再返回给Browser。

二、ELK平台部署

1、环境准备:

1)Elasticsearch服务端如下: 系统:centos7-3.10.0-514.el7.x86_64 IP:192.168.152.170 平台版本: elasticsearch-6.3.0
kibana-6.3.0-linux-x86_64
logstash-6.3.0

2)客户端如下: 系统:centos7-3.10.0-514.el7.x86_64 Agent_1 IP:192.168.152.168 Agent_2 IP:192.168.152.169 平台版本:logstash-6.3.0 JDK:(yum -y install java-1.8.0-openjdk**)

注:Logstash 6.x和5.x需要Java 8,服务端和客户端都需要安装。

3)关闭防火墙 systemctl stop firewalld.service

4)禁止防火墙开机自启 systemctl disable firewalld.service

5)关闭selinux sed -i 's/SELINUX=enforcing /SELINUX=disabled/g' /etc/sysconfig/selinux

2、ELK帮助 ELK官网: ELK版本发行说明:

3、ELK有两种安装方式 (1)集成环境:Logstash有一个集成包,里面包括了其全套的三个组件;也就是安装一个集成包。 (2)独立环境:三个组件分别单独安装、运行、各司其职。(比较常用) 注:本实验也以第二种方式独立环境来进行演示

搭建elasticsearch服务器(IP:192.168.152.170)

第一步安装elasticsearch

1、创建elasticsearch组与用户及设置密码 注:在 Linux 环境中,elasticsearch 不允许以 root 权限来运行!所以需要创建一个非root用户,以非root用户来启动elasticsearch服务。

2、将elasticsearch解压到/usr/local/目录下(绿色包解压后直接使用即可)
tar zxf elasticsearch-6.3.0.tar.gz -C /usr/local/

3、递归修改/usr/local/elasticsearch-6.3.0/目录属性 chown -R elasticsearchuser:elasticsearchgroup /usr/local/elasticsearch-6.3.0/

4、修改elk服务器主机名和hosts文件

1)修改主机名(重启可生效) hostnamectl set-hostname elk

2)修改hosts文件 vi /etc/hosts

5、修改配置文件 vi /usr/local/elasticsearch-6.3.0/config/elasticsearch.yml

6、两种启动elasticsearch服务方式(先切换elasticsearchuser用户在启动) 1)动态启动服务 ./elasticsearch

2)后台启动服务 /usr/local/elasticsearch-6.3.0/bin/elasticsearch –d

注:以上截图一出现两条报错,意思是说服务启动时会检查系统关键配置项,但是检查未通过,所以服务启动失败。 解决方式:

root用户登录并打开系统配置文件,按照报错提示建议值设置。 vi /etc/security/limits.conf 重启elasticsearch服务,继续报上边的错如下 解决方式: 使用root用户查看硬件限制(ulimit -Hn 查看硬限制) 使用elasticsearchuser用户查看硬件限制(ulimit -Hn 查看硬限制) 注:从以上截图可以看出继续报这个错的原因是因为没有刷新过来,那怎么办呢?可以退出elasticsearchuser用户,然后重新用这个用户登陆并启动即可,如下图 现在你会发现更新过来了硬件限制,然后可以放心大胆的启动服务了。 额外给大家说一下别的的报错解决方式如下 解决方式: Root用户登陆编辑/etc/sysctl.conf文件,添加一行vm.max_map_count=655360即可 刷新配置文件 sysctl -p

7、本地服务器查看服务是否启动 netstat -antupl | grep 9200

8、网页测试(两种方式) 方式一:本地服务器上执行命令curl http://192.168.152.170:9200

方式二:浏览器访问http://192.168.152.170:9200/ 注:如使用浏览器访问不到该页面,可以换一个浏览器访问试试。

第二步安装elasticsearch-head插件

如果想实现支持额外的功能 如分布式、索引、搜索等,需要使用插件,我这里没有具体操作步骤,原因是不用插件依然可以使用,只不过功能没有那么而已,如果想加入插件或者根据公司项目需求,用到以上等功能可以添加插件,步骤简单,百度即可。

第三步安装logstash

1、解压logstash到/usr/local/(绿色包解压后直接使用即可)
tar zxf logstash-6.3.0.tar.gz -C /usr/local/

2、编辑logstash配置文件(有这个文件就直接更改,没有的话就创建一个,如下:)

1)vi /usr/local/logstash-6.3.0/config/logstash-simple.conf

2)vi /usr/local/logstash-6.3.0/config/logstash.yml

3)运行logstash,并指定运行配置文件(监听9600端口)

3、查看端口是否监听 netstat -ant

第四步安装Kibana

1、解压kibana到/usr/local/下 (绿色包解压后直接使用即可)
tar zxf kibana-6.3.0-linux-x86_64.tar.gz -C /usr/local/

2、编辑kibana配置文件vi /usr/local/kibana-6.3.0-linux-x86_64/config/kibana.yml

3、重启kibana服务 ./kibana //可能会出现如下警告(出现警告的话不影响操作,可根据实际情况修改) 注:这警告的意思是为防止未决报告在重新启动时失败,请在kibana.yml中设置xpack.reporting.encryptionKey,设置此条件可以使服务运行更安全。

4、测试 web访问http://192.168.152.170:5601

创建index patterns,先点击左侧Management,然后再点击Index Patterns,然后将右上角选项打开,根据提示选择.kibana或者messages-2018.06.25其中一个系统模板即可,然后点击Next step。

然后还是选择以下截图所提示的下拉菜单选择@timestamp即可,然后点击Create index pattern。

然后如下图,只需要点击左上角Discover即可看到创建的图像化界面。

如下截图,以图形化界面方式展现给我们。

搭建agent端服务器(agent_1 IP:192.168.152.168)

安装logstash

1、修改agent_1服务器主机名和hosts文件

1)修改主机名(重启可生效) hostnamectl set-hostname agent_1

2)修改agent_1 hosts文件 vi /etc/hosts

2、配置rsyslog(agent) vi /etc/rsyslog.conf

3、配置logstash(客户端elk)

1)解压logstash到/usr/local/(绿色包解压后直接使用即可)
tar zxf logstash-6.3.0.tar.gz -C /usr/local/

2)编辑配置文件(有这个文件就直接更改,没有的话就创建一个,如下:)
vi /usr/local/logstash-6.3.0/config/remote.conf

4、过滤查看rsyslog是否开机自启 systemctl list-unit-files | grep rsyslog 注:以上截图enabled为已开启,若是显示disabled,则需要手动使用命令设置开机自启例如: systemctl enable rsyslog.service 设置rsyslog开机自启

5、运行logstash,并指定运行配置文件(监听9600端口) /usr/local/logstash-6.3.0/bin/logstash -f /usr/local/logstash-6.3.0/config/remote.conf 注:这时候在web:192.168.1.10:5601界面刷新然后,再添加模板机会发现除了默认的两个模板外,还新增加了几个模板,其中带-es-的就是你添加的agent主机,可参考下图去理解,也可以用如下截图和上边添加默认模板时的截图做对比,会发现很明显区别。

搭建agent端服务器(agent_2 IP:192.168.152.169)

还是老样子先安装logstash! 到这里我就不在重复搭建了,可能有些童鞋会问?那agent_2怎么搭建?如果你已经做到这步,那么童鞋你就记住不管你有多少台agent客户端,都可以按照agent_1的搭建方式来做,只不过改一下对应的主机名和IP即可。