ELK平台是由elasticsearch,logstash,kibana三大组件构成。其中elasticsearch对日志进行分布式存储,logstash负责对日志的收集,处理,分析。kibana负责提供可视化。ELK可以快速,有效的对日志进行收集处理分析,并且提供了较高的可靠性。所以是很不错的一个选择。
一、环境准备
1、准备elasticsearch分布式存储的集群架构,准备5台服务器,主机名se1-se5,IP地址范围:192.168.1.61-192.168.1.65
2、准备一台服务器作为kibana主机,主机名为kibana,ip为192.168.1.66
3、准备一台服务器作为logstash主机,主机名为logstash,ip为192.168.1.67
4、搭建好NTP时间同步服务器,ELK平台所有主机进行时间同步。配置统一的YUM源,ELK所有主机配置完整的hosts文件,以se1为管理节点,配置ssh秘钥,分发给ELK平台其他主机。
二、se1安装elasticsearch,配置elasticsearch,启动之
ELK非光盘安装包有:
其中rpm包为三大组件的安装包,zip包为插件安装包
1、se1安装elasticsearch(ELK平台依赖JAVA的环境,所有机器安装JAVA的JDK)
yum -y install java-1.8.0-openjdk.x86_64
yum -y install elasticsearch
vim /etc/elasticsearch/elasticsearch.yml
配置就这么几行,打开注释,然后补充正确信息。这里的含义是定义集群名称,节点名称,监听网络,集群包含的集群若干个
2、启动se1中的elasticsearch,然后再安装其他存储节点的elasticsearch。再同步se1的配置过去,修改节点名称,再启服务
尝试访问一下,看看服务是否正常
服务正常。给其他存储节点安装elasticsearch,修改配置启服务
启动服务后,其他节点会自动加入集群里面,而且因为se1是第一个启动的,所以他会是管理节点。
查看集群信息
三、认识curl的强大作用,-X 为设置请求方法,常见的PUT-增,DELETE-删,POST-改,GET-查
1、查看elasticsearch集群的节点信息
2、查看集群健康状态
四、ELK常用的三个插件,分别是bigdesk,kopf,head
1、安装插件(插件在那个节点安装了,就只能在那个节点使用。我们安装在se1)
elasticsearch的插件脚本,在这里。
/usr/share/elasticsearch/bin/plugin install ftp://192.168.1.254/elk/bigdesk-master.zip
/usr/share/elasticsearch/bin/plugin install ftp://192.168.1.254/elk/elasticsearch-kopf-master.zip
/usr/share/elasticsearch/bin/plugin install ftp://192.168.1.254/elk/elasticsearch-head-master.zip
查看已安装的插件
2、进行访问
例如head插件,可以让我们很轻松的可以创建索引,分片,副本数都可以方便设置。也可以查询到插入的相关数据。
五、elasticsearch增删改查数据
1、我们使用head插件创建一个名为httpd的索引,分片数为5,副本数为1
2、往索引里面新增数据,我们可以这样理解,这里的索引相当于数据库里面的库,库里面还需要表格,表格里面插入记录
往数据库httpd里面的表格mingren里面插入数据记录1,插入内容是职业:诗人,名字:礼拜,称号:诗仙,年代:唐朝
3、我们用head插件查看一下数据
数据已经存在了。我们用curl查看一下
查询成功
4、删除数据
curl -X DELETE "http://192.168.1.61:9200/httpd/mingren/1"
5、删除索引
curl -X DELETE "http://192.168.1.61:9200/httpd
六、安装kibana
yum -y install kibana
rpm -qc kibana ##查询kibana安装的默认路径
打开注释,然后填写正确配置。服务端口,监听地址,elasticsearch地址,kibana创建的索引,kibana打开的首页,ping超时时间,请求超时时间,启动超时时间。
systemctl restart kibana
systemctl enable kibana
服务起来了。
访问一下
七、批量导入离线数据,并且进行查询数据
批量导入离线数据,数据必须是json格式的,使用curl的POST的方式上传,上传的方式是_bulk,url的编码我们使用的是data-binary
例如我现在有3个压缩包。都是日志来的
解压
上传数据
curl -X POST "http://192.168.1.61:9200/xixi/haha/_bulk" --data-binary @accounts.json
curl -X POST "http://192.168.1.61:9200/xixi/haha/_bulk" --data-binary @shakespeare.json
curl -X POST "http://192.168.1.61:9200/xixi/haha/_bulk" --data-binary @logs.jsonl
查看数据
Firefox http://192.168.1.61:9200/_plugin/head
数据导入成功
八、分析离线数据
打开kibana的主页
刚刚导入到elasticsearch的数据有这个索引,现在我们把这个索引的数据导入kibana
导入成功后,选择discover
选择正确的数据时间
自己做数据统计
然后保存等操作,就不一一介绍了。都是点图标的操作
九、安装logstash,负责日志的收集,处理分析。另外配置一台apache的web服务器作为配合
yum -y install logstash
logstash没有配置文件,我们需要自己写一个
分步骤写出来
touch /etc/logstash/logstash.conf
测试一下这个配置文件
测试OK,这里的含义是,logstash从标准输入,经过filter处理(没配置,等于没处理),然后再进行标准输出。
新增输入格式为json格式,输出格式为rubydebug格式
测试一下效果
https://github.com/logstash-plugins 官方文档,写配置的时候,可以参考写
新增配置参数,可以这里理解,数据来源文件,路经为xxxxxx,数据读取的记录文件路径为xxxxx,数据读取的方式为,自定义数据处理的类型为
我们测试一下,启动logstash测试,然后从另外一个终端,对这2个路径出入内容后,看看情况
追加内容进去刚刚定义的2个文件的路径
看看logstash的数据收集结果
数据收集正常
设置数据来源于TCP和UDP。我们查看官网可以得知,仅仅需要定义监控的主机,端口,type就可以了
我们测试一下
另外一个终端,查看一下8888和9999端口是否开启
TCP端口接收数据正常
UDP端口接收数据正常
监控系统日志内容。
查看514端口是否开启
被监控的主机,例如se1,把info的日志,发送给logstash收集。
[root@se1 ~]# vim /etc/rsyslog.conf
systemctl restart rsyslog
logger -p local0.info -t “哈哈哈哈哈” “嘻嘻嘻嘻嘻嘻”
在logstash这边就可以接收得到了
在logstash配置文件里面,我们可以根据官网给出的文档进行参考编写配置文件,可以定义好数据源的信息,例如来源于文件?TCP?UDP?等等。编写好type,就可以区分出信息的来源了。
基本上input里面的编写规则就是如此。
接下来是filter里面的编写规则了。
grok插件,使用正则匹配,处理非结构化的日志的时候,无往不利。随便编写困难。但实用性非常广
这里的这个参数是这样来的 find / -name grok-*
这里我们是可以使用正则匹配来做自定义的数据分析的。但篇幅有限。就不做了。
这个参数是标准的apache的web日志收集参数。启动后得到的结果是这样的
会自动把日志拆分,分析。让你一目了然。
十、Web服务器安装filebeat,搭配logstash。实时把日志存储到elasticsearch里面
上面提到我是用se1安装了web服务的。那么就用这个来测试,在se1安装filebeat
1、安装filebeat
yum -y install filebeat
vim /etc/filebeat/filebeat.yml
paths:
- /var/log/httpd/access_log
document_type: log
#elasticsearch:
# hosts: ["localhost:9200"]
logstash:
hosts: ["192.168.1.67:5044"]
systemctl resatrt filebeat
systemctl enable filebeat
2、对192.168.1.61进行访问。
3、查看到elasticsearch里面会创建了apachelog的索引,并且数据在增加
4、登录kibana,对apachelog进行日志分析