三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Filebeat日志采集与ELK实战指南

Filebeat日志采集与ELK实战指南

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

green:所有主分片 + 副本分片正常分配

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查看日志采集

← 返回列表