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*]输出到ESserver4执行 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 filebeat1.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用其他主机访问server4server5将收到日志实验现象证明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垂直柱状图统计维度客户端 IPclientip.keyword的访问请求次数数据源apachelog-*Apache 访问日志索引图表信息X 轴访问来源 IP 地址Y 轴请求计数访问次数排序规则按访问量降序排列最多展示 Top5 IP192.168.223.170访问量最高就是你执行ab压测的客户端192.168.223.171次之剩余 IP 访问量很少在server3上进行压测 ab -c 1 -n 300 http://192.168.223.173/index.html添加仪表盘将现有的对象添加到仪表盘继续进行压测 [rootserver1 ~]# ab -c1 -n 300 http://192.168.223.173/index.html [rootserver2 ~]# ab -c1 -n 100 http://192.168.223.173/index.html [rootserver2 ~]# ab -c1 -n 200 http://192.168.223.173/index.html [rootserver3 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_202608123.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_20260812ES集群监控监控核心指标必监控集群健康状态cluster.healthgreen/yellow/redgreen所有主分片 副本分片正常分配yellow主分片全部就绪副本未分配常见单节点无副本red存在未分配主分片数据不可访问未分配分片数量、延迟分配时长集群节点总数、数据节点数、主节点数pending_tasks待执行任务队列堆积极易引发集群卡顿4.1 启用xpack 证书启用 X-Pack 证书 给 ES 集群所有网络通信加上 TLS 加密实现流量加密 节点身份可信没开启证书kibana不能监测到ES集群。在server1上生成证书 [rootserver1 ~]# cd /usr/share/elasticsearch/ [rootserver1 elasticsearch]# bin/elasticsearch-certutil ca [rootserver1 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 [rootserver1 elasticsearch]# cp elastic-certificates.p12 /etc/elasticsearch [rootserver1 elasticsearch]# cd /etc/elasticsearch/ [rootserver1 elasticsearch]# chown elasticsearch elastic-certificates.p12 [rootserver1 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 [rootserver1 elasticsearch]# systemctl restart elasticsearch.service拷贝证书到其它集群节点 [rootserver1 elasticsearch]# scp elastic-certificates.p12 server2:/etc/elasticsearch/ [rootserver1 elasticsearch]# scp elastic-certificates.p12 server3:/etc/elasticsearch/ server2配置 [rootserver2 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12 [rootserver2 ~]# 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 [rootserver2 ~]# systemctl restart elasticsearch.service 在server3上执行相同操作等待所有集群节点重启成功后设置认证账户密码 [rootserver1 elasticsearch]# cd /usr/share/elasticsearch/ [rootserver1 elasticsearch]# bin/elasticsearch-setup-passwords interactive 交互式输入密码然后用刚才设定的账户密码重新登录elasticserach 和 my-es 网页访问http://192.168.223.173:9100/auth_userelasticauth_password001003logstash访问 [rootserver4 ~]# vim /etc/logstash/conf.d/beats.conf 添加如下内容 ··· output { ··· user elastic password 001003 } }查看是否启动成功 [rootserver4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats.conf kibana访问 [rootserver4 kibana]# vim kibana.yml ... elasticsearch.username: kibana elasticsearch.password: 001003 [rootserver4 kibana]# systemctl restart kibana.service重新用账号密码登录kibana4.2 部署metrucbeat监控首先使用内部检测然后进入设置模式选择启动metricbeat的节点然后根据提示步骤操作 安装软件 [rootserver1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm [rootserver1 ~]# cd /etc/metricbeat/modules.d [rootserver1 modules.d]# metricbeat modules enable elasticsearch-xpack [rootserver1 modules.d]# vim elasticsearch-xpack.yml hosts: [http://localhost:9200] username: elastic password: 001003 xpack.enabled: true [rootserver1 modules.d]# cd .. [rootserver1 metricbeat]# vim metricbeat.yml ... output.elasticsearch: hosts: [http://192.168.223.170:9200] username: elastic password: 001003 [rootserver1 metricbeat]# systemctl enable --now metricbeat.service其他节点以此类推设置完成后退出设置模式总结通过部署 Metricbeat 并启用 X-Pack 安全模块我们实现了对 Elasticsearch 集群的全面监控。以下是监控体系的核心要点总结监控架构核心Metricbeat轻量级指标采集器部署在每个 ES 节点上实时收集系统与集群性能数据。X-Pack MonitoringElastic Stack 内置的监控套件提供集群健康、节点状态、索引性能等可视化仪表盘。Kibana 监控界面集中展示集群各项指标支持自定义仪表盘和告警配置。4.3 在kibana完成ES日志采集[rootserver1 ~]# rpm -ivh filebeat-7.6.1-x86_64.rpm [rootserver1 ~]# cd /etc/filebeat/modules.d [rootserver1 modules.d]# filebeat modules enable elasticsearch [rootserver1 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上也进行相同的操作然后设置开机自启和密码同步[rootserver1 modules.d]# cd .. [rootserver1 filebeat]# vim filebeat.yml ... output.elasticsearch: hosts: [http://192.168.223.170:9200] username: elastic password: 001003 [rootserver1 filebeat]# systemctl enable --now filebeat.service在kibana查看日志采集
返回列表