CentOS7部署ELK5.2

原文发表于cu:2017-02-10

参考文档:

  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版本

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

[[email protected] ~]# yum install java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 -y

[[email protected] ~]# 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) 物理拓扑

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

2) 逻辑流程

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

二.Elasticsearch部署

1. 导入elasticsearch PGP key

[[email protected] ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. 创建yum源文件

[[email protected] ~]# 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

[[email protected] ~]# yum install elasticsearch -y

4. 设置开机启动

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# 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文件。

[[email protected] ~]# echo "10.11.4.151 elk-node1" >> /etc/hosts

[[email protected] ~]# echo "10.11.4.152 elk-node2" >> /etc/host

6. 配置elasticsearch.yml

[[email protected] 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的最小节点数

#以下两项设置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下载较慢,可通过第三方工具下载后上传至服务器。

[[email protected] ~]# cd /usr/local/src/

[[email protected] src]# wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz

[[email protected] src]# xz -d node-v6.9.5-linux-x64.tar.xz

[[email protected] src]# tar -xvf node-v6.9.5-linux-x64.tar -C /usr/local/

[[email protected] src]# cd ~

[[email protected] ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/node /usr/bin/node

[[email protected] ~]# ln -s /usr/local/node-v6.9.5-linux-x64/bin/npm /usr/bin/npm

[[email protected] ~]# node -v

v6.9.5

[[email protected] ~]# npm -v

3.10.10

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

2)安装head插件

安装grunt

[[email protected] ~]# npm install -g grunt-cli

[[email protected] ~]# 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 https://registry.npm.taobao.org

下载并配置head

[[email protected] ~]# cd /var/lib/elasticsearch

[[email protected] elasticsearch]# git clone git://github.com/mobz/elasticsearch-head.git

[[email protected] elasticsearch]# chown -R elasticsearch:elasticsearch elasticsearch-head/

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

安装head

[[email protected] ~]# cd /var/lib/elasticsearch/elasticsearch-head/

[[email protected] 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 install [email protected] --ignore-scripts

#同时有3个警告信息,忽略即可,其中"npm WARN [email protected] 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"。

配置head文件

  • app.js

[[email protected] ~]# cd /var/lib/elasticsearch/elasticsearch-head/

[[email protected] elasticsearch-head]# cd _site/

[[email protected] _site]# cp app.js app.js.bak

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

  • Gruntfile.js

[[email protected] ~]# cd /var/lib/elasticsearch/elasticsearch-head/

[[email protected] elasticsearch-head]# cp Gruntfile.js Gruntfile.js.bak

[[email protected] elasticsearch-head]# vim Gruntfile.js

#在93行新增"hostname: 0.0.0.0‘, ",确保能被访问。

8. iptables设置

[[email protected] ~]# 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

[[email protected] ~]# systemctl restart iptables

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

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

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

9. 启动并验证

[[email protected] ~]# systemctl start elasticsearch.service

[[email protected] ~]# cd /var/lib/elasticsearch/elasticsearch-head/

[[email protected] elasticsearch-head]# grunt server &

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

1)启动过程验证

[[email protected] ~]# journalctl --unit elasticsearch

2)端口验证

[[email protected] ~]# netstat –tunlp

3)集群/节点状态信息

节点状态信息

[[email protected] ~]# curl -XGET ‘http://10.11.4.151:9200/?pretty‘

节点数信息

[[email protected] ~]# curl -XGET ‘http://10.11.4.151:9200/_cat/nodes?v‘

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

节点分片信息

[[email protected] ~]# curl -XGET ‘http://10.11.4.151:9200/_cat/indices?v‘

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

集群健康状态信息

[[email protected] ~]# curl -XGET ‘http://10.11.4.151:9200/_cluster/health?pretty‘

4)日志

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

[[email protected] ~]# 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

[[email protected] ~]# yum install logstash –y

2. 设置开机启动

[[email protected] 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

[[email protected] ~]# cd /etc/logstash/

[[email protected] 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个),此验证暂时不做变更。

2)pipeline文件

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

[[email protected] ~]# cd /etc/logstash/conf.d/

[[email protected] conf.d]# vim messages.conf

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

}

}

[[email protected] conf.d]# cd ..

[[email protected] logstash]# chown -R logstash:logstash conf.d/

[[email protected] ~]# chmod 644 /var/log/messages

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

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

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

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

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

4. 启动并验证

1)启动测试

[[email protected] ~]# cd /usr/share/logstash/

[[email protected] logstash]# bin/logstash -e ‘input { stdin { } } output { stdout {} }‘

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

[[email protected] ~]# mkdir -p /usr/share/logstash/config/

[[email protected] ~]# ln -s /etc/logstash/* /usr/share/logstash/config

[[email protected] ~]# chown -R logstash:logstash /usr/share/logstash/config/

2)启动测试pipeline实例启动测试

[[email protected] ~]# cd /usr/share/logstash/

[[email protected] logstash]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/messages.conf -t

3)启动并验证

[[email protected] ~]# systemctl start logstash

netstat

[[email protected] ~]# netstat -tunlp

日志

[[email protected] ~]# tailf /var/log/logstash/logstash-plain.log

head

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

四.Kibana部署

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

1. 安装kibana

[[email protected] ~]# yum install kibana -y

2. 设置开机启动

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# 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

[[email protected] ~]# cd /etc/kibana/

[[email protected] kibana]# vim /etc/kibana/kibana.yml

[[email protected] 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. 启动并验证

[[email protected] ~]# systemctl restart kibana

[[email protected] ~]# 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分钟的数据,可以自定义选择时间。

时间: 2024-10-14 13:14:05

CentOS7部署ELK5.2的相关文章

生产环境中CentOS7部署NET Core应用程序

NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天

CentOS7部署Kubernetes集群

CentOS7部署Kubernetes集群 简介 Kubernetes是什么? Kubernetes一个用于容器集群的自动化部署.扩容以及运维的开源平台. 通过Kubernetes,你可以快速有效地响应用户需求: a.快速而有预期地部署你的应用 b.极速地扩展你的应用 c.无缝对接新的应用功能 d.节省资源,优化硬件资源的使用 我们希望培育出一个组件及工具的生态,帮助大家减轻在公有云及私有云上运行应用的负担. Kubernetes特点: a.可移植: 支持公有云,私有云,混合云,多重云(mult

Centos7部署Kubernetes集群+flannel

centos7 部署Kubernetes+flannel https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html kubernetes集群部署DashBoard http://www.cnblogs.com/zhenyuyaodidiao/p/6500897.html 原文地址:http://blog.51cto.com/lookingdream/2094162

centos7部署MongoDB数据库复制集(超详细)

centos7部署MongoDB数据库复制集(超详细)重点:复制集概述:复制集实现原理:复制集的应用案例:一.概述:组成:Mongodb复制集(副本集replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary通过oplog来同步Primary的数据,保证主节点和从节点数据的一致性,复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕

CentOS-7 部署Django----安装Nginx

CentOS-7 部署Django----安装Nginx 在CentOS-7上部署Nginx步骤: 截至此时,Nginx的稳定版本为1.14,已下安装版本为1.14 1.yum的存储库中不存在nginx信息,所以需要预添加: 官方的源:# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 国内的源:# yum install epel-releas

CentOS7部署Apache Mesos

CentOS7部署Apache Mesos Apache Mesos是由加州大学伯克利分校的AMPLab首先开发的一款开源群集管理软件,支持Hadoop.ElasticSearch.Spark.Storm 和Kafka等应用架构.Mesos使用了与Linux内核相似的规则来构造,仅仅是不同抽象层级的差别.Mesos从设备(物理机或虚拟机)抽取 CPU,内存,存储和其他计算资源,让容错和弹性分布式系统更容易使用.Mesos内核运行在每个机器上,在整个数据中心和云环境内向应用程序(Hadoop.Sp

Centos7 部署社交网站(discuz论坛)

Centos7 部署社交网站(discuz论坛) 操作环境: 192.168.80.100 : svn192.168.80.101 : nginx192.168.80.102 : mariadb192.168.80.103 : php192.168.80.104 : nfs注意:为了防止不必要的错误,五台虚拟机都要联网,并且防火墙和selinux都要关闭systemctl stop firewalld //临时关闭防火墙setenforce 0 //临时关闭selinux 实验所需软件包(没有的

centos7 部署 docker compose

=============================================== 2019/4/10_第1次修改                       ccb_warlock =============================================== 将原先docker swarm的文章拆分后,我决定将docker compose的部署内容单独整理成文章,使得部署逻辑更清晰. docker compose是docker容器批量编排的工具,可以通过1个yml

Linux Centos7部署环境安装-CentOS

Linux Centos7部署环境安装-CentOS Centos7部署环境安装及Linux常用命令 centos系统下各文件夹的作用 centos7修改系统默认语言 centos7安装rz/sz命令 centos7安装netstat centos7安装lsof命令 centos7下载并安装jdk并配置环境变量 centos7安装Tomcat centos7安装Nginx centos7安装MySQL Linux常用命令 centos系统下各文件夹的作用 /: 根目录,一般根目录下只存放目录,不