EFK日志系统安装文档
2.5. 修改 Linux下/etc/security/limits.conf文件设置 8
2.6. 修改配置 Linux下/etc/security/limits.d/90-nproc.conf文件设置 9
2.7. 修改配置 Linux下/etc/sysctl.conf文件设置 9
4.5. npm install -g grunt-cli 13
4.7.1. elasticsearch-5x下的 config/elasticsearch.yml 13
4.7.2. elasticsearch-head下Gruntfile.js 14
机器名称 |
主从关系 |
ip |
cdh-1 |
主 |
10.168.1.44 |
cdh-2 |
从 |
10.168.0.126 |
cdh-3 |
从 |
10.168.0.127 |
cdh-4 |
从 |
10.168.0.128 |
cdh-5 |
从 |
10.168.0.130 |
软件名称 |
版本号 |
插件 |
Elasticsearch |
6.3.1 |
|
Logstash |
6.3.1 |
|
Kibana |
6.3.1 |
|
Filebeat |
6.3.1 |
|
Kafka |
2.11-1.1.0 |
|
NodeJS |
8.11.3 |
|
zookeeper |
3.4.5 |
|
filebeat --> kafka --> logstash --> elasticsearch
启动顺序不能颠倒,filebeat一定放在最后启动。否则会出现logstash读取不到kafka数据的问题。
1 、elasticsearch、kafka、kibana
5台机器都需安装1.8以上JDK,因搭建CDH集群时各机器已安装JDK1.8.0_171,因此不再重复安装。
5台机器都新建/opt/EFK文件夹,EFK相关软件都放到此文件夹下面。
mkdir EFK |
elastic系列软件下载地址:https://www.elastic.co/downloads
其中,Elasticsearch、Logstash、Kibana、Filebeat从地址下载。
此处以下载ElasticSearch为例,其他软件都参考步骤下载最新版本即可。
浏览器输入https://www.elastic.co/downloads,进入下载地址
点击download按钮,进入下载类型选择界面。点击下图中圈出的TAR选项,下载最新版本。本次安装下载的版本为elasticsearch-6.3.1.tar.gz
5台机器都需解压安装包。
包:elasticsearch-6.3.1.tar.gz
在/opt/EFK解压:
tar -zxvf elasticsearch-6.3.1.tar.gz |
回到/opt路径,5台机器依次创建相同的用户组及用户。
因elasticsearch版本在6.0之后不允许用root用户启动,故必须创建新的用户。
命令:
groupadd es |
命令:
useradd es -g es -p elasticsearch |
命令:
chown -R es:es EFK |
5台机器都在opt/EFK路径下创建data目录和日志数据目录。
切换es用户:
su es |
创建data目录:
mkdir -p /opt/EFK/elasticsearch_data/data/ |
创建log目录:
mkdir -p /opt/EFK/elasticsearch_data/logs/ |
cdh-1机器:vim opt/EFK/elasticsearch-6.3.1/config/elasticsearch.yml
配置内容:
cluster.name: futuristEs node.name: es-1 # 是否为master node.master: true # 是否为数据节点 node.data: true # 数据目录 path.data: /opt/EFK/elasticsearch_data/data # 日志目录 path.logs: /opt/EFK/elasticsearch_data/logs bootstrap.memory_lock: false bootstrap.system_call_filter: false # 本机IP network.host: 0.0.0.0 # 本机http端口 http.port: 9200 # 指定集群中的节点中有几个有master资格的节点 discovery.zen.minimum_master_nodes: 1 # 指定集群中其他节点的IP discovery.zen.ping.unicast.hosts: ["10.168.1.44","10.168.0.126","10.168.0.127","10.168.0.128","10.168.0.130"] # ---------------------------------- 插件 ----------------------------------- # 下面两行配置为haad插件配置,5台服务器一致. http.cors.enabled: true http.cors.allow-origin: "*" |
其余四台机器:vim opt/EFK/elasticsearch-6.3.1/config/elasticsearch.yml
其中,node.name分别为:es-2,es-3,es-4,es-5。
master为false,其余都一样。
cluster.name: futuristEs node.name: es-2 # 是否为master node.master: false # 是否为数据节点 node.data: true # 数据目录 path.data: /opt/EFK/elasticsearch_data/data # 日志目录 path.logs: /opt/EFK/elasticsearch_data/logs bootstrap.memory_lock: false bootstrap.system_call_filter: false # 本机IP network.host: 0.0.0.0 # 本机http端口 http.port: 9200 # 指定集群中的节点中有几个有master资格的节点 discovery.zen.minimum_master_nodes: 1 # 指定集群中其他节点的IP discovery.zen.ping.unicast.hosts: ["10.168.1.44","10.168.0.126","10.168.0.127","10.168.0.128","10.168.0.130"] # ---------------------------------- 插件 ----------------------------------- # 下面两行配置为haad插件配置,5台服务器一致. http.cors.enabled: true http.cors.allow-origin: "*" |
5台机器都修改配置,最后配置如下
vim /etc/security/limits.conf * soft nofile 261444 * hard nofile 262144 es soft memlock unlimited es hard memlock unlimited |
5台机器都修改配置,最后配置如下
vim /etc/security/limits.d/90-nproc.conf * soft nproc unlimited root soft nproc unlimited |
5台机器都修改配置,最后配置如下
vim /etc/sysctl.conf vm.max_map_count = 262144 并执行命令: sysctl -p |
5台机器分布进入/opt/EFK/elasticsearch-6.3.1/bin路径
./elasticsearch |
后台长期启动
./elasticsearch -d |
查找ES进程
ps -ef | grep elastic |
杀掉ES进程
kill -9 2382(进程号) |
重启ES
sh elasticsearch -d |
在浏览区输入:http://10.168.0.127:9200/
返回如下类似结果为正常启动
{ "name" : "es-3", "cluster_name" : "futuristEs", "cluster_uuid" : "_na_", "version" : { "number" : "6.3.1", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "eb782d0", "build_date" : "2018-06-29T21:59:26.107521Z", "build_snapshot" : false, "lucene_version" : "7.3.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } |
打开官网下载链接:https://nodejs.org/en/download/ ,下载的版本为:node-v8.11.3-linux-x64.tar.xz
在cdh-1机器上解压node-v8.11.3-linux-x64.tar.xz。
opt/EFK路径下:
tar -xvf node-v8.11.3-linux-x64.tar.xz |
修改 /etc/profile
vim /etc/profile export NODEJS_HOME=/opt/EFK/node-v8.11.3-linux-x64 export PATH=$PATH:$JAVA_HOME/bin:$NODEJS_HOME/bin |
执行source /etc/profile
source /etc/profile |
出现v8.11.3说明测试成功
node -v v8.11.3 |
6.X中,elasticsearch-head
不能放在elasticsearch的 plugins、modules 目录下
不能使用 elasticsearch-plugin install
下载地址https://github.com/mobz/elasticsearch-head
在cdh-1机器上解压elasticsearch-head-master.zip。
opt/EFK路径下:
unzip elasticsearch-head-master.zip |
根据Node.js安装,进行安装node.js
/opt/EFK/elasticsearch-head-master路径下:
npm install -g grunt-cli |
/opt/EFK/elasticsearch-head-master路径下:
npm install |
http.cors.enabled: true http.cors.allow-origin: "*" |
connect: { server: { options: { hostname: '0.0.0.0', port: 9100, base: '.', keepalive: true } } } |
最后配置如下
vim /opt/EFK/elasticsearch-head-master/_site/app.js 找到如下代码 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; 更改为 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://10.168.1.44:9200"; |
/opt/EFK/elasticsearch-head-master路径下测试启动
grunt server |
后台长期启动
nohup grunt server &exit |
注意版本要和es版本相同 。
在cdh-1机器上解压kibana-6.3.1-linux-x86_64.tar.gz。
opt/EFK路径下:
tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz |
最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config/kibana.yml elasticsearch.url: "http://10.168.1.44:9200" # kibana监控哪台es机器 server.host: "10.168.1.44" # kibana运行在哪台机器 |
Kibana6.3版本默认自带X-pack插件,故不需再次安装。
在/opt/EFK/kibana-6.3.1-linux-x86_64/bin路径下
./kibana |
长期启动
nohup ./kibana &exit |
查找进程号
fuser -n tcp 5601 |
杀死进程号
kill -9 13265 |
访问地址:http://10.168.1.44:5601
github上有汉化的项目,地址:https://github.com/anbai-inc/Kibana_Hanization
在/opt/EFK/kibana-6.3.1-linux-x86_64路径下
unzip Kibana_Hanization-master.zip |
命令很简单,没错这是python脚本
在/opt/EFK/kibana-6.3.1-linux-x86_64/Kibana_Hanization-master路径下
python main.py "/opt/EFK/kibana-6.3.1-linux-x86_64/" |
出现“恭喜,Kibana汉化完成!“表示成功
访问地址:http://10.168.1.44:5601
注意版本要和es版本相同 。
在5台机器上解压filebeat-6.3.1-linux-x86_64.tar.gz。
opt/EFK路径下:
tar -zxvf filebeat-6.3.1-linux-x86_64.tar.gz |
在/opt/EFK/filebeat-6.3.1-linux-x86_64路径下:
vim filebeat.yml |
配置内容为:(path代表收集哪些文件夹下面的日志)
filebeat.inputs: - type: log enabled: false paths: - /var/log/audit/audit.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false
setup.template.settings: index.number_of_shards: 5 setup.kibana: host: "10.168.1.44:5601" output.kafka: enabled: true hosts: ["10.168.1.44:9092","10.168.0.126:9092","10.168.0.127:9092","10.168.0.128:9092","10.168.0.130:9092"] topic: 'futurist'
|
/opt/EFK/filebeat-6.3.1-linux-x86_64路径下:
./filebeat -e -c filebeat.yml -d "publish" |
长期启动:
nohup ./filebeat -e -c filebeat.yml & |
查找进程ID并kill掉:
ps -ef |grep filebeat kill -9 进程号 |
csd包:http://archive.cloudera.com/csds/kafka/
这里下载的版本为:KAFKA-1.2.0.jar
parcel包: http://archive.cloudera.com/kafka/parcels/latest/
这里下载的版本为:KAFKA-3.1.0-1.3.1.0.p0.35-el6.parcel和KAFKA-3.1.0-1.3.1.0.p0.35-el6.parcel.sha1
其中,KAFKA-3.1.0-1.3.1.0.p0.35-el6.parcel.sha1后缀需要改为.sha
- 集成实现
- 关闭集群,关闭cm服务
- 集成实现
假如不关闭cm服务,会出现在添加kafka服务时找不到相关的服务描述。
- 上传包
将csd包放到cm安装节点下的 /opt/cloudera/csd目录下,如图 :
将parcel包放到cm安装节点下的 /opt/cloudera/parcel-repo目录下,如图:
- 启动cm服务
- 分配并激活percel包
- 添加kafka服务
其中,brokerId在此次安装中由于的对应关系为(由于之前本地安装过kafka,故brokerId需按下面配置,正常来说自动生成,不需配置):
主机 |
brokerId |
cdh-1 |
1 |
cdh-2 |
2 |
cdh-3 |
5 |
cdh-4 |
3 |
cdh-5 |
4 |
- 启动kafka
下载地址:https://kafka.apache.org/downloads
这里下载的版本为:kafka_2.11-1.1.0.tgz
在5台机器上解压kafka_2.11-1.1.0.tgz。
opt/EFK路径下:
tar -zxvf kafka_2.11-1.1.0.tgz |
cdh-1机器修改配置,最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config broker.id=1 listeners=PLAINTEXT://10.168.1.44:9092 zookeeper.connect=10.168.1.44:2181 |
cdh-2机器修改配置,最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config broker.id=2 listeners=PLAINTEXT://10.168.0.126:9092 zookeeper.connect=10.168.0.126:2181 |
cdh-3机器修改配置,最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config broker.id=3 listeners=PLAINTEXT://10.168.0.127:9092 zookeeper.connect=10.168.0.127:2181 |
cdh-4机器修改配置,最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config broker.id=4 listeners=PLAINTEXT://10.168.0.128:9092 zookeeper.connect=10.168.0.128:2181 |
cdh-5机器修改配置,最后配置如下
vim /opt/EFK/kibana-6.3.1-linux-x86_64/config broker.id=5 listeners=PLAINTEXT://10.168.0.130:9092 zookeeper.connect=10.168.0.130:2181 |
$ bin/zookeeper-server-start.sh config/zookeeper.properties
默认使用的2181端口,可在配置文件修改。
/opt/EFK/kafka_2.11-1.1.0路径下:
./bin/kafka-server-start.sh config/server.properties |
长期启动:
nohup ./bin/kafka-server-start.sh config/server.properties & |
查找进程号
fuser -n tcp 9092 |
杀死进程号
kill -9 13265 |
/opt/EFK/kafka_2.11-1.1.0路径下:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 5 --topic test 增加分区 bin/kafka-topics.sh --alter --zookeeper 10.168.0.126:2181 --topic futurist --partitions 5 |
注意版本要和es版本相同 。
在cdh-1机器上解压logstash-6.3.1.tar.gz。
opt/EFK路径下:
tar -zxvf logstash-6.3.1.tar.gz |
在/opt/EFK/logstash-6.3.1/config路径下:
vi kafka.conf |
配置内容为:
input { kafka { bootstrap_servers => ["10.168.1.44:9092,10.168.0.126:9092,10.168.0.127:9092,10.168.0.128:9092,10.168.0.130:9092"] group_id =>"1" topics => ["test"] consumer_threads => 5 decorate_events =>true codec => "json" } } filter { grok {match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}} } output { elasticsearch { hosts => ["10.168.1.44:9200","10.168.0.126:9200","10.168.0.127:9200","10.168.0.128:9200","10.168.0.130:9200"] index => "hdfs-%{type}-%{host}--%{+YYYY.MM.dd}" codec => "json" } } |
/opt/EFK/logstash-6.3.1路径下:
./bin/logstash -f config/kafka.conf |
长期启动:
nohup ./bin/logstash -f config/kafka.conf & |
查找ES进程
ps -ef | grep logstash |
杀掉ES进程
kill -9 2382(进程号) |
问题一:警告提示
[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
at org.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]
报了一大串错误,其实只是一个警告。
解决:使用新得linux版本,就不会出现此类问题了。
问题二:ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
问题三:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
问题四:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=262144
并执行命令:
sysctl -p
问题五:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决:修改切换到root用户修改配置limits.conf 添加下面两行
命令:vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
切换到es的用户。
问题六:
ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因:
这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
解决:
在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
然后,重新启动elasticsearch,即可启动成功。
问题六:后台运行
最后还有一个小问题,如果你在服务器上安装Elasticsearch,而你想在本地机器上进行开发,这时候,你很可能需要在关闭终端的时候,让Elasticsearch继续保持运行。最简单的方法就是使用nohup。先按Ctrl + C,停止当前运行的Elasticsearch,改用下面的命令运行Elasticsearch
nohup./bin/elasticsearch&
这样,你就可以放心地关闭服务器终端,而不用担心Elasticsearch也跟着关闭了
注意:我安装的是https://www.elastic.co/downloads/past-releases/kibana-7-11-0 和 https://www.elastic.co/downloads/past-releases/elasticsearch-7-11-0 版本,更高版本需要tls,fluentd可能连接不上