一.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架构是业界目前主流的一种日志采集解决方案。
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服务器对外提供分布式高可用存储服务。

- 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/

image-20260302114959369

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-->数据-->索引管理 中查看启动的索引

image-20260312205838352

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

image-20260312210213716

开启自动刷新

image-20260312210456568

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

image-20260312212100114

image-20260312212339425

整体步骤如图所示

image-20260312160158759

步骤演示:如何添加一个索引来访问

当我们在虚拟机完成操作的时候,需要到网页中添加新索引,才能访问到内容

1.进入网页,点击选项,下滑找到Stack Management
image-20260312195740428
2.然后继续下滑,找到索引并添加

image-20260312195919965

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

image-20260312200043053

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

5.然后时间戳字段选择 @timestamp 即可

image-20260312200155330

6.创建完索引后,我们需要到Discovery中进行查看

image-202603122005417362.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 过滤数据

image-20260312164533849

如上图所示,例如过滤404的状态码的KQL语句:  

http.response.status_code : 404
http.response.status_code : 200 and source.geo.country_name : "United States" 

1.在顶部可以进行内容搜索🔍,找自己想要的内容,然后点击刷新即可
2.无内容的时候,可以扩大时间选择范围,看看自己选择的时间是否正确
3.选择完自己想要的内容后,可以选择保存,系统会存为一个标签,以供下次查看
	—— 下次查看时,点击打开,即可找到上次创建的标签
	—— 编辑已有标签内容时,在编辑完成后,可以选择在当前标签内保存,或者另存为一个新标签

image-20260312201256996

七.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	#	再次启动就可以正常运行了

image-20260312172439815

	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架构
posted on 2026-03-12 23:11  爱喝可乐的北极熊  阅读(17)  评论(0)    收藏  举报