filebeat日志采集
Filebeat 属于 Elastic Beats 家族,轻量级日志采集客户端,部署在业务服务器上,专门采集本机日志文件,类似增强版 tail -f 。
分工对比
Filebeat:采集、转发日志,占用资源小,分布式多机器部署;不支持 grok 复杂解析
Logstash:日志过滤、解析(grok、多行合并),资源开销更大,一般集中部署做中心处理。
注意:Beats 协议端口 5044,只能接收 Filebeat;不能接收 rsyslog
核心特性
断点续传: Filebeat 通过registry文件记录日志读取偏移量;重启服务不会重复从头读取日志,避免日志重复收集。
背压机制: 下游 Logstash 繁忙时自动限流,防止日志丢失。
支持多行合并 multiline: 推荐在 Filebeat 处理 Java 异常堆栈多行日志,减轻 Logstash 压力。
1.1 filebeat 采集web 服务日志
在server4上执行
# rpm -ivh filebeat-7.6.1-x86_64.rpm
# cd /etc/filebeat/modules.d
# filebeat modules enable apache #激活apache模块
vim apache.yml
module: apache
access:
enabled: true
var.paths: ["/var/log/httpd/access_log*"]
error:
enabled: true
var.paths: ["/var/log/httpd/error_log*"]
输出到ES
server4执行
vim /etc/filebeat/filebeat.yml
output.elasticsearch:
修改以下配置
Array of hosts to connect to.
hosts: ["192.168.223.170:9200"]
检查配置文件语法
filebeat test config -c /etc/filebeat/filebeat.yml
测试与 ES 的连接
filebeat test output -c /etc/filebeat/filebeat.yml
启动 Filebeat
systemctl enable --now filebeat


1.2 输出到logstash
在server5上面执行
# vim /etc/logstash/conf.d/beats.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
elasticsearch {
hosts => ["http://192.168.223.170:9200"]
index => "apachelog-%{+YYYY.MM.dd}"
}
}
启动logstash
/usr/share/logstash/bin/logstash -rf /etc/logstash/conf.d/beats.conf
在server4上执行
修改filebeat输出,并且将上面的9200端口输出注释掉
vim /etc/filebeat/filebeat.yml
output.logstash:
hosts: ["192.168.223.174:5044"]
systemctl restart filebeat.service
用其他主机访问server4,server5将收到日志


实验现象证明:Filebeat 分布式采集成功。server3、server4 两台不同业务机各自部署 Filebeat 采集本地 Apache 日志,统一汇总到中心 Logstash,最终存储在同一个 ES 索引内;
kibana数据可视化
Kibana 是 Elasticsearch 的数据可视化 Web 工具。 日志存入 ES 后,可以不用写命令,拖拽生成图表(柱状图、折线图、饼图、表格等),直观展示日志统计信息。
Kibana 提供 Elasticsearch 数据可视化能力。在完成索引模式创建后,基于采集解析完成的 Apache 日志,可以构建柱状图、折线图、饼图等可视化图表,实现多台 Web 服务器访问量对比、流量趋势、HTTP 状态码统计。将多个可视化图表整合至 Dashboard 仪表盘,实现集中日志监控,直观展示业务访问情况,是 ELK 栈日志分析可视化核心组件。
在server4上部署kibana
rpm -ivh kibana-7.6.1-x86_64.rpm
cd /etc/kibana/
vim kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.223.171:9200"]
i18n.locale: "zh-CN"
systemctl enable --now kibana

浏览器访问192.168.223.173:5601会进入kibana页面
2.1 网站访问量计数



点击可视化新建一个指标,选择apachlog-*

当前页面元素说明
数据源:左侧选中索引模式
apachelog-*,会匹配所有apachelog-日期格式的索引,也就是你之前 Filebeat + Logstash 写入的 Apache 日志。指标配置:使用了默认的「计数」指标,统计符合条件的日志总条数,对应 Apache 的总访问请求数。
结果展示:中间大号数字
26,代表当前选中的时间范围(右上角Today,即今天)内,一共有 26 条访问日志。存储桶(Buckets):目前还没有添加,所以统计的是全局总数;添加存储桶后可以按字段拆分统计。
2.2 网站访问量top5
选择可视化,添加垂直条形图,添加X轴计数。

这是 Kibana 垂直柱状图,统计维度:客户端 IP(clientip.keyword)的访问请求次数 数据源:
apachelog-*Apache 访问日志索引图表信息
X 轴:访问来源 IP 地址
Y 轴:请求计数(访问次数)
排序规则:按访问量降序排列,最多展示 Top5 IP
192.168.223.170:访问量最高(就是你执行ab压测的客户端)
192.168.223.171:次之剩余 IP 访问量很少
在server3上进行压测
ab -c 1 -n 300 http://192.168.223.173/index.html

添加仪表盘,将现有的对象添加到仪表盘

继续进行压测
[root@server1 ~]# ab -c1 -n 300 http://192.168.223.173/index.html
[root@server2 ~]# ab -c1 -n 100 http://192.168.223.173/index.html
[root@server2 ~]# ab -c1 -n 200 http://192.168.223.173/index.html
[root@server3 filebeat]# ab -c 1 -n 200 http://192.168.223.173/index.html
在网站设置每隔五秒自动刷新

ES数据备份与恢复
快照是 Elasticsearch 官方唯一推荐的数据备份机制。 它对集群中的索引数据做增量镜像备份,把索引的分片段文件(segments)保存到外部仓库。
关键特点
1.增量备份 第一次快照:复制全部数据; 之后新建快照:只复制新增、修改的数据文件,不变的文件直接复用,速度快、节省空间。
2.在线备份 集群不用停机,创建快照时集群正常读写,不会锁死索引。
3.备份最小单位:索引 可以备份全部索引,也可以单独备份某几个索引(比如你的
apachelog-*)。4.快照文件独立于 ES 内部数据目录,可以拷贝、迁移,支持跨集群恢复。
备份(Snapshot 创建)
执行快照操作:ES 遍历指定索引,将索引底层的数据段文件复制到快照仓库,生成一套快照文件。 一条快照记录 = 某一时间点的索引数据副本。
恢复(Restore)概念
把仓库里的快照数据,重新加载回当前 ES 集群,生成索引数据。
不能恢复到已经处于打开状态的同名索引
两种思路:
1.先删除原有同名索引,再恢复;
2.使用
rename_pattern将数据恢复成新名字索引,不覆盖原有数据。
NFS 服务端:192.168.223.173(存放共享目录 /data/es-backup) 客户端:170、171、172(三台执行 mount 挂载)
先给server1、2、3、4都安装nfs-utils
yum install -y nfs-utils
在server4启用 NFS 服务、配置共享
编辑共享配置
vim /etc/exports
/data/es-backup *(rw,sync,no_root_squash)
创建目录、授权
mkdir -p /data/es-backup
chmod 777 /data/es-backup
生效配置、启动自启
exportfs -r
systemctl start nfs-server
systemctl enable nfs-server
在【三台客户端:170、171、172】执行挂载
先创建本地挂载点
mkdir -p /data/es-backup
执行挂载
mount 192.168.223.173:/data/es-backup /data/es-backup
滚动重启 = 一台一台依次重启 ES 节点,不用全集群同时停机,业务不中断。
恢复命令
null= 删除这条临时配置,恢复系统默认值all执行完毕后,集群开始自动补齐所有缺失的副本分片,集群状态变回 green(绿色健康)
这个操作只是临时阻止分片迁移,不会停止正在提供服务的分片读写,所以业务不中断,这就是 “滚动重启” 的优势。

通过API创建仓库
过 API 创建快照仓库,是手动向 Elasticsearch REST 接口提交 JSON 请求完成仓库注册,适合自动化脚本部署。

创建快照
3.1 创建及查看快照
备份所有索引
PUT /_snapshot/my_backup/snapshot_all_20260812
含义:在名为 my_backup 的快照仓库中,创建一个名称为 snapshot_all_20260812 的快照备份。
查看快照状态
列出仓库中所有快照
GET /_snapshot/my_backup/_all


备份指定索引
PUT /_snapshot/my_backup/snapshot_syslog_20260812
{
"indices": "syslog-*",
"ignore_unavailable": true,
"include_global_state": false
}
查看快照
GET /_snapshot/my_backup/snapshot_syslog_20260812


3.2 恢复快照
首先在Elasticsearch页面删除 syslog 索引
使用API的方式恢复快照
POST /_snapshot/my_backup/snapshot_syslog_20260812/_restore
查看恢复进度
GET /_recovery # 查看所有索引的恢复状态
回到elasticsearch-head页面,刷新查看syslog重新回到集群
3.3 删除快照
删除快照
DELETE /_snapshot/my_backup/snapshot_all_20260812
ES集群监控
监控核心指标(必监控)
集群健康状态
cluster.healthgreen/yellow/redgreen:所有主分片 + 副本分片正常分配
yellow:主分片全部就绪,副本未分配(常见:单节点无副本)
red:存在未分配主分片,数据不可访问
未分配分片数量、延迟分配时长集群节点总数、数据节点数、主节点数pending_tasks(待执行任务队列堆积,极易引发集群卡顿)
4.1 启用xpack 证书
启用 X-Pack 证书 = 给 ES 集群所有网络通信加上 TLS 加密,实现流量加密 + 节点身份可信;没开启证书kibana不能监测到ES集群。
在server1上生成证书
[root@server1 ~]# cd /usr/share/elasticsearch/
[root@server1 elasticsearch]# bin/elasticsearch-certutil ca
[root@server1 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
[root@server1 elasticsearch]# cp elastic-certificates.p12 /etc/elasticsearch
[root@server1 elasticsearch]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# chown elasticsearch elastic-certificates.p12
[root@server1 elasticsearch]# vim elasticsearch.yml
...
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
[root@server1 elasticsearch]# systemctl restart elasticsearch.service
拷贝证书到其它集群节点
[root@server1 elasticsearch]# scp elastic-certificates.p12 server2:/etc/elasticsearch/
[root@server1 elasticsearch]# scp elastic-certificates.p12 server3:/etc/elasticsearch/
server2配置
[root@server2 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12
[root@server2 ~]# vim /etc/elasticsearch/elasticsearch.yml
...
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
[root@server2 ~]# systemctl restart elasticsearch.service
在server3上执行相同操作
等待所有集群节点重启成功后,设置认证账户密码
[root@server1 elasticsearch]# cd /usr/share/elasticsearch/
[root@server1 elasticsearch]# bin/elasticsearch-setup-passwords interactive
交互式输入密码

然后用刚才设定的账户密码重新登录elasticserach 和 my-es 网页
访问http://192.168.223.173:9100/auth_user=elastic&auth_password=001003
logstash访问
[root@server4 ~]# vim /etc/logstash/conf.d/beats.conf
添加如下内容
···
output {
···
user => "elastic"
password => "001003"
}
}
查看是否启动成功
[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats.conf
kibana访问
[root@server4 kibana]# vim kibana.yml
...
elasticsearch.username: "kibana"
elasticsearch.password: "001003"
[root@server4 kibana]# systemctl restart kibana.service
重新用账号密码登录kibana
4.2 部署metrucbeat监控
首先使用内部检测,然后进入设置模式
选择启动metricbeat的节点,然后根据提示步骤操作
安装软件
[root@server1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm
[root@server1 ~]# cd /etc/metricbeat/modules.d
[root@server1 modules.d]# metricbeat modules enable elasticsearch-xpack
[root@server1 modules.d]# vim elasticsearch-xpack.yml
hosts: ["http://localhost:9200"]
username: "elastic"
password: "001003"
xpack.enabled: true
[root@server1 modules.d]# cd ..
[root@server1 metricbeat]# vim metricbeat.yml
...
output.elasticsearch:
hosts: ["http://192.168.223.170:9200"]
username: "elastic"
password: "001003"
[root@server1 metricbeat]# systemctl enable --now metricbeat.service
其他节点以此类推,设置完成后退出设置模式


总结
通过部署 Metricbeat 并启用 X-Pack 安全模块,我们实现了对 Elasticsearch 集群的全面监控。以下是监控体系的核心要点总结:
监控架构核心
Metricbeat:轻量级指标采集器,部署在每个 ES 节点上,实时收集系统与集群性能数据。
X-Pack Monitoring:Elastic Stack 内置的监控套件,提供集群健康、节点状态、索引性能等可视化仪表盘。
Kibana 监控界面:集中展示集群各项指标,支持自定义仪表盘和告警配置。
4.3 在kibana完成ES日志采集
[root@server1 ~]# rpm -ivh filebeat-7.6.1-x86_64.rpm
[root@server1 ~]# cd /etc/filebeat/modules.d
[root@server1 modules.d]# filebeat modules enable elasticsearch
[root@server1 modules.d]# vim elasticsearch.yml
server:
var.paths:
- /var/log/elasticsearch/*.log # Plain text logs
- /var/log/elasticsearch/*_server.json # JSON logs
gc:
var.paths:
- /var/log/elasticsearch/gc.log.[0-9]*
- /var/log/elasticsearch/gc.log
audit:
var.paths:
- /var/log/elasticsearch/*_access.log # Plain text logs
- /var/log/elasticsearch/*_audit.json # JSON logs
slowlog:
var.paths:
- /var/log/elasticsearch/*_index_search_slowlog.log # Plain text logs
- /var/log/elasticsearch/*_index_indexing_slowlog.log # Plain text logs
- /var/log/elasticsearch/*_index_search_slowlog.json # JSON logs
- /var/log/elasticsearch/*_index_indexing_slowlog.json # JSON logs
deprecation:
var.paths:
- /var/log/elasticsearch/*_deprecation.log # Plain text logs
- /var/log/elasticsearch/*_deprecation.json # JSON logs
在server2上也进行相同的操作,然后设置开机自启和密码同步
[root@server1 modules.d]# cd ..
[root@server1 filebeat]# vim filebeat.yml
...
output.elasticsearch:
hosts: ["http://192.168.223.170:9200"]
username: "elastic"
password: "001003"
[root@server1 filebeat]# systemctl enable --now filebeat.service
在kibana查看日志采集


1006

被折叠的 条评论
为什么被折叠?



