Elasticstack 5.1.2 集群日志系统部署及实践
一、ELK Stack简介
ELK Stack 是Elasticsearch、Logstash、Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的。
可参考:https://www.elastic.co/products
二、Elasticstack重要组件
Elasticsearch: 准实时索引
Logtash: 收集数据,配置使用 Ruby DSL
Kibana 展示数据,查询聚合,生成报表
Kafka 消息队列,做为日志接入的缓冲区
三、Elasticstack工作流程
简要说明:
1)日志机器上部署logstash服务,用于监控并收集日志,然后,将收集到的日志发送到broker上。
2)Indexer会将这些日志收集到一起,统一发送到Elasticsearch上进行存储。
3)最后Kibana会将需要的数据进行展示,可以进行自定义搜索
四、环境准备
系统:centos 7.2
JDK: 1.8.0_111
filebeat: 5.1.2
logstash: 5.1.2
elasticsearch: 5.1.2 (注:ELK stack 5.1以上版本JDK必须是1.8以上)
kibana: 5.1.2
X-Pack:5.1
kafka: 2.11-0.10.1.0
测试服务器准备:
主机名称:node01 IP:192.168.2.14 职责:主机节点以及数据节点、kafka/logstash
主机名称:node02 IP: 192.168.2.15 职责:主机节点以及数据节点、kibana
主机名称:node03 IP: 192.168.2.17 职责:主机节点以及数据节点、Elasticstack-head插件
主机名称:test IP: 192.168.2.70 职责:客户端
注:分配内存建议大于2G
测试服务器设置:
配置hosts(/etc/hosts)
192.168.2.14 node01
192.168.2.15 node02
192.168.2.17 node03
关闭防火墙&Sellinux
配置yum源:
#yum -y install epel-release
时间同步:
#rpm -qa |grep chrony
配置时间同步源:# vi /etc/chrony.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 10.100.2.5 iburst
重启时间同步服务:# systemctl restart chronyd.service
node01和node02安装配置JDK:
#yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装openjdk
1)标准方式配置环境变量:
vim /etc/profile
将下面的三行粘贴到 /etc/profile中:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
2)保存关闭后,执行:source /etc/profile #让设置立即生效。
[root@~]# echo $JAVA_HOME
[root@ ~]# echo $CLASSPATH
[root@ ~]# echo $PATH
测试是否安装配置成功
# 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)下载相应的组件到/home/soft
#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.zip
#wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.2-linux-x86_64.tar.gz
#wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.2.zip
#wget http://apache.mirrors.lucidnetworks.net/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz
五、node01节点安装部署elasticsearch
1、创建elk用户、组
[root@node01 soft]groupadd elk
[root@node01 soft]useradd -g elk elk
2、elasticsearch解压至/usr/local/目录下
[root@node01 soft]#unzip elasticsearch-5.1.2.zip -d /usr/local/
3、创建data/db和data/logs分别存储数据文件和日志文件
[root@node01 soft]# mkdir -pv /data/{db,logs}
4、授权data/db和data/logs、/usr/local/elasticsearch-5.1.2文件夹elk用户及用户组读取权限
[root@node01 soft]chown elk:elk /usr/local/elasticsearch-5.1.2 -R
[root@node01 soft]chown elk:elk /data/{db,logs} -R
5、编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node01 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node01
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false #关闭es认证 与kibana对应,不然后面安装x-pack需要用户名密码验证
注:
cluster.name: ELKstack-5 #集群的名字(可任意取名称)
node.name: node01 #换个节点名字
network.host: 0.0.0.0 #监听地址,0.0.0.0表示任意机器可以访问
http.port: 9200 #可默认
http.cors.enabled: true #head插件可以访问es
http.cors.allow-origin: "*"
discovery.zen.ping.unicast.hosts: 集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.minimum_master_nodes: 选举一个Master需要多少个节点(最少候选节点数),一般设置成 N/2 + 1,N是集群中节点的数量
xpack.security.enabled: false #关闭es认证 与kibana对应,禁用了认证功能,如果启用了认证,访问时需要指定用户名密码
6、根据elk运行环境,需要修改以下参数(修改参数以后建议重启机器)
1)[root@node01 config]# vim /etc/security/limits.conf #修改限制参数,允许elk用户访问mlockall
# allow user 'elk mlockall
elk soft memlock unlimited
elk hard memlock unlimited
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2)[root@node01 config]# vim /etc/security/limits.d/20-nproc.conf #修改可打开的文件描述符的最大数(软限制)
修改如下内容:
* soft nproc 4096
#修改为
* soft nproc 2048
3)[root@node01 config]# vim /etc/sysctl.conf #限制一个进程可以拥有的VMA(虚拟内存区域)的数量
添加下面配置:
vm.max_map_count=655360
[root@node01 config]# sysctl -p #刷新修改参数使其生效
4)修改jvm空间分配,因为elasticsearch5.x默认分配jvm空间大小为2g
[root@node01 elasticsearch-5.1.2]# vim config/jvm.options
-Xms2g
-Xmx2g
修改为
[root@node01 elasticsearch-5.1.2]# vim config/jvm.options
-Xms512m
-Xmx512m
不然会报以下错误:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1973026816 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/elasticsearch-5.1.2/hs_err_pid11986.log
5)启动elasticsearch服务,注:elasticsearch默认不允许root用户启动服务,切换至普通用户启动
[root@node01 elasticsearch-5.1.2]#su - elk
[elk@node01 elasticsearch-5.1.2]$cd /usr/local/elasticsearch-5.1.2
[elk@node01 elasticsearch-5.1.2]$nohup ./bin/elasticsearch &
[elk@node01 elasticsearch-5.1.2]$./elasticsearch -d #ElasticSearch后端启动命令
注:停止服务(ps -ef |grep elasticsearch 、kill PID)
6)启动后查看进程是否监听端口9200/9300,并且浏览器访问http://192.168.2.14:9200/,是否正常输出es集群信息等
[root@node01 ~]# ss -tlnp |grep '9200'
LISTEN 0 128 :::9200 :::* users:(("java",pid=2288,fd=113)
[root@node01 ~]# curl http://192.168.2.14:9200
{
"name" : "node01",
"cluster_name" : "ELKstack-5",
"cluster_uuid" : "jZ53M8nuRgyAKqgQCDG4Rw",
"version" : {
"number" : "5.1.2",
"build_hash" : "c8c4c16",
"build_date" : "2017-01-11T20:18:39.146Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
六、类似node01节点安装elasticsearch部署node02、node03节点
1、安装部署node02节点elasticsearch
1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node02 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node02
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false #关闭es认证 与kibana对应
注:其他配置部署同node01
2、安装部署node03节点elasticsearch
1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node02 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node03
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false #关闭es认证 与kibana对应
注:其他配置部署同node01
3、3个节点(node01,node02,node03)启动后,查看集群是否正常,节点是否正常
常用查询命令如下:
查看集群状态:curl -XGET http://localhost:9200/_cat/health?v
查看集群节点:curl -XGET http://localhost:9200/_cat/nodes?v
查询索引列表:curl -XGET http://localhost:9200/_cat/indices?v
创建索引:curl -XPUT http://localhost:9200/customer?pretty
查询索引:curl -XGET http://localhost:9200/customer/external/1?pretty
删除索引:curl -XDELETE http://localhost:9200/customer?pretty
[root@node01 ~]# curl -XGET http://localhost:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1486384674 20:37:54 ELKstack-5 green 3 3 0 0 0 0 0 0 - 100.0%
[root@node01 ~]# curl -XGET http://localhost:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.2.17 22 94 3 0.58 0.55 0.27 mdi * node03
192.168.2.15 22 93 0 0.59 0.60 0.29 mdi - node02
192.168.2.14 22 93 1 0.85 0.77 0.37 mdi - node01
七、node3(192.168.2.17)节点上安装head插件(由于elasticsearch5.0版本变化较大,目前elasticsearch5.0 暂时不支持直接安装)
1、在从github上面下载代码,因此先要安装git,授权文件和目录(777)
[root@node03 local]# yum install git
[root@node03 local]# git clone git://github.com/mobz/elasticsearch-head.git
[root@node03 local]# chmod 777 -R elasticsearch-head/*
2、下载Node.js,并解压,配置进环境变量
[root@node03 soft]# wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.6.1-linux-x64.tar.gz
[root@node03 soft]# tar -xvf node-v4.6.1-linux-x64.tar.gz #解压至当前目录
[root@node03 soft]#vim /etc/profile
添加如下: export PATH=/home/soft/node-v4.6.1-linux-x64/bin:$PATH
[root@node03 soft]#source /etc/profile #使配置文件生效。
3、在/usr/local/elasticsearch-head/目录下,进行npm install 使用node.js安装
[root@node03 elasticsearch-head]# npm install -g cnpm --registry=https://registry.npm.taobao.org
[root@node03 elasticsearch-head]# npm install grunt --save-dev
4、修改目录/usr/local/elasticsearch-head/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '0.0.0.0',
base: '.',
keepalive: true
}
}
}
增加hostname属性,设置为*或'0.0.0.0'
5、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务
# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样
http.cors.enabled: true
http.cors.allow-origin: "*"
6、修改目录/usr/local/elasticsearch/plugins/head/_site/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '0.0.0.0',
base: '.',
keepalive: true
}
}
}
增加hostname属性,设置为*或'0.0.0.0'
7、修改/usr/local/elasticsearch-head/_site/app.js连接地址:
修改head的连接地址:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
把localhost修改为es的服务器地址,如:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.2.17:9200";
8、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务
# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样
http.cors.enabled: true
http.cors.allow-origin: "*"
9、解决依赖并启动服务
执行npm install下载依赖的包:
[root@node03 elasticsearch-head]#npm install
[root@node03 elasticsearch-head]#./node_modules/grunt/bin/grunt serverb & #后台启动服务
测试访问:http://192.168.2.17:9100/
八、node2(192.168.2.15)节点上安装部署kibana
1、kibana解压至/usr/local/目录下
[root@node02 soft]# tar -xvf kibana-5.1.2-linux-x86_64.tar.gz -C /usr/local/
2、修改/usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml配置文件,如下:并启动kibana服务
[root@node02 soft]#vim /usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "192.168.2.15"
elasticsearch_url: "http://192.168.2.15:9200"
xpack.security.enabled: false #关闭认证,为后面kibana增加x-pack组件免去用户名密码认证
[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana > /var/log/kibana.log 2>&1 & #启动服务
九、配置客户端test节点(192.168.2.70)
1、安装配置JDK(同node01~node03,这里不再阐述)
2、拷贝logstash至客户端,并解压至/usr/local/目录下
[root@node02 config]# scp /home/soft/logstash-5.1.2.zip root@192.168.2.70:/home/soft/
[root@test soft]#unzip logstash-5.1.2.zip -d /usr/local/
3、编辑logstash服务管理脚本(配置路径可根据实际情况修改)
[root@test logstash-5.1.2]# mkdir logs etc #创建目录logs,etc
[root@test logstash-5.1.2]# vim /etc/init.d/logstash
[root@test logstash-5.1.2]# chmod +x /etc/init.d/logstash #添加权限
脚本如下:
#!/bin/bash
#chkconfig: 2345 55 24
#description: logstash service manager
#auto: Maoqiu Guo
FILE='/usr/local/logstash-5.1.2/etc/*.conf' #logstash配置文件
LOGBIN='/usr/local/logstash-5.1.2/bin/logstash agent --verbose --config' #指定logstash配置文件的命令
LOCK='/usr/local/logstash-5.1.2/locks' #用锁文件配合服务启动与关闭
LOGLOG='--log /usr/local/logstash-5.1.2/logs/stdou.log' #日志
START() {
if [ -f $LOCK ];then
echo -e "Logstash is already