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

CentOS7部署ELK5.2

455次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7996933
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...