ELK部署

1 环境

系统:centos 7.2 x86_64 -1511

JDK: 1.8.0_111

ELK: elasticsearch kibana logstash

https://www.elastic.co/cn/downloads
图1

2 Elasticsearch部署

下载并解压elasticsearch-5.3.2.tar.gz

1
tar -zxvf elasticsearch-5.3.2.tar.gz -C /home/elk

2.1 配置elasticsearch.yml

1
[root@elk-node1 src]# cat /etc/elasticsearch/elasticsearch.yml | grep -v “#”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cluster.name: elk                                              #自定义集群名,相同集群内的节点设置相同的集群名

node.name: elk-node1                                           #自定义节点名,建议统一采用节点hostname

path.data: /var/lib/elasticsearch                              #data存储路径,可不取消注释,默认即此路径

path.logs: /var/log/elasticsearch                              #log存储路径,可不取消注释,默认即此路径

network.host0.0.0.0                                          #es监听地址,采用”0.0.0.0”,允许所有设备访问

http.port9200                                                #es监听端口,可不取消注释,默认即此端口

discovery.zen.ping.unicast.hosts: ["elk-node1""elk-node2"]   #集群节点发现列表,也可采用ip的形式

discovery.zen.minimum_master_nodes2                          #集群可做master的最小节点数

#以下两项设置es5.x版本的head插件可以访问es

http.cors.enabled: true                                        #开启跨域访问支持,默认为false

http.cors.allow-origin"*"                                    #跨域访问允许的域名地址,使用正则表达式

2.2 配置head插件

2.2.1 下载并配置nodejs

nodejs官网:https://nodejs.org/en/

1
2
3
4
5
6
7
8
9
10
[root@elk-node1 ~]# cd /home/elk
[root@elk-node1 elk]# wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz
[root@elk-node1 elk]# xz -d node-v6.10.2-linux-x64.tar.xz
[root@elk-node1 elk]# tar -xvf node-v6.10.2-linux-x64.tar -C /usr/local/
[root@elk-node1 ~]# ln -s /usr/local/node-v6.10.2-linux-x64/bin/node /usr/bin/node
[root@elk-node1 ~]# ln -s /usr/local/node-v6.10.2-linux-x64/bin/npm /usr/bin/npm
[root@elk-node1 ~]# node -v
v6.10.2
[root@elk-node1 ~]# npm -v
3.10.10

2.2.2 安装head插件

安装grunt

1
2
[root@elk-node1 ~]# npm install -g grunt-cli
[root@elk-node1 ~]# ln -s /usr/local/node-v6.10.2-linux-x64/lib/node_modules/grunt-cli/bin/grunt /usr/bin/grunt

图2

#grunt是一个方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.x里的head插件就是通过grunt启动的;

#”-g”参数代表全局安装,一般安装到nodejs的”lib/node_modules”目录下;不带参数”-g”,则是本地安装,一般安装到运行npm命令时所在的目录,这里就需要安装到head插件目录

#为grunt命令建软链接,方便全局执行,或加入环境变量;;

#如果镜像速度不理想,可提前切到国内的镜像,在安装grunt-cli前执行:npm config set registry https://registry.npm.taobao.org

2.2.3 下载并配置head

1
2
[root@elk-node1 ~]# cd /home/elk/elasticsearch
[root@elk-node1 elasticsearch]# git clone git://gitee.com/mobz/elasticsearch-head.git

#配置elasticsearch.yml文件允许head插件跨域访问es,请见上述章节。
图3

2.2.4 安装head

1
2
[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/
[root@elk-node1 elasticsearch]# npm install

图4

图5
# 安装完成后可能有一些报错,不影响使用,报错原因未知,本人对nodejs不了解,github上有相近的问题,但并未解决。解决方法如下:

(1) 查看报错信息”Error: Cannot find module ‘/var/lib/elasticsearch/elasticsearch-head/node_modules/phantomjs-prebuilt/install.js’”,未找到” phantomjs-prebuilt/install.js”文件;

(2) 采取比较土的办法,将完整的”phantomjs-prebuilt/”目录上传到相应位置,重新执行”npm install”,无报错。
图6

# 同时有3个警告信息,忽略即可,其中“npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression”警告信息可做如下处理:
http://www.itdadao.com/articles/c15a1031952p0.html

即修改”./elasticsearch-head”目录下“package.json”文件第17行的””Apache2“ “为”Apache-2.0“,涉及到开源软件与其他合作类软件的使用声明。

# 如果没有全局安装grunt二进制程序,可在”elasticsearch-head”目录下执行”npm install grunt --save“或” npm install grunt-cli“。

2.2.5 配置app.js和Guuntfile.js

1
2
3
4
[root@elk-node1 ~]# cd /home/elk/elasticsearch-5.3.2/elasticsearch-head/
[root@elk-node1 elasticsearch-head]# cd _site/
[root@elk-node1 _site]# cp app.js app.js.bak
[root@elk-node1 _site]# vim app.js

图7
#在4328行将原”http://localhost:9200“修改为”http://172.20.20.29:9200“,否则head插件不能获取节点状态信息。

1
2
3
[root@elk-node1 ~]# cd /home/elk/elasticsearch-5.3.2/elasticsearch-head/
[root@elk-node1 elasticsearch-head]# cp Gruntfile.js Gruntfile.js.bak
[root@elk-node1 elasticsearch-head]# vim Gruntfile.js

图8

#在93行新增”hostname: 0.0.0.0’, “,确保能被访问。

2.3 启动并验证

  • 创建elk用户
  • 使用elk用户启动elasticsearch
1
su - elk -c "/home/elk/elasticsearch-5.3.2/bin/elasticsearch &"
  • 启动head
1
2
cd /home/elk/elasticsearch-5.3.2/elasticsearch-head/
grunt server &

图9

#启动head插件,需要到head目录下

  1. 访问https://172.20.20.29:9200
    图10

  2. 访问https://172.20.20.29:9100
    图11

3 Logstash部署

3.1 下载logstash

下载logstash-5.3.2

1
tar -zxvf logstash-5.3.2 -C /home/elk

3.2 配置logstahs

3.2.1 配置文件

默认配置文件: /home/elk/logstash-5.3.2/config/logstash.yml

1
2
3
4
5
[root@elk-node1 ~]# cd /etc/logstash/
[root@elk-node1 logstash]# cat logstash.yml | grep -v "#"
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d
path.logs: /var/log/logstash

*#其中默认配置已经明确数据,日志,logstash pipeline实例文件的存储位置,保持默认即可;

#其中“http.host”参数指定数据输入主机,默认为localhost;“http.port”参数指定数据输入端口,默认为9600~9700(每实例占用1个),此验证暂时不做变更*

3.2.2 pipeline文件

根据默认配置,pipeline实例文件默认应放置于/home/elk/logstash-5.3.2/config/目录,此时目录下无实例文件,可根据实际情况新建实例,以处理本机log信息为例,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@elk-node1 config]# vim messages.conf
input {
    file {
        path => "/var/log/messages"
    }
}
output {
    elasticsearch {
        hosts => ["172.20.20.29:9200","172..20.20.29:9200"]
        index => "messages-%{+YYYY.MM.dd}"
    }
    stdout {
# codec => rubydebug
    }
}
[root@elk-node1 conf.d]# cd ..
[root@elk-node1 logstash]# chown -R logstash:logstash conf.d/
[root@elk-node1 ~]# chmod 644 /var/log/messages

*#pipeline

#pipeline实例文件以”input”,”output”,”filter”等区域组成,前两者为必选项;

#”input”与”output”利用插件进行数据输入与输出,如这里”file”即输入插件,“elasticseach”与“stdout”即输出插件;

#在各插件内再具体定义行为,如”input”定义了数据源,“elasticseach”定义了输出节点与数据输出的索引与格式;

#“codec => rubydebug”会产生大量的debug文件至message(也可重定向到其他位置),此处注释掉;

#请注意权限,这里message常规权限是400,logstash无法读取,如果无法调用,在logstash的启动日志中会有相应的记录。*

3.3 启动并验证

1
[root@elk-node1 ~]# /home/elk/logstash-5.3.2/bin/logstash -f /home/elk/logstash-5.3.2/conf.d/messages.conf &

& 是在后台启动

1
[root@elk-node1 ~]# netstat -tunlp

图12

浏览器访问http://172.20.20.29:9100

图13

4 Kibana部署

4.1 解压下载的kibana

1
tar -zxvf kibana-5.3.2-linux-x86_64.tar.gz -C /home/elk

4.2 配置kibana

1
2
3
4
5
6
[root@elk-node1 ~]# cd /home/elk/kibana-5.3.2-linux-x86_64/config
[root@elk-node1 kibana]# vim kibana.yml
[root@elk-node1 kibana]# cat /etc/kibana/kibana.yml | grep -v "^$" | grep -v "#"
server.port: 5601                                   #默认即5601
server.host: "0.0.0.0"                              #允许被访问
elasticsearch.url: "http://172.20.20.29:9200"        #es地址与端口

4.3 启动并验证

1
/home/elk/kibana-5.3.2-linux-x86_64/bin/kibana &

& 在后台启动

1
netstat -tunlp | grep 5601

图14

4.4 kibana展示

浏览器访问:http://172.20.20.29:5601
图15

需要在“Index name or pattern”处创建索引名,elassticsearch中并没有以”logstash-*”命名的索引,则不能创建,新建索引对应logstashpipeline输出插件定义的”index”,即”messages-*”,如下:
图16

在“Index name or pattern”处填写入正确的索引名字,”@timestamp”会自动填充,点击”create”创建,见到如下界面即索引创建完成;
图17

在“Discover”页面,可以搜索与浏览Elasticsearch中的数据,默认搜索的是最近15分钟的数据,可以自定义选择时间。
图18

-------------本文结束感谢您的阅读-------------

本文标题:ELK部署

文章作者:OperationMAN

发布时间:2018年09月07日 - 15:09

最后更新:2022年03月31日 - 13:03

原始链接:https://kxinter.gitee.io/2018/09/07/ELK部署/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!