{T}

ELK 构建 MySQL 慢日志收集平台详解

0. 引言

线上 MySQL 慢查询是性能排查的高频切入点,但靠登录服务器手工查看慢日志效率极低。本文讲解如何通过开源日志检索系统 ELK 构建 MySQL 慢日志收集及分析平台,覆盖组件选型、架构演进与完整搭建演示。

1. ELK 与 EFK 组件辨析

ELK、EFK 有共同的组件:

  • Elasticsearch(ES):实时的全文搜索和分析引擎,提供日志数据的收集、分析、存储三大功能;
  • Kibana:Web 图形化界面,可视化展示 Elasticsearch 中的日志数据与检索结果。

而 L 与 F 代表不同的采集工具:

工具定位特点
Logstash搜集、分析、过滤日志功能强大,资源消耗高
Beats(Filebeat)轻量级日志采集器内存 CPU 消耗低,性能好
Fluentd日志收集、处理、转发轻量级,生态丰富

Beats 家族除 Filebeat 外,还有 Packetbeat(网络数据)、Metricbeat(指标)、Winlogbeat(Windows 日志)等成员,各针对一类数据。Kafka 则是高并发日志场景下附加的关键组件(缩写 K),提供分布式消息队列缓冲能力。

2. ELK 的优势

  • 开源完整:收集、存储、分析、检索全链路组件齐全,组合即可用,无需额外开发;
  • 可视化浏览:在 Kibana 控制台选择时间范围即可查看报表,快捷方便;
  • 广泛平台支持:可适配 K8s、云原生微服务等架构。

3. 常见架构演进

方案一:Logstash 直采(中小型)

每个客户端部署 Logstash 负责日志收集与过滤,服务端由 Elasticsearch + Kibana 组成,实现最简单的日志收集链路。

方案二:Beats 替代 Logstash

客户端用 Filebeat 代替 Logstash 做日志收集,资源消耗更低、性能更好;需要采集其他类型数据时,选用 Beats 家族对应成员。

方案三:引入 Kafka 缓冲(大中型)

ELK 完整架构

Filebeat 采集日志后先存入 Kafka 暂存缓冲,再由 Logstash 消费、提取、过滤后写入 ES。ES、Kafka、Logstash 均以集群模式部署,适合存储上百 T 甚至 P 级运维、系统、业务日志的场景。

4. 搭建演示:收集 MySQL 慢日志

4.1 服务端安装 ES 与 Kibana

  • 导入官方认证 key,在 /etc/yum.repos.d 下新建 elk.repo 配置官方源;
  • yum install elasticsearch -y 安装后,修改 /etc/elasticsearch/elasticsearch.yml 中的 network.host 为本地网卡接口地址,systemctl start elasticsearch 启动;
  • 通过 systemctl status elasticsearchcurl http://<IP>:9200 校验:返回包含版本信息的 JSON 即表示 ES 运行正常;
  • 浏览器访问 http://<IP>:5601 进入 Kibana 管理界面。

4.2 客户端安装 MySQL 与 Filebeat

  • yum install filebeat -y 安装采集器;
  • 修改 filebeat.yml 指定输出方式为 Elasticsearch,填写 ES 主机地址(集群模式需写多个主机端口);
  • filebeat modules enable mysql 激活 MySQL 日志插件,用 filebeat modules list 确认;
  • 修改 /etc/filebeat/modules.d/mysql.yml 中的 slowlog 路径,与 MySQL 慢日志路径保持一致;
  • 在 MySQL 中开启慢查询:set global slow_query_log='ON'set global long_query_time=1(大于 1 秒记录),并设置慢日志文件路径;
  • 执行 select sleep(5) 模拟慢查询,观察 filebeat 推送窗口出现日志即表示成功推送到 ES。

4.3 Kibana 检索验证

打开 Kibana 后台的 Discover,选择时间周期,添加 filter 过滤器输入 slow.query 关键字,即可查看对应时间周期内的 MySQL 慢日志记录与图表。相比临时命令和脚本分析,检索系统让慢日志分析变得快速、高效、可回溯。

5. 小结

ELK 选型要点:中小规模用 Logstash 或 Filebeat 直采 ES;海量日志必须引入 Kafka 做缓冲削峰。落地上注意三点:Filebeat 的 slowlog 路径要与 MySQL 慢日志路径对齐、ES 的 network.host 要暴露给采集端、Kibana 用过滤器沉淀常用检索条件。检索效率提升后,慢日志分析才能从"应急排查"走向"常态化治理"。

下一章介绍 Zabbix 自动发现与自动注册,看海量主机如何被自动纳入监控体系。