Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356577
  • 博文数量: 34
  • 博客积分: 251
  • 博客等级: 二等列兵
  • 技术积分: 419
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-21 15:50
文章分类

全部博文(34)

文章存档

2017年(5)

2016年(19)

2012年(10)

我的朋友

分类: 系统运维

2017-02-10 11:27:08

CentOS7部署ELK5.2

参考文档:

1.    Elasticsearchyum文档:

https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

2.    Logstashyum文档:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

3.    Kibanayum文档:

https://www.elastic.co/guide/en/kibana/current/rpm.html

4.    es5.x版本head插件安装:

http://renzhiyuan.blog.51cto.com/10433137/1888862


本文通过
yum的方式安装ELK Stack各套件,并做简单配置。

一.环境准备

1.  操作系统

CentOS-7-x86_64-Everything-1511

2.  JDK版本

官方文档写得很明确:elasticsearchlogstash至少需要java 8支持,其中logstash5.x版本也不支持java 9,这里部署openjdk,使用“yum provides java”命令选取合适的版本进行安装。

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# yum install java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 -y
  2. [root@elk-node1 ~]# java -version
  3. openjdk version "1.8.0_121"
  4. OpenJDK Runtime Environment (build 1.8.0_121-b13)
  5. OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

3.  ELK版本

Elasticsearch 5.2:

Logstash 5.2:

Kibana 5.2:

4.  拓扑图

1)  物理拓扑


1)  验证环境部署2台设备,均为VMware ESXi虚拟出的vm,部署在相同网段;

2)  每台vm上均部署elk3个组件,只是配置文件根据节点不同而略有不同(以下部署配置过程只针对node1node2安装配置可参照node1

2)  逻辑流程


1)  数据源只需要输入到某1logstash节点

2)  经过logstash处理的数据需要输出到elasticsearch集群中的所有节点,elasticsearch分布式集群通过自身处理,每个节点均能获取全部数据;

3)  kibana展示只需要从本机所在elasticsearch节点即可获取全部数据。

二.Elasticsearch部署

1.  导入elasticsearch PGP key

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2.  创建yum源文件

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
  2. [elasticsearch-5.x]
  3. name=Elasticsearch repository for5.x packages
  4. baseurl=https://artifacts.elastic.co/packages/5.x/yum
  5. gpgcheck=1
  6. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  7. enabled=1
  8. autorefresh=1
  9. type=rpm-md

3.  安装elasticsearch

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# yum install elasticsearch -y

4.  设置开机启动

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# systemctl daemon-reload
  2. [root@elk-node1 ~]# systemctl enable elasticsearch.service
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

5.  配置hosts文件

根据实际环境配置,将节点主机名加入hosts文件。

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# echo "10.11.4.151 elk-node1" >> /etc/hosts
  2. [root@elk-node1 ~]# echo "10.11.4.152 elk-node2" >> /etc/hosts

6.  配置elasticsearch.yml

点击(此处)折叠或打开

  1. [root@elk-node1 src]# cat /etc/elasticsearch/elasticsearch.yml | grep -v “#”
  2. cluster.name: elk                                              #自定义集群名,相同集群内的节点设置相同的集群名
  3. node.name: elk-node1                                           #自定义节点名,建议统一采用节点hostname
  4. path.data: /var/lib/elasticsearch                              #data存储路径,可不取消注释,默认即此路径
  5. path.logs: /var/log/elasticsearch                              #log存储路径,可不取消注释,默认即此路径
  6. network.host: 0.0.0.0                                          #es监听地址,采用”0.0.0.0”,允许所有设备访问
  7. http.port: 9200                                                #es监听端口,可不取消注释,默认即此端口
  8. discovery.zen.ping.unicast.hosts: ["elk-node1", "elk-node2"]   #集群节点发现列表,也可采用ip的形式
  9. discovery.zen.minimum_master_nodes: 2                          #集群可做master的最小节点数
  10. #以下两项设置es5.x版本的head插件可以访问es
  11. http.cors.enabled: true                                        #开启跨域访问支持,默认为false
  12. http.cors.allow-origin: "*"                                    #跨域访问允许的域名地址,使用正则表达式

7.  配置head插件

elasticsearch5.x版本没有提供直接安装head插件的方法,作者在github上给出了方法:

1)   下载并配置nodejs

nodejs官网:

如果国内通过wget下载较慢,可通过第三方工具下载后上传至服务器。

点击(此处)折叠或打开

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

# NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。

2)   安装head插件

安装grunt

点击(此处)折叠或打开

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


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

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

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

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

下载并配置head

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# cd /var/lib/elasticsearch
  2. [root@elk-node1 elasticsearch]# git clone git://github.com/mobz/elasticsearch-head.git
  3. [root@elk-node1 elasticsearch]# chown -R elasticsearch:elasticsearch elasticsearch-head/

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

安装head

点击(此处)折叠或打开

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


#
安装完成后可能有一些报错,不影响使用,报错原因未知,本人对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”,无报错。


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

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

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

3)   配置head文件

(1) app.js

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/
  2. [root@elk-node1 elasticsearch-head]# cd _site/
  3. [root@elk-node1 _site]# cp app.js app.js.bak


#
4328行将原""修改为"",否则head插件不能获取节点状态信息。

(2) Guuntfile.js

点击(此处)折叠或打开

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


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

8.  iptables设置

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# vim /etc/sysconfig/iptables
  2. -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 9000:9600 -j ACCEPT
  3. -A INPUT -m pkttype --pkt-type multicast -j ACCEPT
  4. -A INPUT -p tcp -m state --state NEW -m tcp --dport 5601 -j ACCEPT
  5. [root@elk-node1 ~]# systemctl restart iptables


#
打开tcp 90009600多个端口,9100访问head插件,9200是节点事务通信端口,9300是集群节点之间选举/状态同步端口,96009700是默认的logstash数据输入端口;

#允许多播协议,es是一个基于p2p的系统,其先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互;

#tcp5601端口是kibana的默认访问端口。

9.  启动并验证

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# systemctl start elasticsearch.service
  2. [root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/
  3. [root@elk-node1 elasticsearch-head]# grunt server &

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

1)   启动过程验证

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# journalctl --unit elasticsearch

2)   端口验证

点击(此处)折叠或打开

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


3)   集群/节点状态信息

节点状态信息

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# curl -XGET '/?pretty'

节点数信息

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# curl -XGET '/_cat/nodes?v'

#其中带”*”的节点表示被选举为master

节点分片信息

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# curl -XGET '/_cat/indices?v'


#
这里已经有分片信息,因kibana已安装并启动,默认无信息。

集群健康状态信息

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# curl -XGET '/_cluster/health?pretty'

4)   日志

日志文件默认在” /var/log/elasticsearch/elasticsearch.log”,可在elasticsearch.yml文件中更改。

点击(此处)折叠或打开

  1. [root@elk-node2 ~]# tail -f /var/log/elasticsearch/elk.log


#
这里查看elk-node2节点的日志,elk-node2被选举成为master,且集群状态正常。

5)   浏览器访问

节点状态信息(curl)


可视化展示(head插件)


#
同样有节点信息,master选举结果信息,节点分片信息,集群健康状态信息等。

三.Logstash部署

yum源同elasticsearch,这里不再创建yum文件,直接安装即可;如果一定要创建则另取1个名字,如logstash.repo

1.   安装logstash

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# yum install logstash –y

2.   设置开机启动

点击(此处)折叠或打开

  1. [root@elk-node1 elasticsearch]# systemctl enable logstash.service
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

3.   配置logstash

1)   配置文件

默认配置文件:/etc/logstash/logstash.yml

点击(此处)折叠或打开

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

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

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

2)   pipeline文件

根据默认配置,pipeline实例文件默认应放置于/etc/logstash/conf.d目录,此时目录下无实例文件,可根据实际情况新建实例,以处理本机messages信息为例,如下:

点击(此处)折叠或打开

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

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

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

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

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

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

4.   启动并验证

1)   启动测试

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# cd /usr/share/logstash/
  2. [root@elk-node1 logstash]# bin/logstash -e 'input { stdin { } } output { stdout {} }'


#logstash
可以启动,但此种验证方式会有告警,可以提示方式处理,在“$LS_HOME”下建立“config”目录,并将”/etc/logstash/”下的文件建软链接到“config”目录,再次执行即可,如下:

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# mkdir -p /usr/share/logstash/config/
  2. [root@elk-node1 ~]# ln -s /etc/logstash/* /usr/share/logstash/config
  3. [root@elk-node1 ~]# chown -R logstash:logstash /usr/share/logstash/config/


2)   pipeline实例启动测试

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# cd /usr/share/logstash/
  2. [root@elk-node1 logstash]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/messages.conf -t


3)   启动并验证

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# systemctl start logstash

netsta

点击(此处)折叠或打开

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


日志

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# tailf /var/log/logstash/logstash-plain.log

head

浏览器访问:


四.Kibana部署

yum源同elasticsearch,这里不再创建yum文件,直接安装即可;如果一定要创建则另取1个名字,如kibana.repo

1.  安装kibana

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# yum install kibana -y

2.  设置开机启动

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# systemctl daemon-reload
  2. [root@elk-node1 ~]# systemctl enable kibana.service
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

3.  配置kibana

默认配置文件:/etc/kibana/kibana.yml

点击(此处)折叠或打开

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

4.  启动并验证

点击(此处)折叠或打开

  1. [root@elk-node1 ~]# systemctl restart kibana
  2. [root@elk-node1 ~]# netstat -tunlp | grep 5601


五.Kibana展示

1. 浏览器访问:或者

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

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

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

阅读(8573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~