一.ELK
ELK提供了整套日志的解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多日志分析场合的应用。ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana,新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash。Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。Kibana 也是一个开源和免费的工具,它 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
二.ElasticSearch的分布式部署(es采用2.3版本)
172.25.78.1 |
masternode |
172.25.78.2 |
datanode |
172.25.78.3 |
datanode |
1.在每个节点部署ElasticSearch(需要java环境,在这里直接安装java的rpm包)
2.提前在每个节点做本地解析
3.masternode的配置/etc/elasticsearch/elasticsearch.yml ##配置elasticsearch
(1)定义elasticsearch分布式集群名称、节点主机名、主机的身份
(2)日志以及数据目录默认
(3)锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区
确保ES_HEAP_SIZE参数设置为系统可用内存的一半左右,当系统进行内存交换的时候,es的性能很差(如果内存不够就不要开启,否则服务无法启动)
(4)为es设置ip绑定
(5)当启动节点时,通过这个主机名列表进行节点发现,组建集群
4.启动es服务解决日志报错(/var/log/elasticsearch/my-elk.log)
vim /etc/security/limits.conf ##编辑es的限制信息
5.datanode的配置(与masternode的node配置不同,开启数据存储,关闭master)
6.es的默认端口9200
7.本地安装head 插件,它是一个用浏览器跟 ES 集群交互的插件,可以查看集群状态、集群的 doc 内容、
执行搜索和普通的 Rest 请求。
查询es安装的插件
8.通过IP:9200/_plugin/head访问ES 集群状态
绿色正常、红色集群故障、黄色部分节点恢复
点击节点的info查看信息,也可以关闭节点,操作比较灵活
9.请求测试
三.Logstash的部署(Logstash把获取的日志发送到es所在主机)
Logstash的日志收集发送的过程:数据源输入,过滤后输出到指定的位置(redis,es等)
1.rpm包安装
2.Logstash收集日志发送到es
(1)标准输入输出
(2)以键值对形式显示
(3)日志由Logstash收集后显示在终端的同时也发送到es上以web页面呈现
由于日志太多,删除日志,用命令进行测试
-f指定配置文件开启Logstash服务
在web页面查看日志
3.每次读取日志都会在用户家目录生成.since文件(Logstash收集的日志来源以及读取到什么位置,如果要重新读取日志并发送到es,需要删除此文件)
读取日志的节点号与.since文件相同
4.把其他节点的日志同步到master节点
(1)在server2指定日志接受方的IP:514,并重启rsyslog服务
(2)编辑Logstash配置文件
(3)-f指定配置文件开启服务,同时java会伪装514端口去接受server2的日志
(4)在server2进行logger测试,server1成功接受到server2的日志
(5)es成功接受日志,web页面也成功显示
5.过滤出有多行的一条日志
(1)Logstash配置文件
(2)日志成功过滤
(3)web页面显示
6.过滤httpd日志
(1)server3安装Logstash和httpd,进行日志过滤
httpd的截取的部分日志
(2)Logstash过滤httpd的日至并发送到sever1的es,httpd的Logstash配置文件如下:
Logstash自带了过滤模块在以下路径:
(3)server1上面的es成功获取到日志
四.Kibana的部署(Elasticsearch+Logstash+Kibana的结合使用,Kibana部署于server1)
Logstash把收集到的日志信息进行过滤发送到Elasticsearch,Elasticsearch把日志发送到Kibana用web页面来呈现日志详细信息
1.配置Kibana主机/opt/kibana/config/kibana.yml
指定Kibana接收的es信息主机IP以及端口
创建Kibana的索引
2.Kibana默认开启5601端口
3.Kibana的使用
(1)创建索引的内容(也就是Kibana要监控的es上面哪个日志,Kibana会自动去请求es)
下面监控的是apache的日志
(2)设置要监控的选项(柱状图、饼状图等,下面是访问量和IP主机的柱状图)
(3)把要实时查看的信息添加到仪表盘上(总访问量、故障联系人、访问峰值、访问量最高的三个IP)
五.用redis做ELK的加速访问
数据流:Logstash-->redis-->Logstash-->Elasticsearch-->Kibana
172.25.78.1(server1) |
Elasticsearch、Kibana、Logstash |
172.25.78.2(server2) |
redis |
172.25.78.3(server3) |
Logstash |
1.server2安装redis(redis的详细安装在之前的博客)
2.server3收集httpd的日志以列表的形式发送到server2上面的redis
3.server1把server2上面redis缓存的httpd日志发送到server1的Elasticsearch,不用
4.查看server2上面redis的日志已经与172.25.78.3建立连接
5.Elasticsearch已经成功收到server3上的httpd的日志信息(有apache:redis的日志)
6.查看apache:redis的日志信息(根据日志的名称,类型等来查看日志,比如要查看httpd的4XX状态码的报错,可以直接过滤出来4XX报错)
7.在测试的时候可以把日志信息打印到终端,这样也能及时发现是那个部分的错误,当时我做的时候日志始终发送不到es上,后来发现是server3之前的家目录下的.sincedb文件没有删除,以为之前已经读取了httpd的日志不再重复读取。