CentOS7部署ELK5.2
原文发表于cu:2017-02-10
参考文档:
- Elasticsearchyum文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
- es5.x版本head插件安装:http://renzhiyuan.blog.51cto.com/10433137/1888862
本文通过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) 物理拓扑
- 验证环境部署2台设备,均为VMware ESXi虚拟出的vm,部署在相同网段;
- 每台vm上均部署elk的3个组件,只是配置文件根据节点不同而略有不同(以下部署配置过程只针对node1,node2安装配置可参照node1)。
2) 逻辑流程
- 数据源只需要输入到某1个logstash节点;
- 经过logstash处理的数据需要输出到elasticsearch集群中的所有节点,elasticsearch分布式集群通过自身处理,每个节点均能获取全部数据;
- 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
下载并配置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
安装完成后可能有一些报错,不影响使用,报错原因未知,本人对nodejs不了解,github上有相近的问题,但并未解决。解决方法如下:
- 查看报错信息"Error: Cannot find module '/var/lib/elasticsearch/elasticsearch-head/node_modules/phantomjs-prebuilt/install.js'",未找到" phantomjs-prebuilt/install.js"文件;
- 采取比较土的办法,将完整的"phantomjs-prebuilt/"目录上传到相应位置,重新执行"npm install",无报错。
- 或者:npm install phantomjs-prebuilt@2.1.14 --ignore-scripts
同时有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",涉及到开源软件与其他合作类软件的使用声明。
配置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
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
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
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 &
1)启动过程验证
[root@elk-node1 ~]# journalctl --unit elasticsearch
2)端口验证
[root@elk-node1 ~]# netstat –tunlp
3)集群/节点状态信息
节点状态信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/?pretty'
节点数信息
# 其中带"*"的节点表示被选举为master
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/nodes?v'
节点分片信息
# 这里已经有分片信息,因kibana已安装并启动,默认无信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cat/indices?v'
集群健康状态信息
[root@elk-node1 ~]# curl -XGET 'http://10.11.4.151:9200/_cluster/health?pretty'
4)日志
# 日志文件默认在" /var/log/elasticsearch/elasticsearch.log",可在elasticsearch.yml文件中更改;
# 这里查看elk-node2节点的日志,elk-node2被选举成为master,且集群状态正常
[root@elk-node2 ~]# tail -f /var/log/elasticsearch/elk.log
5)浏览器访问
节点状态信息(类curl)
可视化展示(head插件)
同样有节点信息,master选举结果信息,节点分片信息,集群健康状态信息等。
三.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 {} }'
# 按提示方式处理,在"$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/
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
3)启动并验证
[root@elk-node1 ~]# systemctl start logstash
netstat
[root@elk-node1 ~]# netstat -tunlp
日志
[root@elk-node1 ~]# tailf /var/log/logstash/logstash-plain.log
head
浏览器访问:http://10.11.4.151:9100
四.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
五.Kibana展示
1)浏览器访问:http://10.11.4.151:5601或者http://10.11.4.152:5601
2)需要在"Index name or pattern"处创建索引名,elassticsearch中并没有以"logstash-*"命名的索引,则不能创建,新建索引对应logstash的pipeline输出插件定义的"index",即"messages-*",如下:
3)在"Index name or pattern"处填写入正确的索引名字,"@timestamp"会自动填充,点击"create"创建,见到如下界面即索引创建完成;
4)在"Discover"页面,可以搜索与浏览Elasticsearch中的数据,默认搜索的是最近15分钟的数据,可以自定义选择时间。
CentOS7部署ELK5.2的更多相关文章
- [原]CentOS7部署osm2pgsql
转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 部署Postgresql和部署PostGis请参考前两篇文章 本文主要参考GitHub上osm ...
- centos7 部署ssserver
centos7 部署shadowsocks服务端 为什么要选centos7? 以后centos7 肯定是主流,在不重要的环境还是尽量使用新系统吧 centos7 的坑 默认可能会有firewall 或 ...
- centos7 部署 docker compose
=============================================== 2019/4/10_第1次修改 ccb_warlock == ...
- centos7 部署 docker ce
=============================================== 2019/4/9_第1次修改 ccb_warlock === ...
- centos7 部署 open-falcon 0.2.0
=============================================== 2019/4/29_第3次修改 ccb_warlock 更新 ...
- centos7 部署 docker、shipyard
=============================================== 2019/4/9_第3次修改 ccb_warlock 更新说 ...
- centos7 部署 docker swarm
=============================================== 2019/4/9_第3次修改 ccb_warlock 更新说 ...
- CentOS7部署Nginx
CentOS7部署Nginx 1.准备工作 Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,注意安装顺序如下: 1 SSL功能需要openssl库,直接通过yu ...
- centos7部署JavaWeb项目
centos7部署JavaWeb项目共有三步 1.配置java环境 2.配置tomcat环境. 3.部署JavaWeb项目 一.配置java环境 1.1安装java 参考我的另一篇博文:https:/ ...
随机推荐
- 404 Note Found 队-Alpha 事后诸葛亮
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结: 本小组和其他组的评分 分工和贡献分 全组讨论的照片 问题 第一组提问回答:爸爸饿了队 第二组提问回答:拖 ...
- webapi中的模型验证
mic: https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-valida ...
- oracle与infomix异同点
之前是做oracle数据库应用开发的,现在工作用的是informix,特别不习惯.用了一段时间后才慢慢适应,最近做系统升级,把informix换成oracle数据库.顺便整理了一下informix与o ...
- java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...
- Linux基础-5.利用vi编辑器创建和编辑正文文件
1.vi编辑器简介 1)掌握vi编辑器的定义:vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界面,vi是效率很高的文本编辑器.尽管在Linux上也有很多图形界面 ...
- 前端基础-jQuery的动画效果
阅读目录 隐藏 显示 切换 下拉 上卷 显示 一.jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局, ...
- python学习笔记(二)python基础知识(交作业)
交作业 #!/usr/bin/env python # coding: utf-8 # # 1. 每个用户购买了多少不同种类的产品 # filename = 'train.txt' import sy ...
- Rails中重写Active Record字段属性
系统重构或升级时偶尔会碰到需要重写某个字段的情况,例如: 1. 读取user的name字段时,实际返回name_new字段 class User < ActiveRecord::Base def ...
- 【Mac】安装 Homebrew 出错 Failed during: git fetch origin master:refs/remotes/origin/master --tags --force
今天在 Mac 装 Homebrew 遇到了一个问题,在网上找了大量解决方案,做个总结. Mac 版本 High Sierra 10.13.6. 问题描述 在 Mac 终端输入了 Homebrew 官 ...
- 2017-2018-1 20155318 《信息安全系统设计基础》第2周课堂实践、makefile、以及myod
2017-2018-1 20155318 <信息安全系统设计基础>第2周课堂实践.makefile.以及myod 测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置 ...