此篇文章主要参考的是ELK-7.1.1 安装部署数据收集展示,有兴趣可以看原创文章。
ELK简介
ELK是Elasticsearch+Logstash+Kibana的简称:
- ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写
- Logstash是一个收集,处理和转发事件和日志消息的工具
- Kibana是Elasticsearch的开源数据可视化插件,为查看存储在ElasticSearch提供了友好的Web界面,并提供了条形图,线条和散点图,饼图和地图等分析工具
总的来说,ElasticSearch负责存储数据,Logstash负责收集日志,并将日志格式化后写入ElasticSearch,Kibana提供可视化访问ElasticSearch数据的功能。
安装java
有2台测试机上面都需要安装jdk 8,有2个方法,一是直接通过yum install java java-devel
来安装,喜欢折腾的朋友可以按以下方法:
打开https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载jdk-8u211-linux-x64.tar.gz
包,下载需要oracle的账号。下载到机器上面之后,运行:
1 | tar zvxf jdk-8u211-linux-x64.tar.gz |
环境准备
准备2台linux机器,
- 192.168.1.60 node-1
- 192.168.1.61 node-2
关闭防所有服务器的火墙和 selinux:
1 | systemctl disable NetworkManager |
注意:需要重启系统才能生效。
安装elasticsearch
先在https://www.elastic.co/cn/downloads/下载安装包,目前最新版本是7.1.1,直接使用rpm包就可以了:
1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-x86_64.rpm |
然后使用rpm -ivh
进行安装,注意这里会自动创建elasticsearch
用户。由于es是只能运行在非root用户下,如果使用压缩包的方法进行安装的话,则需要手工创建用户useradd -M -s /sbin/nologin elasticsearch
。
1 | [root@master ELK]# rpm -ivh elasticsearch-7.1.1-x86_64.rpm |
安装完成之后,修改配置文件如下:
1 | [root@master ELK]# cat /etc/elasticsearch/elasticsearch.yml |grep -v '^#' |
使用systemctl start elasticsearch.service
启动服务:
安装elasticsearch head
elasticsearch-head插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,但有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能。elasticsearch-head是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。同时Elasticsearch7.x版本不能使用命令直接安装head插件,其官方地址是https://github.com/mobz/elasticsearch-head#running-with-built-in-server。
chrome插件安装
官方给出了很多方法运行Head,从我个人使用来看,直接使用chrome插件就可以显示了,插件安装地址:ElasticSearch Head,安装完成之后就可以直接使用了。
手工安装服务
另一种安装方法,是在一台ES上面安装head,做为系统服务,到时直接WEB访问即可。
首先修改ES配置:
1 | 增加参数,使head插件可以访问es |
下载插件,解压至/usr/local目录下
1 | wget https://github.com/mobz/elasticsearch-head/archive/master.zip |
安装node/npm命令
1 | wget https://npm.taobao.org/mirrors/node/latest-v12.x/node-v12.0.0-linux-x64.tar.gz |
然后在进入elasticsearch-head进行安装:
1 | cd /tmp |
再修改2个配置文件:一是修改/usr/local/elasticsearch-head/Gruntfile.js,在keepalive下面增加hostname,不要忘记原有的true后面加逗号。
1 | [root@master conf.d]# grep -n -B5 hostname /usr/local/elasticsearch-head/Gruntfile.js |
再修改连接地址/opt/elasticsearch-head-master/_site/app.js,
1 | [root@master conf.d]# grep -n 192.168.1 /usr/local/elasticsearch-head/_site/app.js |
修改完成之后,直接运行grunt server &
,然后在浏览器访问192.168.1.60:9200
,如下图:
查看数据:
编写一个shell,直接使用
1 | [root@master elasticsearch-head]# cat /usr/local/elasticsearch-head/es_head |
安装与配置logstash
安装logstash
直接在ES-192.168.1.60上面安装logstash,所以就不需要配置java环境了。部署如下:
1 | [root@master ELK]# rpm -ivh logstash-7.1.1.rpm |
测试方法
测试标准输入输出
运行/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug }}'
来测试标准输入输出。
测试输出到文件
使用/usr/share/logstash/bin/logstash -e** **'input { stdin{} } output { file { path => "/tmp/log-%{+YYYY.MM.dd}messages.gz"}}'
来实现。
红框为输入的内容,这样我们就可以去查看log文件了:
1 | [root@master ~]# tail /tmp/log-2019.08.23messages.gz |
测试输出到 elasticsearch
使用/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["192.168.1.61:9200"] index => "mytest-%{+YYYY.MM.dd}" }}'
来将结果存放在ES上。如下:
登陆192.168.1.61这台ES,可以发现放在以下目录了:
1 | [root@localhost ~]# cd /var/lib/elasticsearch/nodes/0/indices/ |
我们可以通过ES HEAD来查看数据,如下:
kibana
安装与配置的过程如下,注意,配置项kibana.index
需要修改一下,不然会报Kibana server is not ready yet
这个错。
1 | [root@localhost src]# rpm -ivh kibana-7.1.1-x86_64.rpm |
访问http://192.168.1.60:5601/,正常就可以出现以下页面,
实例:收集nginx日志
目的是为了将nginx日志收集至es,以及分析使用。具体的做法是在一台机器上面安装nginx、redis;然后由filebeat将nginx的日志采集至redis上。然后再由logstash收集至elasticsearch上。感觉好复杂啊。。。
nginx安装与配置
这边偷懒,直接yum源安装。yum install nginx
即可。然后修改/etc/nginx/nginx.conf
配置,在http配置块中加入如下配置:
1 | log_format access_log_json '{"user_ip":"$http_x_forwarded_for","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_rqp":"$request","http_code":"$status","body_bytes_sent":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}'; |
再使用systemctl start nginx
即可。测试访问一下,如果/var/log/nginx/access.log有正常输出json格式,都表示配置正常。
redis
同nginx一样,直接yum安装。为了安全,主要修改bind以及requirepass这2个配置:
1 | [root@localhost ~]# cat /etc/redis.conf |egrep '^bind|^requirepass' |
启动redis服务,使用如下命令查看redis是否正常
1 | [root@localhost ~]# redis-cli -h 192.168.1.61 -a 123456 |
filebeat
Filebeat是一种轻量型方法,用于转发和汇总日志与文件。支持将数据直接写入到 redis 服务器,本步骤为写入到 redis 当中的一个可以,另外 filebeat 还支持写入到 elasticsearch、logstash 等服务器。
1 | [root@localhost src]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-x86_64.rpm |
修改filebeat配置如下:
1 | [root@localhost ~]# cat /etc/filebeat/filebeat.yml |grep -v "#" |grep -v '^$' |
注意,output.redis,要按照相关配置来填写,由于测试并没有直接输出到elasticsearch,需要将output.elasticsearch的相关注释去除。
再使用systemctl start filebeat
启动服务后,使用redis-cli -h 192.168.1.61 -a 123456
去查看是否存在key名为nginx-log。如果存在,则表示正常。这样就表示filebeat已经正常将nginx日志收集至redis里面了。
logstash
先配置规则:
1 | [root@master ~]# cat /etc/logstash/conf.d/nginx-log.conf |
再重启systemctl restart logstash
即可。
kibana展示
访问192.168.1.60:5601
,然后创建索引:
输入nginx-log*
,可以查看到有1个索引,点击下一步:
在第二步,选择时间字段名称:
这样完成之后,就可以在 Discover 处看到刚刚看到的nginx-log了,这样就表示正常展示了。
参考资料
ELK-7.1.1 安装部署数据收集展示:https://hacpai.com/article/1559892603869
ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台:https://ken.io/note/elk-deploy-guide
Elasticsearch教程:https://www.sojson.com/blog/81.html
ELK(使用RPM包安装配置ELK):https://www.cnblogs.com/minseo/p/9117768.html
Elasticsearch6.0以上版本head插件安装:https://www.cnblogs.com/minseo/p/9117470.html