目录
一.ElasticStack及EFK架构梳理
1.什么是ElasticStack
ElasticStack是elastic公司推出的一系列技术栈。
早期ElasticStack的前身,有一个很火的名词叫ELK,代表的是该公司的三款日志采集方案的技术栈。
- ElasticSearch
是一款分布式高可用的数据库,主要作用就是存储和检索数据。
简称ES集群。
- Logstash
是一款日志分析处理工具,主要对数据进行过滤,处理,转换等相关操作,将处理后的数据写入ES集群。
- Kibana
需要链接ES集群,可以图形化查询ES集群数据。简化查询过程。
后来,logstash相对来说比较重量级,业界开始使用其他的日志采集工具进行替代(比如Fluentd,Flume等),官方也推出了轻量级解决方案,beats组件,其中比较出名的就是Filebeat,主要是用于日志文件采集。
于是起名字就成了一个问题,有的公司使用ELFK架构,EFK架构,ELK架构,后来官方将elk stack更名为elasticstack。
官方文档:
https://www.elastic.co/cn/
"ES8-"版本技术文档:
https://www.elastic.co/guide/index.html
2.EFK架构图解
如图所示,EFK架构是业界目前主流的一种日志采集解决方案。
二.ElasticSearch环境部署
1.ElasticSearch单点部署
环境准备:ubantu操作系统
10.0.0.91 elk1
10.0.0.92 elk2
10.0.0.93 elk3
为避免权限问题,进入系统后均用root用户操作❗️
1.进入ubantu系统
2.设置root密码
sudo passwd root #设置密码为1
3.切换到root用户
su - root
1.下载ES软件包
kylin环境和centos环境
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.29-x86_64.rpm
ubantu环境
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.29-amd64.deb
[root@elk91 ~]# wget http://192.168.14.253/Resources/ElasticStack/softwares/ES7/7.17.29/elasticsearch-7.17.29-amd64.deb
2.安装并解压ES软件包
[root@elk91 ~]# ll elasticsearch-7.17.29-amd64.deb
-rw-r--r-- 1 root root 325488012 Aug 27 2025 elasticsearch-7.17.29-amd64.deb
[root@elk91 ~]# dpkg -i elasticsearch-7.17.29-amd64.deb
3.修改ES的配置文件
[root@elk91 ~]# vim /etc/elasticsearch/elasticsearch.yml
# 对外暴露ES的IP地址
network.host: 0.0.0.0
# 表示当前ES是一个单点,而非集群
discovery.type: single-node
4.启动ES服务
[root@elk91 ~]# systemctl start elasticsearch.service
[root@elk91 ~]# ss -ntl | egrep "92|300" # 可能会有几秒的延迟才会显示出来
LISTEN 0 4096 *:9300 *:*
LISTEN 0 4096 *:9200 *:*
端口说明:
9200:
支持http|https协议,主要是集群外部提供服务的端口。
9300:
使用的是tcp协议,主要是用于ES集群数据内部传输的端口。
5.测试验证
[root@elk91 ~]# curl 10.0.0.91:9200
{
"name" : "elk91",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "QtOwSp-jTMms3YweEq47-Q",
"version" : {
"number" : "7.17.29",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "580aff1a0064ce4c93293aaab6fcc55e22c10d1c",
"build_date" : "2025-06-19T01:37:57.847711500Z",
"build_snapshot" : false,
"lucene_version" : "8.11.3",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
[root@elk91 ~]# curl 10.0.0.91:9200/_cat/nodes
10.0.0.91 8 97 5 0.09 0.10 0.04 cdfhilmrstw * elk91
2.ElasticSearch集群部署
1.停止ES单点
[root@elk91 ~]# systemctl stop elasticsearch.service
[root@elk91 ~]# ss -ntl | egrep "92|300"
2.修改ES的配置文件
[root@elk91 ~]# vim /etc/elasticsearch/elasticsearch.yml
[root@elk91 ~]# egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml
cluster.name: oldboyedu-linux102-cluster
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.91", "10.0.0.92","10.0.0.93"]
cluster.initial_master_nodes: ["10.0.0.91", "10.0.0.92","10.0.0.93"]
相关参数说明
cluster.name
指定集群的名称,ES所有节点必须指定同样的名称,否则无法加入集群。
path.data:
数据存储路径。
path.logs:
日志存储路径。
network.host:
对外监听的地址。
discovery.seed_hosts:
分布式集群的主机列表。
cluster.initial_master_nodes
参数master选举的列表。
3.清空之前的数据
[root@elk91 ~]# rm -rf /var/{log,lib}/elasticsearch/*
[root@elk91 ~]# ll /var/{log,lib}/elasticsearch/ # 必须显示以下内容,才算成功!
/var/lib/elasticsearch/:
total 8
drwxr-s--- 2 elasticsearch elasticsearch 4096 Oct 29 11:36 ./
drwxr-xr-x 61 root root 4096 Oct 29 10:08 ../
/var/log/elasticsearch/:
total 8
drwxr-s--- 2 elasticsearch elasticsearch 4096 Oct 29 11:36 ./
drwxrwxr-x 10 root syslog 4096 Oct 29 10:08 ../
4.分发软件包(确保elk91的根目录下有这个压缩包)
[root@elk91 ~]# scp elasticsearch-7.17.29-amd64.deb 10.0.0.92:~
[root@elk91 ~]# scp elasticsearch-7.17.29-amd64.deb 10.0.0.93:~
——————————————————————————无法传输解决方案——————————————————————————
优先配置1:
①.更改ssh配置文件,允许远程登录
vim /etc/ssh/sshd_config,将 PermitRootLogin 改为 yes。
②.重启 SSH 服务
systemctl restart ssh。
③.注意❗️三台机器都需要更改配置❗️即10.0.0.91-elk1 , 10.0.0.92-elk2 , 10.0.0.93-elk3
额外配置2:(启动ES服务时可能会用到)
如果还是不能使用scp,就配置一下文件权限
Elasticsearch 不能使用 root 用户运行,它必须使用 elasticsearch 用户。如果数据目录或日志目录的归属权不对,也会启动失败。
# 确保数据目录和日志目录属于 elasticsearch 用户
sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch
sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch
注意❗️三台机器都需要更改配置❗️即10.0.0.91-elk1 , 10.0.0.92-elk2 , 10.0.0.93-elk3
———————————————————————————————————————————————————————————————————
5.其他节点安装ES服务
[root@elk92 ~]# dpkg -i elasticsearch-7.17.29-amd64.deb
[root@elk93 ~]# dpkg -i elasticsearch-7.17.29-amd64.deb
6.同步配置文件
[root@elk91 ~]# scp /etc/elasticsearch/elasticsearch.yml 10.0.0.92:/etc/elasticsearch/
[root@elk91 ~]# scp /etc/elasticsearch/elasticsearch.yml 10.0.0.93:/etc/elasticsearch/
7.同时启动ES服务【否则可能会脑裂】
# 小窍门:使用Alt加上数字键🔢,即可切换想要的shell窗口,多加练习哦!!!
[root@elk91 ~]# systemctl enable --now elasticsearch.service
[root@elk91 ~]# ss -ntl | egrep "92|300"
LISTEN 0 4096 *:9200 *:*
LISTEN 0 4096 *:9300 *:*
[root@elk92 ~]# systemctl enable --now elasticsearch.service
[root@elk92 ~]# ss -ntl | egrep "92|300"
LISTEN 0 4096 *:9300 *:*
LISTEN 0 4096 *:9200 *:*
[root@elk93 ~]# systemctl enable --now elasticsearch.service
[root@elk93 ~]# ss -ntl | egrep "92|300"
LISTEN 0 4096 *:9300 *:*
LISTEN 0 4096 *:9200 *:*
8.验证集群是否正常
[root@elk91 ~]# curl 10.0.0.91:9200/_cat/nodes
10.0.0.92 16 97 56 0.88 0.26 0.08 cdfhilmrstw * elk92
10.0.0.91 15 97 38 1.21 0.30 0.10 cdfhilmrstw - elk91
10.0.0.93 21 97 51 1.21 0.32 0.10 cdfhilmrstw - elk93
[root@elk91 ~]# curl 10.0.0.92:9200/_cat/nodes
10.0.0.91 15 97 3 1.02 0.29 0.10 cdfhilmrstw - elk91
10.0.0.93 21 97 0 1.11 0.32 0.10 cdfhilmrstw - elk93
10.0.0.92 17 91 48 0.89 0.27 0.09 cdfhilmrstw * elk92
[root@elk91 ~]# curl 10.0.0.93:9200/_cat/nodes
10.0.0.91 15 97 0 1.02 0.29 0.10 cdfhilmrstw - elk91
10.0.0.92 17 96 52 0.90 0.29 0.09 cdfhilmrstw * elk92
10.0.0.93 5 97 5 1.02 0.31 0.10 cdfhilmrstw - elk93
[root@elk91 ~]# curl 10.0.0.93:9200
{
"name" : "elk93",
"cluster_name" : "oldboyedu-linux102-es7",
"cluster_uuid" : "ChbcjlSbRTWR4V952_ZBBg",
"version" : {
"number" : "7.17.29",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "580aff1a0064ce4c93293aaab6fcc55e22c10d1c",
"build_date" : "2025-06-19T01:37:57.847711500Z",
"build_snapshot" : false,
"lucene_version" : "8.11.3",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
三.ES集群术语及DSL语句初体验
1.ES集群的相关术语
- ES集群
多个ES服务器对外提供分布式高可用存储服务。
- ES集群的常见术语:
- 索引: index
ES集群进行数据的读写单元。
- 分片: shard
索引数据分散到多个分片进行存储。
一个索引最少要有1个分片。
- 副本: replica
对分片的数据进行备份,也可以为分片的数据提供读的负载均衡。
一个分片可以有0个副本。
- 文档
- 元数据和源数据。
2.ES相关的面试题❗️
Q1: ES集群的端口使用协议及作用?
- 9200:
协议: http|https
作用: ES集群对外的访问端口。
- 9300:
协议: TCP
作用: 集群内部数据传输端口。
温馨提示:
优先启动9300端口,再启动9200.
Q2: ES集群有哪些颜色,分别代码什么含义?
- red:
部分主分片无法正常访问。
- yellow:
部分副本分片无法访问。
- green:
所有的主分片和副本分片均可以正常访问。
查看集群的状态:
1.
[root@elk91 ~]# curl 10.0.0.93:9200/_cat/health
1772420117 02:55:17 oldboyedu-linux101-cluster green 3 3 6 3 0 0 0 0 - 100.0%
2.
[root@elk91 ~]# curl 10.0.0.93: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
1772420072 02:54:32 oldboyedu-linux101-cluster green 3 3 6 3 0 0 0 0 - 100.0%
3.ES集群的DSL语句初体验
1.写入数据
[root@elk93 ~]# curl --location --request POST 'http://10.0.0.91:9200/_bulk' \
--header 'Content-Type: application/json' \
--data-raw '{ "create" : { "_index" : "oldboyedu-linux", "_id" : "1001" } }
{ "name" : "孙悟空","hobby": ["蟠桃","仙丹","紫霞仙子"] }
{ "create" : { "_index" : "oldboyedu-linux", "_id" : "1002" } }
{ "name" : "猪八戒","hobby": ["吃","睡","高老庄"] }
{ "create" : { "_index" : "oldboyedu-linux", "_id" : "1003" } }
{ "name" : "沙和尚","hobby": ["大师兄,师傅被妖怪抓走了","二师兄,师傅被妖怪抓走了"] }
'
2.查看所有数据
[root@elk91 ~]# apt -y install jq
[root@elk91 ~]#
[root@elk91 ~]# curl -s http://10.0.0.93:9200/oldboyedu-linux/_search | jq
{
"took": 42,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1001",
"_score": 1,
"_source": {
"name": "孙悟空",
"hobby": [
"蟠桃",
"仙丹",
"紫霞仙子"
]
}
},
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1002",
"_score": 1,
"_source": {
"name": "猪八戒",
"hobby": [
"吃",
"睡",
"高老庄"
]
}
},
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1003",
"_score": 1,
"_source": {
"name": "沙和尚",
"hobby": [
"大师兄,师傅被妖怪抓走了",
"二师兄,师傅被妖怪抓走了"
]
}
}
]
}
}
3.查看指定数据
[root@elk91 ~]# curl -s http://10.0.0.93:9200/oldboyedu-linux/_doc/1003 | jq
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1003",
"_version": 1,
"_seq_no": 2,
"_primary_term": 1,
"found": true,
"_source": {
"name": "沙和尚",
"hobby": [
"大师兄,师傅被妖怪抓走了",
"二师兄,师傅被妖怪抓走了"
]
}
}
4.模糊查询
[root@elk91 ~]# curl -s --location --request GET '10.0.0.93:9200/oldboyedu-linux/_search' --header 'Content-Type: application/json' --data-raw '{
"query": {
"match": {
"hobby": "蟠桃"
}
}
}' | jq
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 2.2510834,
"hits": [
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1001",
"_score": 2.2510834,
"_source": {
"name": "孙悟空",
"hobby": [
"蟠桃",
"仙丹",
"紫霞仙子"
]
}
}
]
}
}
5.修改数据
[root@elk91 ~]# curl --location --request POST 'http://10.0.0.93:9200/oldboyedu-linux/_doc/1003' \
--header 'Content-Type: application/json' \
--data-raw '{
"docs": {
"hobby": ["念经","拜佛","女儿国"],
"name": "唐僧"
}
}' | jq
[root@elk91 ~]# curl -s http://10.0.0.93:9200/oldboyedu-linux/_doc/1003 | jq
{
"_index": "oldboyedu-linux",
"_type": "_doc",
"_id": "1003",
"_version": 2,
"_seq_no": 3,
"_primary_term": 1,
"found": true,
"_source": {
"docs": {
"hobby": [
"念经",
"拜佛",
"女儿国"
],
"name": "唐僧"
}
}
}
6.删除指定的文档
[root@elk91 ~]# curl -s -X DELETE http://10.0.0.93:9200/oldboyedu-linux/_doc/1003 | jq
7.删除索引(删除索引意味着该索引下的所有文档都被删除)
[root@elk91 ~]# curl -s -X DELETE http://10.0.0.93:9200/oldboyedu-linux/ | jq
四.Kibana组件部署
1.部署kibana组件
下载地址:
https://www.elastic.co/cn/downloads/
1.下载kibana软件包
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.29-amd64.deb
开始下载
[root@elk91 ~]# wget http://192.168.14.253/Resources/ElasticStack/softwares/ES7/7.17.29/kibana-7.17.29-amd64.deb
2.安装kibana
[root@elk91 ~]# ll kibana-7.17.29-amd64.deb
-rw-r--r-- 1 root root 296302034 Aug 27 14:35 kibana-7.17.29-amd64.deb
[root@elk91 ~]# dpkg -i kibana-7.17.29-amd64.deb
3.修改kibana的配置文件
[root@elk91 ~]# vim /etc/kibana/kibana.yml
...
# 监听的IP地址
server.host: "0.0.0.0"
# 使用ES集群地址列表
elasticsearch.hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
# 指定使用的语言
i18n.locale: "zh-CN"
4.启动kibana服务
[root@elk91 ~]# systemctl enable --now kibana.service
[root@elk91 ~]# ss -ntl | grep 5601
LISTEN 0 511 0.0.0.0:5601 0.0.0.0:*
5.访问WebUI(如图所示)
http://10.0.0.91:5601/

2.kibana基础使用
此处省略
五.Filebeat环境部署实战
1.部署Filebeat环境
官方文档导航栏:
https://www.elastic.co/guide/index.html
1.下载Filebeat软件包
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.29-amd64.deb
[root@elk92 ~]# wget http://192.168.14.253/Resources/ElasticStack/softwares/ES7/7.17.29/filebeat-7.17.29-amd64.deb
2.安装filebeat
[root@elk92 ~]# ll filebeat-7.17.29-amd64.deb
-rw-r--r-- 1 root root 37540424 Aug 27 2025 filebeat-7.17.29-amd64.deb
[root@elk92 ~]# dpkg -i filebeat-7.17.29-amd64.deb
3.编写配置文件
[root@elk92 ~]# mkdir /etc/filebeat/config # 创建filebeat配置文件目录⭐
[root@elk92 ~]# cat /etc/filebeat/config/01-stdin-to-console.yaml
filebeat.inputs:
- type: stdin
output.console:
pretty: true
# config是 配置文件目录
# 01-stdin-to-console.yaml是 filebeat的实例
4.启动Filebeat实例
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/01-stdin-to-console.yaml # 启动filebeat的实例
5.测试数据
www.oldboyedu.com # 这是我输入的数据
{
"@timestamp": "2025-10-29T08:40:26.653Z", # 数据的采集时间
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.17.29"
},
"agent": {
"hostname": "elk92",
"ephemeral_id": "d99b56a4-3248-479b-91f1-fe787b19bc2e",
"id": "4676f153-6dfe-4aa8-a370-6d171221b6e3",
"name": "elk92",
"type": "filebeat",
"version": "7.17.29"
},
"log": {
"file": {
"path": ""
},
"offset": 0
},
"message": "www.oldboyedu.com", # 这是采集到用户输入的数据。
"input": {
"type": "stdin"
},
"ecs": {
"version": "1.12.0"
},
"host": {
"name": "elk92" # 数据从哪个节点采集到的
}
}
2.Filebeat采集文本日志实战
1.编写Filebeat配置文件
[root@elk92 ~]# cat /etc/filebeat/config/02-log-to-console.yaml
filebeat.inputs:
- type: log
paths:
- /tmp/xixi.log
output.console:
pretty: true
2.启动Filebeat实例
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/02-log-to-console.yaml
3.测试验证
[root@elk92 ~]# echo ABC > /tmp/xixi.log
[root@elk92 ~]# cat /tmp/xixi.log
ABC
[root@elk92 ~]# echo -n oldboy >> /tmp/xixi.log # 去掉换行符写入!
[root@elk92 ~]# cat /tmp/xixi.log # 注意,文本是没有换行符的!
ABC
oldboy[root@elk92 ~]#
[root@elk92 ~]# echo 2025 >> /tmp/xixi.log #不难发现,数据是追加写入的
[root@elk92 ~]# cat /tmp/xixi.log
ABC
oldboy2025
总结:
- 1.filebeat默认按行采集文本数据;
- 2.Filebeat默认会保留采集数据的位置点;
/var/lib/filebeat/registry/filebeat/log.json
- 3.如果需要Filebeat从头采集数据,可以删除原有的数据目录,生产环境中慎用❗️
[root@elk92 ~]# rm -rf /var/lib/filebeat/
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/02-log-to-console.yaml
3.练习-Filebeat采集nginx案例
- 需求
- 1.部署nginx服务器,并访问测试;
- 2.使用Filebeat采集nginx的访问日志并输出到终端;
- 参考案例:
1.安装nginx
[root@elk92 ~]# apt -y install nginx
[root@elk92 ~]# ss -ntl | grep 80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 [::]:80 [::]:*
2.访问测试
[root@elk91 ~]# curl 10.0.0.92
也可以使用window直接基于ip地址访问
3.查看访问日志
[root@elk92 ~]# tail -100f /var/log/nginx/access.log
10.0.0.1 - - [12/Mar/2026:15:50:29 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
10.0.0.1 - - [12/Mar/2026:15:50:29 +0800] "GET /favicon.ico HTTP/1.1" 404 197 "http://10.0.0.92/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
10.0.0.91 - - [12/Mar/2026:15:50:47 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
4.编写Filebeat的配置文件
[root@elk92 ~]# cat /etc/filebeat/config/03-nginx-to-console.yaml
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
output.console:
pretty: true
5.启动Filebeat实例
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/03-nginx-to-console.yaml
六.EFK架构采集nginx实战案例
1.EFK架构采集nginx日志
1.安装nginx服务
[root@elk92 ~]# apt -y install nginx
2.Filebeat采集nginx的访问日志
[root@elk92 ~]# cat /etc/filebeat/config/04-nginx-to-es.yaml
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
output.elasticsearch:
# 指定ES集群地址
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
# 指定ES的索引名称
index: "oldboyedu-linux-filebeat-nginx-%{+yyyy.MM.dd}"
# 禁用ILM索引生命周期,如果启用则忽略index的配置。
setup.ilm.enabled: false
# 定义索引模板名称,可以自定义。
setup.template.name: "oldboyedu-linux"
# 定义ES集群的索引模式(将来会匹配索引名称,符合则根据该索引模板进行初始化配置)。
setup.template.pattern: "oldboyedu-linux-filebeat*"
# 如果已经有同名称的索引模板是否覆盖。
setup.template.overwrite: false
# 定义索引模板的设置。
setup.template.settings:
# 指定索引的分片数量。
index.number_of_shards: 3
# 指定索引的副本数量。
index.number_of_replicas: 0
3.启动Filebeat实例
[root@elk92 ~]# rm -rf /var/lib/filebeat/ # 因为之前已经采集过内容了,所以要删除一下,开始新的采集
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/04-nginx-to-es.yaml
启动实例后可以去Stack Management-->数据-->索引管理 中查看启动的索引

4.kibana查看数据
点击message字段,添加这个字段,可以看到我们的数据信息
点击host-name,可以看到我们的主机名称

开启自动刷新

5.实时查看数据
在虚拟机上访问tail -50f /var/log/nginx/access.log,实时查看数据
然后访问nginx,选择苹果模拟器,然后重新访问10.0.0.91,即刷新页面
然后观察虚拟机上的数据
出现数据后,去Kibana上查看最新数据
注意:如果没有数据,那就重启一下nginx试试❗️


整体步骤如图所示

步骤演示:如何添加一个索引来访问
当我们在虚拟机完成操作的时候,需要到网页中添加新索引,才能访问到内容
1.进入网页,点击选项,下滑找到Stack Management
2.然后继续下滑,找到索引并添加

3.在这里我们可以看到在虚拟机创建好的内容,选择相应的内容添加即可

4.例子:比如我们选择右方第三个做为新索引创建
那么把 oldboyedu-linux-filebeat-nginx-2026* 填入即可,(注意后面有个*号)
它会自动帮我们匹配对应的索引
5.然后时间戳字段选择 @timestamp 即可

6.创建完索引后,我们需要到Discovery中进行查看
2.Filebeat模块管理实战
2.1 查看模块
[root@elk92 ~]# filebeat modules list
Enabled: # 已经启用的模块列表
Disabled: # 已经禁用的模块列表
activemq
apache
...
2.2 启动模块
1.启动多个模块
[root@elk92 ~]# filebeat modules enable nginx tomcat mysql
Enabled nginx
Enabled tomcat
Enabled mysql
2.查看模块列表
[root@elk92 ~]# filebeat modules list
Enabled:
mysql
nginx
tomcat
Disabled:
activemq
apache
auditd
...
3.底层逻辑
[root@elk92 ~]# ll /etc/filebeat/modules.d/*.yml
-rw-r--r-- 1 root root 472 Jun 19 00:32 /etc/filebeat/modules.d/mysql.yml
-rw-r--r-- 1 root root 784 Jun 19 00:32 /etc/filebeat/modules.d/nginx.yml
-rw-r--r-- 1 root root 623 Jun 19 00:32 /etc/filebeat/modules.d/tomcat.yml
2.3 禁用模块
1.禁用多个模块
[root@elk92 ~]# filebeat modules disable mysql tomcat
Disabled mysql
Disabled tomcat
2.查看模块列表
[root@elk92 ~]# filebeat modules list
Enabled:
nginx
Disabled:
activemq
apache
...
3.查看底层逻辑
[root@elk92 ~]# ll /etc/filebeat/modules.d/*.yml
-rw-r--r-- 1 root root 784 Jun 19 00:32 /etc/filebeat/modules.d/nginx.yml
2.4 底层逻辑验证
1.模拟启用模块
[root@elk92 ~]# mv /etc/filebeat/modules.d/mysql.yml{.disabled,}
[root@elk92 ~]#
[root@elk92 ~]# ll /etc/filebeat/modules.d/*.yml
-rw-r--r-- 1 root root 472 Jun 19 00:32 /etc/filebeat/modules.d/mysql.yml
-rw-r--r-- 1 root root 784 Jun 19 00:32 /etc/filebeat/modules.d/nginx.yml
[root@elk92 ~]#
2.查看模块验证
[root@elk92 ~]# filebeat modules list
Enabled:
mysql
nginx
Disabled:
activemq
apache
auditd
...
3.模拟禁用模块
[root@elk92 ~]# mv /etc/filebeat/modules.d/mysql.yml{,.disabled}
[root@elk92 ~]#
[root@elk92 ~]# ll /etc/filebeat/modules.d/mysql.yml*
-rw-r--r-- 1 root root 472 Jun 19 00:32 /etc/filebeat/modules.d/mysql.yml.disabled
[root@elk92 ~]#
4.再次查看验证
[root@elk92 ~]# filebeat modules list
Enabled:
nginx
Disabled:
activemq
apache
...
3.filebeat基于模块采集nginx日志
3.1 准备nginx的访问日志
[root@elk92 ~]# cat /var/log/nginx/access.log # 复制以下内容到/var/log/nginx/access.log中
123.113.31.55 - - [29/Oct/2025:17:15:15 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
123.113.31.55 - - [29/Oct/2025:17:15:15 +0800] "GET /favicon.ico HTTP/1.1" 404 197 "http://10.0.0.92/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
23.13.31.55 - - [29/Oct/2025:17:27:23 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
33.33.31.55 - - [29/Oct/2025:17:28:04 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
43.113.31.55 - - [29/Oct/2025:17:28:05 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
53.93.31.55 - - [29/Oct/2025:17:28:05 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
63.83.31.55 - - [29/Oct/2025:17:28:06 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
73.73.31.55 - - [29/Oct/2025:17:28:06 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
83.63.31.55 - - [29/Oct/2025:17:28:07 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
93.53.31.55 - - [29/Oct/2025:17:28:07 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
103.43.31.55 - - [29/Oct/2025:17:28:08 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
113.33.31.55 - - [29/Oct/2025:17:28:08 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
123.22.31.55 - - [29/Oct/2025:17:28:09 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
3.22.31.55 - - [30/Oct/2025:09:46:12 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
4.22.31.55 - - [30/Oct/2025:09:46:12 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
5.22.31.55 - - [30/Oct/2025:09:46:12 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
3.22.31.55 - - [30/Oct/2025:09:46:12 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
31.22.31.55 - - [30/Oct/2025:09:46:12 +0800] "GET /favicon.ico HTTP/1.1" 404 134 "http://10.0.0.92/" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
32.22.31.55 - - [30/Oct/2025:09:46:39 +0800] "GET /oldboyedu.html HTTP/1.1" 404 134 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
33.33.31.55 - - [30/Oct/2025:09:48:57 +0800] "GET /linux100.html HTTP/1.1" 404 134 "-" "Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1"
55.33.31.55 - - [30/Oct/2025:09:49:27 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36"
5.33.31.55 - - [30/Oct/2025:09:49:27 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36"
6.33.31.55 - - [30/Oct/2025:09:49:27 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36"
7.33.31.55 - - [30/Oct/2025:09:49:27 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36"
[root@elk92 ~]# wc -l /var/log/nginx/access.log
24 /var/log/nginx/access.log
# 只要是显示24,那么我们的测试环境就准备好了
3.2 编写Filebeat的模块文件
1.查看启用的模块文件列表
[root@elk92 ~]# ll /etc/filebeat/modules.d/*.yml
-rw-r--r-- 1 root root 784 Jun 19 00:32 /etc/filebeat/modules.d/nginx.yml
2.修改nginx的模块配置
[root@elk92 ~]# vim /etc/filebeat/modules.d/nginx.yml
[root@elk92 ~]# egrep -v "^.*#|^$" /etc/filebeat/modules.d/nginx.yml
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
error:
enabled: false
ingress_controller:
enabled: false
3.3 编写Filebeat的配置文件
[root@elk92 ~]# cat /etc/filebeat/config/05-modules_nginx-to-es.yaml
# 启用模块配置
filebeat.config.modules:
# 指定模块的路径,此处的'${path.config}'会找到模块的配置文件路径,启动Filebeat时会定义该参数
path: ${path.config}/modules.d/*.yml
# 是否支持热加载配置文件
reload.enabled: true
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
index: "oldboyedu-linux-filebeat-modules-nginx-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template.name: "oldboyedu-linux"
setup.template.pattern: "oldboyedu-linux-filebeat*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 0
3.4 启动Filebeat实例
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/04-modules_nginx-to-es.yaml
去Kibana网页上查看
3.5 kibana查询相关的字段
host.name
log.file.path
source.geo.city_name
source.geo.country_name
url.path
user_agent.os.full
user_agent.device.name
traefik.access.user_agent.name
source.ip
http.response.status_code
3.6 过滤数据

如上图所示,例如过滤404的状态码的KQL语句:
http.response.status_code : 404
http.response.status_code : 200 and source.geo.country_name : "United States"
1.在顶部可以进行内容搜索🔍,找自己想要的内容,然后点击刷新即可
2.无内容的时候,可以扩大时间选择范围,看看自己选择的时间是否正确
3.选择完自己想要的内容后,可以选择保存,系统会存为一个标签,以供下次查看
—— 下次查看时,点击打开,即可找到上次创建的标签
—— 编辑已有标签内容时,在编辑完成后,可以选择在当前标签内保存,或者另存为一个新标签

七.Filebeat多实例
1.什么是Filebeat多实例
所谓的Filebeat多实例就是共用同一套Filebeat程序启动多个Filebeat进程。
说白了,就是在一台服务器上运行多个Filebeat程序。
2.实战案例⭐
1.启动第一个实例
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/01-stdin-to-console.yaml
2.启动第二个实例时需要指定新的数据路径
[root@elk92 ~]# filebeat -e -c /etc/filebeat/config/02-log-to-console.yaml --path.data /tmp/xixi
温馨提示:
当一个节点启动多个Filebeat实例时,如果不指定新的数据目录,则可能会报错如图所示。
如果不指定新的数据路径,就需要删除一下之前操作的
比如
vim /etc/filebeat/config/auth.yaml #编写完了一个实例
pkill filebeat* # 需要删除filebeat的进程
pkill filebeat
rm -f /var/lib/filebeat/filebeat.lock # 然后删除这个锁文件
filebeat -e -c /etc/filebeat/config/auth.yaml # 再次启动就可以正常运行了

3.查看进程信息
[root@elk92 ~]# ps -ef | grep filebeat | grep -v grep
root 5355 1278 0 17:22 pts/0 00:00:00 /usr/share/filebeat/bin/filebeat --path.home /usr/share/filebeat --path.config /etc/filebeat --path.data /var/lib/filebeat --path.logs /var/log/filebeat -e -c /etc/filebeat/config/01-stdin-to-console.yaml
root 5377 3685 0 17:22 pts/1 00:00:00 /usr/share/filebeat/bin/filebeat --path.home /usr/share/filebeat --path.config /etc/filebeat --path.data /var/lib/filebeat --path.logs /var/log/filebeat -e -c /etc/filebeat/config/02-log-to-console.yaml --path.data /tmp/xixi
[root@elk92 ~]# ll /var/lib/filebeat/
total 16
drwxr-x--- 3 root root 4096 Mar 12 17:22 ./
drwxr-xr-x 63 root root 4096 Mar 12 15:56 ../
-rw------- 1 root root 0 Mar 12 17:22 filebeat.lock
-rw------- 1 root root 100 Mar 12 15:56 meta.json
drwxr-x--- 3 root root 4096 Mar 12 15:56 registry/
[root@elk92 ~]# ll /tmp/xixi
total 16
drwxr-x--- 3 root root 4096 Mar 12 17:22 ./
drwxrwxrwt 18 root root 4096 Mar 12 17:22 ../
-rw------- 1 root root 0 Mar 12 17:22 filebeat.lock
-rw------- 1 root root 100 Mar 12 17:22 meta.json
drwxr-x--- 3 root root 4096 Mar 12 17:22 registry/
八.今日内容回顾及作业
1.今日内容回顾
- ElasticStack *****
- ElasticSearch
- Logstash
- Kibana
- Filebeat
- ElasticSearch环境部署
- 单点部署 **
- 集群部署 *****
- 常用术语 *****
- DSL语句初体验 *
- kibana环境部署 *****
- Filebeat环境部署
- Filebeat采集文本的原理 *****
- Filebeat写入数据到ES集群 *****
- Filebeat的多实例 ***
- EFK架构分析nginx日志 *****
2.今日作业
- 完成课堂的所有练习并整理思维导图;
- 使用EFK架构分析ubuntu系统(elk91,elk92,elk93)日志并写入ES集群,使用kibana查看数据
- /var/log/auth.log
- /var/log/syslog
- /var/log/kern.log
1.编写文件 vim /etc/filebeat/config/auth.yaml
filebeat.inputs:
- type: log
paths:
- /var/log/auth.log
- /var/log/syslog
- /var/log/kern.log
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
# 指定ES的索引名称
index: "oldboyedu-linux-filebeat-auth-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template.name: "oldboyedu-linux"
setup.template.pattern: "oldboyedu-linux-filebeat*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 0
2.删除之前的内容并运行
pkill filebeat* # 需要删除filebeat的进程
pkill filebeat
rm -f /var/lib/filebeat/filebeat.lock # 然后删除这个锁文件
filebeat -e -c /etc/filebeat/config/auth.yaml # 再次启动就可以正常运行了
- 使用ansible在麒麟系统一键部署ES集群
3.扩展作业
- 让windows系统FQ,测试站点如下:
- https://hub.docker.com/
- https://www.google.com/
- 使用ansible一键部署EFK架构
2.Filebeat模块管理实战
浙公网安备 33010602011771号