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.health green/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查看日志采集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值