EFK教程 - EFK快速入门指南
参考:https://mp.weixin.qq.com/s/Kzqllh5VQedss2u-DSrDhQ
通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果
用途:
▷ 通过filebeat实时收集nginx访问日志、传输至elasticsearch集群
▷ filebeat将收集的日志传输至elasticsearch集群
▷ 通过kibana展示日志
实验架构:
▷ 服务器配置:
名称 | IP | CPU | 内存 |
---|---|---|---|
filebeat | 172.18.1.237 | 2 | 2G |
kibana | 172.18.4.4 | 2 | 2G |
elasticsearch-1 | 172.18.3.138 | 4 | 4G |
elasticsearch-2 | 172.18.3.139 | 4 | 4G |
elasticsearch-3 | 172.18.3.253 | 4 | 4G |
▷ 架构图

一、安装elasticsearch
三个机器都执行脚本
[root@es-1 ~]# cat install_elasticsearch.sh
mkdir -p /opt/software && cd /opt/software
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz
mv elasticsearch-7.3.2 /opt/elasticsearch
useradd elasticsearch -d /opt/elasticsearch -s /sbin/nologin
mkdir -p /opt/logs/elasticsearch
chown elasticsearch.elasticsearch /opt/elasticsearch -R
chown elasticsearch.elasticsearch /opt/logs/elasticsearch -R
# 限制一个进程可以拥有的VMA(虚拟内存区域)的数量要超过262144,不然elasticsearch会报max virtual memory areas vm.max_map_count [65535] is too low, increase to at least [262144]
echo "vm.max_map_count = 655350" >> /etc/sysctl.conf
sysctl -p
二、安装filebeat
[root@nginx-1 ~]# cat install_filebeat.sh
mkdir -p /opt/software && cd /opt/software
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-linux-x86_64.tar.gz
mkdir -p /opt/logs/filebeat/
tar -zxvf filebeat-7.3.2-linux-x86_64.tar.gz
mv filebeat-7.3.2-linux-x86_64 /opt/filebeat
[root@nginx-1 ~]# bash install_filebeat.sh
三、安装kibana
[root@kibana ~]# cat install_kibana.sh
mkdir -p /opt/software && cd /opt/software
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-linux-x86_64.tar.gz
tar -zxvf kibana-7.3.2-linux-x86_64.tar.gz
mv kibana-7.3.2-linux-x86_64 /opt/kibana
useradd kibana -d /opt/kibana -s /sbin/nologin
chown kibana.kibana /opt/kibana -R
[root@kibana ~]# bash install_kibana.sh
四、nginx安装(用于生成日志,被filebeat收集)
[root@nginx-1 ~]# yum install nginx -y
[root@nginx-1 ~]# nginx -c /etc/nginx/nginx.conf
五、elasticsearch配置
es-1(172.18.3.138)
vim /opt/elasticsearch/config/elasticsearch.yml
#集群名字
cluster.name: 007-project
#节点名字
node.name: es-1
#日志位置
path.logs: /opt/logs/elasticsearch
#本节点访问IP
network.host: 172.18.3.138
#本结点访问端口
http.port: 9200
#节点运输端口
transport.port: 9300
#集群中其他主机的列表
discovery.seed_hosts: ["es-1", "es-2", "es-3"]
#首次启动全新的Elasticsearch集群时,在第一次选举中便对其票数进行计数的master节点的集合
cluster.initial_master_nodes: ["es-1", "es-2","es-3"]
#启用跨域资源共享
http.cors.enabled: true
http.cors.allow-origin: "*"
#只要有2台数据或主节点已加入集群,就可以恢复
gateway.recover_after_nodes: 2
es-1(172.18.3.139)
vim /opt/elasticsearch/config/elasticsearch.yml
#集群名字
cluster.name: 007-project
#节点名字
node.name: es-2
#日志位置
path.logs: /opt/logs/elasticsearch
#本节点访问IP
network.host: 172.18.3.139
#本结点访问端口
http.port: 9200
#节点运输端口
transport.port: 9300
#集群中其他主机的列表
discovery.seed_hosts: ["es-1", "es-2", "es-3"]
#首次启动全新的Elasticsearch集群时,在第一次选举中便对其票数进行计数的master节点的集合
cluster.initial_master_nodes: ["es-1", "es-2","es-3"]
#启用跨域资源共享
http.cors.enabled: true
http.cors.allow-origin: "*"
#只要有2台数据或主节点已加入集群,就可以恢复
gateway.recover_after_nodes: 2
es-1(172.18.3.253)
vim /opt/elasticsearch/config/elasticsearch.yml
#集群名字
cluster.name: 007-project
#节点名字
node.name: es-3
#日志位置
path.logs: /opt/logs/elasticsearch
#本节点访问IP
network.host: 172.18.3.253
#本结点访问端口
http.port: 9200
#节点运输端口
transport.port: 9300
#集群中其他主机的列表
discovery.seed_hosts: ["es-1", "es-2", "es-3"]
#首次启动全新的Elasticsearch集群时,在第一次选举中便对其票数进行计数的master节点的集合
cluster.initial_master_nodes: ["es-1", "es-2","es-3"]
#启用跨域资源共享
http.cors.enabled: true
http.cors.allow-origin: "*"
#只要有2台数据或主节点已加入集群,就可以恢复
gateway.recover_after_nodes: 2
六、filebeat配置
nginx(172.18.1.237)
vim /opt/filebeat/filebeat.yml
# 文件输入
filebeat.inputs:
# 文件输入类型
- type: log
# 开启加载
enabled: true
# 文件位置
paths:
- /var/log/nginx/*.log
# 自定义参数
fields:
type: nginx_access
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
# 输出至elasticsearch
output.elasticsearch:
# elasticsearch集群
hosts: ["http://172.18.3.138:9200",
"http://172.18.3.139:9200",
"http://172.18.3.253:9200"]
# 索引配置
indices:
- index: "nginx_access_%{+yyy.MM}"
# 当类型是nginx_access时使用此索引
when.equals:
fields.type: "nginx_access"
# 关闭自带模板
setup.template.enabled: false
# 开启日志记录
logging.to_files: true
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
# 日志等级
logging.level: info
# 日志文件
logging.files:
# 日志位置
path: /opt/logs/filebeat/
# 日志名字
name: filebeat
# 日志轮转期限,必须要2~1024
keepfiles: 7
# 日志轮转权限
permissions: 0600
七、kibana配置
kibana(172.18.4.4)
vim /opt/kibana/config/kibana.yml
# 本节点访问端口
server.port: 5601
# 本节点IP
server.host: "kibana"
# elasticsearch集群IP
elasticsearch.hosts: ["http://172.18.3.138:9200",
"http://172.18.3.139:9200",
"http://172.18.3.253:9200"]
八、启动服务
#elasticsearch启动(3台es均启动)
sudo -u elasticsearch /opt/elasticsearch/bin/elasticsearch
#filebeat启动
/opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.yml -d "publish"
# kibana启动
sudo -u kibana /opt/kibana/bin/kibana -c /opt/kibana/config/kibana.yml
kibana启动会报错:
sudo -u kibana /opt/kibana/bin/kibana -c /opt/kibana/config/kibana.yml

暂时解决:用root启动:/opt/kibana/bin/kibana -c /opt/kibana/config/kibana.yml --allow-root
九、kibana界面配置
1、访问到下面界面表示kibana成功了:

2、点‘try ouer sample data’

3、选no,不让kibana统计信息

4、选web log那个模版,点击添加data到kibana

5、进入视图(dashboard)


十、测试
1、访问nginx,产生日志
[root@node1 ~]# curl http://172.18.1.237/
2、在kibana上看数据
(1)创建索引模版

(2)输入你要创建的索引模板的名字


(3)查看之前curl的数据


还可以转换成json查看

十一、获取集群的一些信息
1、查看集群的健康状态
[root@node1 ~]# curl http://172.18.3.138: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
1573846170 19:29:30 007-project green 3 3 10 5 0 0 0 0 - 100.0%


关于这些参数参考:https://blog.csdn.net/weixin_44723434/article/details/90452083
前两个是时间戳,不过多介绍。其余如下:
cluster ,集群名称
status,集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
node.total,代表在线的节点总数量,上图为有3个机子组成集群
node.data,代表在线的数据节点的数量,上图为有3个节点的存储
shards, active_shards 存活的分片数量
pri,active_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
relo, relocating_shards 迁移中的分片数量,正常情况为 0
init, initializing_shards 初始化中的分片数量 正常情况为 0
unassign, unassigned_shards 未分配的分片 正常情况为 0
pending_tasks,准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time,任务最长等待时间
active_shards_percent,正常分片百分比 正常情况为 100%
停掉一个节点:

2、获取集群节点的列表
可以看到,有三个节点,以及机器的cpu负载情况,此时es-3是master
[root@node1 ~]# curl http://172.18.3.138:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.18.3.139 24 97 0 0.10 0.10 0.17 dim - es-2
172.18.3.138 18 92 0 0.04 0.04 0.05 dim - es-1
172.18.3.253 11 73 0 0.08 0.03 0.05 dim * es-3
node.role: d # 只拥有data角色
node.role: i # 只拥有ingest角色
node.role: m # 只拥有master角色
node.role: mid # 拥master、ingest、data角色
3、列出所有的索引
[root@node1 ~]# curl http://172.18.3.138:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open nginx_access_2019.11 72E1PXcaQGeKSCI069MZYg 1 1 5 0 109.7kb 54.8kb
green open .kibana_task_manager E6p_8T5vT0KvFyeRUtZzxQ 1 1 2 0 12.9kb 6.4kb
green open filebeat-7.3.2-2019.11.17-000001 _R_qikMqTNGa0Tc0PZ7Odg 1 1 0 0 566b 283b
green open kibana_sample_data_logs Qr7_g9vGRgydtmQpswGp2A 1 1 14074 0 22.8mb 11.4mb
green open .kibana_1 QEcc56yJSHabLauYqIBm3g 1 1 42 0 203.2kb 101.6kb

4、查询节点状态
http://172.18.3.253:9200/_nodes/stats?pretty

5、查看ES哪些进程在消耗资源
