阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS7部署ELK5.2

153次阅读
没有评论

共计 10199 个字符,预计需要花费 26 分钟才能阅读完成。

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

一.环境准备

1. 操作系统

CentOS-7-x86_64-Everything-1511 

2. JDK 版本

# 官方文档写得很明确:elasticsearch 与 logstash 至少需要 Java 8 支持,其中 logstash5.x 版本也不支持 java 9,这里部署 openjdk,使用“yum provides java”命令选取合适的版本进行安装。
[root@elk-node1 ~]# yum install java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 -y
[root@elk-node1 ~]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

3. ELK 版本

Elasticsearch 5.2: https://www.elastic.co/downloads/elasticsearch

Logstash 5.2:https://www.elastic.co/downloads/logstash

Kibana 5.2:https://www.elastic.co/downloads/kibana 

4. 拓扑图  

1) 物理拓扑

CentOS7 部署 ELK5.2

  1. 验证环境部署 2 台设备,均为 VMware ESXi 虚拟出的 vm,部署在相同网段;
  2. 每台 vm 上均部署 elk 的 3 个组件,只是配置文件根据节点不同而略有不同 (以下部署配置过程只针对 node1,node2 安装配置可参照 node1)

2) 逻辑流程

CentOS7 部署 ELK5.2

  1. 数据源只需要输入到某 1 个 logstash 节点;
  2. 经过 logstash 处理的数据需要输出到 elasticsearch 集群中的所有节点,elasticsearch 分布式集群通过自身处理,每个节点均能获取全部数据;
  3. kibana 展示只需要从本机所在 elasticsearch 节点即可获取全部数据。 

二.Elasticsearch 部署  

1. 导入 elasticsearch PGP key 

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

2. 创建 yum 源文件

[root@elk-node1 ~]# vim /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-5.x]
name=Elasticsearch repository for5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3. 安装 elasticsearch

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

4. 设置开机启动

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

5. 配置 hosts 文件

# 根据实际环境配置,将节点主机名加入 hosts 文件 
[root@elk-node1 ~]# echo "10.11.4.151   elk-node1" >> /etc/hosts
[root@elk-node1 ~]# echo "10.11.4.152   elk-node2" >> /etc/hosts

6. 配置 elasticsearch.yml

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

7. 配置 head 插件

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

1)下载并配置 nodejs

# nodejs 官网:https://nodejs.org/en/
# 如果国内通过 wget 下载较慢,可通过第三方工具下载后上传至服务器 
[root@elk-node1 ~]# cd /usr/local/src/
[root@elk-node1 src]# wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz
[root@elk-node1 src]# xz -d node-v6.9.5-linux-x64.tar.xz
[root@elk-node1 src]# tar -xvf node-v6.9.5-linux-x64.tar -C /usr/local/
[root@elk-node1 src]# cd ~
[root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/node /usr/bin/node
[root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/npm /usr/bin/npm

# 查看 nodejs 是否安装成功;
# NPM 的全称是 Node Package Manager,是随同 NodeJS 一起安装的包管理和分发工具,方便让 JavaScript 开发者下载、安装、上传以及管理已经安装的包 
[root@elk-node1 ~]# node -v
v6.9.5
[root@elk-node1 ~]# npm -v
3.10.10

2)安装 head 插件

安装 grunt

# grunt 是一个方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.x 里的 head 插件就是通过 grunt���动的;
# 如果镜像速度不理想,可提前切到国内的镜像,在安装 grunt-cli 前执行:npm config set registry https://registry.npm.taobao.org

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

# 为 grunt 命令建软链接,方便全局执行,或加入环境变量;
[root@elk-node1 ~]# ln -s /usr/local/node-v6.9.5-linux-x64/lib/node_modules/grunt-cli/bin/grunt /usr/bin/grunt

CentOS7 部署 ELK5.2

下载并配置 head

#  配置 elasticsearch.yml 文件允许 head 插件跨域访问 es,请见上述章节 
[root@elk-node1 ~]# cd /var/lib/elasticsearch
[root@elk-node1 elasticsearch]# git clone git://github.com/mobz/elasticsearch-head.git
[root@elk-node1 elasticsearch]# chown -R elasticsearch:elasticsearch elasticsearch-head/

安装 head 

[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/

#  如果没有全局安装 grunt 二进制程序,可在 "elasticsearch-head" 目录下执行 "npm install grunt --save" 或 "npm install grunt-cli"
[root@elk-node1 elasticsearch]# npm install 

CentOS7 部署 ELK5.2

CentOS7 部署 ELK5.2

安装完成后可能有一些报错,不影响使用,报错原因未知,本人对 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 install phantomjs-prebuilt@2.1.14 –ignore-scripts

CentOS7 部署 ELK5.2

同时有 3 个警告信息,忽略即可,其中 ”npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression” 警告信息可做如下处理:http://www.linuxidc.com/Linux/2017-09/147006.htm

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

配置 head 文件

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

# 在 4328 行将原 "http://localhost:9200" 修改为 http://10.11.4.151:9200,否则 head 插件不能获取节点状态信息 
[root@elk-node1 _site]# vim app.js

CentOS7 部署 ELK5.2

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

#  在 93 行新增”hostname: 0.0.0.0',“,确保能被访问 
[root@elk-node1 elasticsearch-head]# vim Gruntfile.js

CentOS7 部署 ELK5.2 

8. iptables 设置

# 打开 tcp 9000~9600 多个端口,9100 访问 head 插件,9200 是节点事务通信端口,9300 是集群节点之间选举 / 状态同步端口,9600~9700 是默认的 logstash 数据输入端口;
# 允许多播协议,es 是一个基于 p2p 的系统,其先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互;
# tcp5601 端口是 kibana 的默认访问端口。
[root@elk-node1 ~]# vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 9000:9600 -j ACCEPT
-A INPUT -m pkttype --pkt-type multicast -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5601 -j ACCEPT

[root@elk-node1 ~]# systemctl restart iptables

CentOS7 部署 ELK5.2 

9. 启动并验证

[root@elk-node1 ~]# systemctl start elasticsearch.service

# 启动 head 插件,需要到 head 目录下 
[root@elk-node1 ~]# cd /var/lib/elasticsearch/elasticsearch-head/
[root@elk-node1 elasticsearch-head]# grunt server &

CentOS7 部署 ELK5.2 

1)启动过程验证

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

CentOS7 部署 ELK5.2

2)端口验证 

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

CentOS7 部署 ELK5.2

3)集群 / 节点状态信息

节点状态信息

[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/?pretty'

CentOS7 部署 ELK5.2

节点数信息  

# 其中带 "*" 的节点表示被选举为 master
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/nodes?v'

CentOS7 部署 ELK5.2

节点分片信息

# 这里已经有分片信息,因 kibana 已安装并启动,默认无信息 
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/indices?v'

CentOS7 部署 ELK5.2

集群健康状态信息

[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cluster/health?pretty'

CentOS7 部署 ELK5.2

4)日志

# 日志文件默认在 "/var/log/elasticsearch/elasticsearch.log",可在 elasticsearch.yml 文件中更改;
# 这里查看 elk-node2 节点的日志,elk-node2 被选举成为 master,且集群状态正常 
[root@elk-node2 ~]# tail -f /var/log/elasticsearch/elk.log

CentOS7 部署 ELK5.2

5)浏览器访问

节点状态信息 (类 curl)

CentOS7 部署 ELK5.2

可视化展示 (head 插件)

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

CentOS7 部署 ELK5.2

三.Logstash 部署

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

1. 安装 logstash

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

2. 设置开机启动

[root@elk-node1 elasticsearch]# systemctl enable logstash.service
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
# 其中默认配置已经明确数据,日志,logstash pipeline 实例文件的存储位置,保持默认即可;
#“http.host”参数指定数据输入主机,默认为 localhost;“http.port”参数指定数据输入端口,默认为 9600~9700(每实例占用 1 个),此验证暂时不做变更 
[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

2)pipeline 文件

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

# pipeline 实例文件以”input”,”output”,”filter”等区域组��,前两者为必选项;
#”input”与”output”利用插件进行数据输入与输出,如这里”file”即输入插件,“elasticseach”与“stdout”即输出插件;
# 在各插件内再具体定义行为,如”input”定义了数据源,“elasticseach”定义了输出节点与数据输出的索引与格式;
#“codec => rubydebug”会产生大量的 debug 文件至 message(也可重定向到其他位置),此处注释掉;
input {
    file {path => "/var/log/messages"}
}
output {
    elasticsearch {hosts => ["10.11.4.151:9200","10.11.4.152:9200"]
        index => "messages-%{+YYYY.MM.dd}"
    }
    stdout {#        codec => rubydebug}
}

# 请注意权限,这里 message 常规权限是 400,logstash 无法读取,如果无法调用,在 logstash 的启动日志中会有相应的记录 
[root@elk-node1 conf.d]# cd ..
[root@elk-node1 logstash]# chown -R logstash:logstash conf.d/
[root@elk-node1 ~]# chmod 644 /var/log/messages

4. 启动并验证

1) 启动测试

# logstash 可以启动,但此种验证方式会有告警 
[root@elk-node1 ~]# cd /usr/share/logstash/
[root@elk-node1 logstash]# bin/logstash -e 'input {stdin {} } output {stdout {} }'

CentOS7 部署 ELK5.2

# 按提示方式处理,在 "$LS_HOME" 下建立 "config" 目录,并将 "/etc/logstash/" 下的文件建软链接到 "config" 目录,再次执行即可,如下:
[root@elk-node1 ~]# mkdir -p /usr/share/logstash/config/
[root@elk-node1 ~]# ln -s /etc/logstash/* /usr/share/logstash/config
[root@elk-node1 ~]# chown -R logstash:logstash /usr/share/logstash/config/

CentOS7 部署 ELK5.2

2)pipeline 实例启动测试

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

CentOS7 部署 ELK5.2

3)启动并验证

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

netstat

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

CentOS7 部署 ELK5.2

日志

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

CentOS7 部署 ELK5.2

head

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

CentOS7 部署 ELK5.2

四.Kibana 部署

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

1. 安装 kibana

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

2. 设置开机启动

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

3. 配置 kibana

# 默认配置文件:/etc/kibana/kibana.yml
[root@elk-node1 ~]# cd /etc/kibana/
[root@elk-node1 kibana]# vim /etc/kibana/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://10.11.4.151:9200"   #es 地址与端口  

4. 启动并验证

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

CentOS7 部署 ELK5.2

五.Kibana 展示

1) 浏览器访问:http://10.11.4.151:5601 或者 http://10.11.4.152:5601

CentOS7 部署 ELK5.2

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

CentOS7 部署 ELK5.2

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

CentOS7 部署 ELK5.2

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

CentOS7 部署 ELK5.2

 

基于 CentOS 6.9 搭建 ELK 环境指南  http://www.linuxidc.com/Linux/2017-07/145636.htm

Linux 日志分析 ELK 环境搭建  http://www.linuxidc.com/Linux/2017-07/145494.htm

参考文档:

  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://www.linuxidc.com/Linux/2017-09/146993.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-09/147005.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10199字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中