centos7部署ELK7.1.1教程

此篇文章主要参考的是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
2
3
4
5
6
7
8
9
10
tar zvxf jdk-8u211-linux-x64.tar.gz 
mv jdk1.8.0_211 /usr/local/java

# 在/etc/profile最后面加入:
export JAVA_HOME=/usr/local/java/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

source /etc/profile
java -version #检查是否配置成功

环境准备

准备2台linux机器,

  • 192.168.1.60 node-1
  • 192.168.1.61 node-2

关闭防所有服务器的火墙和 selinux:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
systemctl  disable  NetworkManager
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
cat >>/etc/security/limits.conf <EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 2048
* hard nproc 4096
EOF
echo "vm.max_map_count=655360" >>/etc/sysctl.conf
echo "fs.file-max=655360" >>/etc/sysctl.conf
echo >>/etc/security/limits.d/20-nproc.conf <EOF
* soft nproc 4096
root soft nproc unlimited
EOF

注意:需要重启系统才能生效。

安装elasticsearch

先在https://www.elastic.co/cn/downloads/下载安装包,目前最新版本是7.1.1,直接使用rpm包就可以了:

1
2
3
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-x86_64.rpm
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-x86_64.rpm

然后使用rpm -ivh进行安装,注意这里会自动创建elasticsearch用户。由于es是只能运行在非root用户下,如果使用压缩包的方法进行安装的话,则需要手工创建用户useradd -M -s /sbin/nologin elasticsearch

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master ELK]# rpm -ivh elasticsearch-7.1.1-x86_64.rpm 
warning: elasticsearch-7.1.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Updating / installing...
1:elasticsearch-0:7.1.1-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch

安装完成之后,修改配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master ELK]# cat /etc/elasticsearch/elasticsearch.yml |grep -v '^#'
cluster.name: myelk #集群名字
node.name: node-1 #node名字
path.data: /var/lib/elasticsearch #日志数据路径
path.logs: /var/log/elasticsearch #日志存放路径
network.host: 0.0.0.0
http.port: 9200
# 增加参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.seed_hosts: ["192.168.1.60", "192.168.1.61"]
cluster.initial_master_nodes: ["192.168.1.60", "192.168.1.61"]

使用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
2
3
4
# 增加参数,使head插件可以访问es 
[root@linux-host1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

下载插件,解压至/usr/local目录下

1
2
3
wget  https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
mv elasticsearch-head-master /usr/local/elasticsearch-head

安装node/npm命令

1
2
3
4
5
6
7
8
9
wget https://npm.taobao.org/mirrors/node/latest-v12.x/node-v12.0.0-linux-x64.tar.gz
tar -zxvf node-v12.0.0-linux-x64.tar.gz

#修改环境变量/etc/profile添加
export NODE_HOME=/usr/local/node-v12.0.0-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules

source /etc/profile

然后在进入elasticsearch-head进行安装:

1
2
3
4
5
6
cd /tmp
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
yum -y install bzip2
cd /usr/local/elasticsearch-head
npm install -g grunt-cli
npm install --unsafe-perm

再修改2个配置文件:一是修改/usr/local/elasticsearch-head/Gruntfile.js,在keepalive下面增加hostname,不要忘记原有的true后面加逗号。

1
2
3
4
5
6
7
[root@master conf.d]# grep -n -B5 hostname /usr/local/elasticsearch-head/Gruntfile.js
91- server: {
92- options: {
93- port: 9100,
94- base: '.',
95- keepalive: true,
96: hostname: '*'

再修改连接地址/opt/elasticsearch-head-master/_site/app.js,

1
2
[root@master conf.d]# grep -n 192.168.1 /usr/local/elasticsearch-head/_site/app.js
4360: this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.1.60:9200";

修改完成之后,直接运行grunt server &,然后在浏览器访问192.168.1.60:9200,如下图:

查看数据:

编写一个shell,直接使用

1
2
3
4
5
[root@master elasticsearch-head]# cat /usr/local/elasticsearch-head/es_head
#!/bin/sh
# elasticsearch-head 的路径
cd /usr/local/elasticsearch-head
nohup npm run start >/usr/local/elasticsearch-head/nohup.out 2>&1 &

安装与配置logstash

安装logstash

直接在ES-192.168.1.60上面安装logstash,所以就不需要配置java环境了。部署如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@master ELK]# rpm -ivh logstash-7.1.1.rpm 
warning: logstash-7.1.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:logstash-1:7.1.1-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.30/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated
Successfully created system startup script for Logstash
#logstash配置文件
[root@master ~]# grep -n ^[a-Z] /etc/logstash/logstash.yml
28:path.data: /var/lib/logstash #logstash和插件使用的持久化目录
77:config.reload.automatic: true #开启配置文件自动加载
81:config.reload.interval: 10s #配置文件自动加载时间间隔
208:path.logs: /var/log/logstash #日志目录


[root@master ~]# chown -R logstash:logstash /usr/share/logstash/data/queue/
[root@master ~]# ll -d /usr/share/logstash/data/queue/
drwxr-xr-x 2 logstash logstash 6 Aug 23 18:34 /usr/share/logstash/data/queue/

#启动服务
[root@master ~]# systemctl start logstash
[root@master ~]# netstat -tunpl |grep 9600
tcp6 0 0 127.0.0.1:9600 :::* LISTEN 17380/java

测试方法

测试标准输入输出

运行/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
2
3
4
5
6
7
[root@master ~]# tail /tmp/log-2019.08.23messages.gz
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:37:26.204Z","message":""}
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:37:49.094Z","message":"h"}
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:37:50.079Z","message":""}
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:37:51.136Z","message":""}
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:37:58.587Z","message":"hello fdm."}
{"@version":"1","host":"master","@timestamp":"2019-08-23T14:38:04.738Z","message":"this is a test file."}

测试输出到 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
2
3
4
5
[root@localhost ~]# cd /var/lib/elasticsearch/nodes/0/indices/
[root@localhost indices]# ll
total 0
drwxr-sr-x 4 elasticsearch elasticsearch 29 Aug 23 22:43 BCdckqDoSDWxIcKOaEag9g
drwxr-sr-x 4 elasticsearch elasticsearch 29 Aug 23 09:43 QcOOMebiRQeBOL3hpXr1_Q

我们可以通过ES HEAD来查看数据,如下:

kibana

安装与配置的过程如下,注意,配置项kibana.index需要修改一下,不然会报Kibana server is not ready yet这个错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost src]# rpm -ivh kibana-7.1.1-x86_64.rpm
warning: kibana-7.1.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:kibana-7.1.1-1 ################################# [100%]
[root@localhost src]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

#修改配置如下
[root@master ELK]# egrep -v '^$|^#' /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.1.60:9200"]
kibana.index: ".newkibana"
i18n.locale: "zh-CN" #设置中文展示

[root@localhost src]# systemctl start kibana.service
[root@localhost src]# netstat -tunpl |grep 5601
tcp 0 0 127.0.0.1:5601 0.0.0.0:* LISTEN 12991/node

访问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
2
3
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"}';

access_log /var/log/nginx/access.log access_log_json;

再使用systemctl start nginx即可。测试访问一下,如果/var/log/nginx/access.log有正常输出json格式,都表示配置正常。

redis

同nginx一样,直接yum安装。为了安全,主要修改bind以及requirepass这2个配置:

1
2
3
[root@localhost ~]# cat /etc/redis.conf |egrep '^bind|^requirepass'
bind 192.168.1.61
requirepass 123456

启动redis服务,使用如下命令查看redis是否正常

1
2
3
4
5
[root@localhost ~]# redis-cli -h 192.168.1.61 -a 123456
192.168.1.61:6379> KEYS *
(empty list or set)
192.168.1.61:6379> ping
PONG

filebeat

Filebeat是一种轻量型方法,用于转发和汇总日志与文件。支持将数据直接写入到 redis 服务器,本步骤为写入到 redis 当中的一个可以,另外 filebeat 还支持写入到 elasticsearch、logstash 等服务器。

1
2
3
4
5
6
[root@localhost src]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-x86_64.rpm
[root@localhost src]# rpm -ivh filebeat-7.1.1-x86_64.rpm
warning: filebeat-7.1.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:filebeat-7.1.1-1 ################################# [100%]

修改filebeat配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# cat /etc/filebeat/filebeat.yml |grep -v "#" |grep -v '^$'
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
exclude_lines: ['^DBG', '^$']
exclude_files: ['.gz$']
document_type: 'nginx-log'
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.redis:
hosts: ["192.168.1.61:6379"]
key: "nginx-log"
db: 0
timeout: 5
password: 123456
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~

注意,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@master ~]# cat /etc/logstash/conf.d/nginx-log.conf
input {

redis {
host => "192.168.1.61"
port => "6379"
db => "0"
key => "nginx-log"
data_type => "list"
password => "123456"
}
}

filter {
json {
source => "message"
}
useragent {
source =>"user_ua" #这个表示对message里面的哪个字段进行分析
target =>"userAgent" #agent将收集出的user agent的信息配置到了单独的字段中
}
}

output {
elasticsearch {
hosts => ["192.168.1.60:9200"]
index => "nginx-log"
}
}

再重启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

ELK-6.5.3学习笔记–elk基础环境安装

0%