ELK(Elastic Stack)日志采集与分析

一、整体目标与核心要素

目标 :把分散的系统/服务/业务日志集中采集、存储、检索、分析与可视化,支持故障定位、性能分析、审计与报警。
核心要素:采集(Collect)→ 存储(Store)→ 分析(Analyze)→ 可视化(Visualize)

组件对应关系(常用组合):

  • Filebeat (边缘采集器)/Logstash(可做解析) → Elasticsearch (存储、索引、搜索) → Kibana(可视化、仪表盘)

二、常见日志类型与用途

  1. 系统日志(System)

    • 示例:/var/log/messages, syslog, dmesg

    • 用途:主机级故障、内核问题、权限/进程崩溃排查

  2. 服务日志(Service)

    • 示例:Nginx access/error、MySQL 通用日志、慢查询日志(slow query)

    • 用途:服务请求追踪、性能瓶颈、错误率分析

    • 慢查询日志对 DBA/开发非常重要,用来优化 SQL

  3. 业务日志(Application / Business)

    • 示例:Java log4j / logback 输出、应用自定义日志

    • 用途:业务流程跟踪、用户行为、异常堆栈定位

三、谁会大量写 SQL?

  • DBA(数据库管理员):维护、优化、审计、备份

  • 开发人员:开发、调试、性能优化

  • 大数据岗位:离线/实时 ETL、数据探查

  • 云原生/运维:脚本、调试 SQL、性能诊断(部分)

四、部署规划(你给定的机器示例)

  • ES01 (192.168.110.128) : Elasticsearch + Kibana(小环境可合并)

  • ES02 (192.168.110.129) : Elasticsearch 节点

  • httpd/nginx (192.168.110.130) : 反向代理 / 收集转发点(也可做 Filebeat / Logstash)

资源建议:每个 ES 节点至少 3--4GB 内存(生产应按数据量和查询负载扩容,避免把 JVM 堆设置过高)

五、架构与搭建逻辑(步骤)

  1. 先把 ES 集群搭好(配置 discovery、集群名、主选举、索引模板、ILM)

  2. 把 httpd/nginx 做好(日志格式/路径标准化、rotate 策略、权限)

  3. 安装 Logstash / Filebeat:Filebeat 放边缘轻量采集(推荐),Logstash 用于复杂解析/过滤

  4. Filebeat/Logstash → 输出到 ES(或通过 Kafka 中转)

  5. 安装 Kibana:连接 ES,创建索引模式、仪表盘、告警(Watcher 或使用 Elastic Alerting)

六、Filebeat(采集器)关键点

  • 轻量、部署于日志产生端或近端(web、app、db)

  • Pros: 低资源、自动处理 log rotation、模块化(nginx/mysql 模块)

  • 常见采集方式:

    • filebeat.inputs 指定 path(/var/log/nginx/access.log)

    • 使用 filebeat.modules(如 nginx module 自动解析)

    • 输出可以直接到 ES 或先到 Logstash(output.elasticsearch / output.logstash

Filebeat nginx 示例(简化)

Filebeat mysql(慢查询)示例

七、Logstash(可选:解析/过滤/增强)

  • 用于复杂解析(grok)、字段拆分、IP地理、时间格式化、去重等。

  • pipeline 结构:input → filter → output

  • 输出到 ES 时要设置 index 命名规则(按日期分索引)和 doc_type(已废弃,ES7+)

Logstash pipeline 示例

八、Elasticsearch(存储/索引/查询)

  • 核心概念:Index、Shard、Replica、Mapping、Document、Cluster

  • 生产建议:

    • 合理设计索引(按天/按月 or 按业务分库)

    • 建立索引模板(template)统一 mapping、settings(分片数、副本数、刷新间隔)

    • 使用 ILM(Index Lifecycle Management)实现索引分级与删除

    • ES JVM 堆:不要超过物理内存的 50%,且不超过 32GB(避免压缩指针失效)

  • 安全性:开启 TLS、用户认证、角色权限(X-Pack/Elastic Security)

九、Kibana(可视化)

  • 连接 ES 索引 pattern(如 nginx-access-*

  • 常用组件:Discover(日志查询)、Dashboard(仪表盘)、Visualize(可视化)、Alerts(告警)

  • 建议模板:常用图表(请求量/错误率/平均响应时间/慢查询 TopN)

十、采集 Nginx 与 MySQL 日志要点

Nginx

  • 收集内容:

    • access.log(请求时间、URL、状态码、耗时、客户端 IP、上游响应)

    • error.log(错误堆栈)

  • 配置 log_format 以保证结构化字段(便于解析)

MySQL

  • 收集内容:

    • 错误日志:mysqld.err

    • 慢查询:slow_query_log(建议开启并设置 long_query_time

    • 通用查询日志(慎用,IO 大)

  • 慢查询重点字段:执行时间、锁等待时间、扫描行数、SQL 语句(供开发/DBA 优化)

十一、索引设计与存储策略(示例)

  • 按天分索引:nginx-access-YYYY.MM.DD

  • mapping 中关键字段设为 keyword(用于聚合)或 text(全文)

  • 时间字段使用 @timestamp(统一)

  • 使用 ILM 策略:热(hot)→ 温(warm)→ 冷(cold)→ 删除(delete)

  • 保留期策略:日志保留 7/30/90 天(按业务需求)

十二、报警与告警

  • 可在 Kibana 或使用 ElastAlert / Watcher 配置告警规则

  • 常见告警项:

    • 错误率急剧上升(5xx)

    • 接口平均响应延迟异常

    • 关键业务错误(支付失败等)

    • MySQL 慢查询超过阈值(TopN)

十三、安全与运维注意

  • 用户权限与审计:启用认证(X-Pack Security)、限制 ES API 访问

  • 备份:快照(snapshot)到远端仓库(S3 / NFS)

  • 监控 ES 自身:使用 X-Pack Monitoring 或 Metricbeat 监控 ES 集群状态

  • 容量规划:根据 RPS、日志大小、保留策略预估磁盘与 IOPS

  • 高可用:至少 3 个 ES 主节点(选举节点),副本保证查询可用

十四、常见问题与排查思路

  • Filebeat 无数据上报:检查 filebeat logs / file paths 权限 / filebeat registry 文件

  • Logstash pipeline 卡住:查看 pipeline logs、堆积队列(persistent queue)

  • ES 写入慢:检查索引刷新频率、分片数量、磁盘 IO、GC

  • Kibana 无法显示:确认 Kibana 已连接 ES(Kibana logs)

流程思维导图(ASCII / 结构化图)

+----------------------+ +----------------+ +---------------------+ +-----------+

| 应用 / 服务 / 主机 | ---> | Filebeat (边缘) | ---> | Logstash (解析/过滤) | ---> | Elasticsearch |

| - nginx / mysql | | - tail logs | | - grok / date / geo | | (存储/索引) |

| - app(log4j) | | - module nginx | | - enrich (geoip) | | ES 集群(Hot/Warm) |

+----------------------+ +----------------+ +---------------------+ +-----------+

|

v

+-----------+

| Kibana |

| - Discover|

| - Dashboard|

+-----------+

说明:

  • Filebeat 可直接 output.elasticsearch(轻量场景),或 output.logstash(需要复杂解析时)

  • Logstash 将数据清洗并按业务写入不同索引(nginx-access-YYYY.MM.DD, mysql-slow-YYYY.MM.DD)

  • ES 使用索引模板和 ILM 管理生命周期

  • Kibana 负责展示并配置告警

附:典型部署命令 / 配置片段(快速复制)

开启 MySQL 慢查询日志(my.cnf)

Filebeat 简单启动(Docker)

Logstash 启动 pipeline(示例)

Elasticsearch 索引模板(简化示例)

相关推荐
wangmengxxw32 分钟前
微服务-服务配置
java·运维·微服务·云计算·服务配置
大柏怎么被偷了42 分钟前
【Git】基本操作
linux·运维·git
小女孩真可爱42 分钟前
大模型学习记录(八)---------RAG评估
linux·人工智能·python
纯粹的热爱44 分钟前
Windows 10/11解决“无法访问共享文件夹—组织安全策略阻止未经身份验证的来宾访问”
运维
乾元1 小时前
AI + Jinja2/Ansible:从自然语义到可执行 Playbook 的完整流水线(工程级深度)
运维·网络·人工智能·网络协议·华为·自动化·ansible
我在人间贩卖青春1 小时前
查看文件相关命令
linux·查看文件
番茄你个西红41 小时前
安装KingbaseES时服务器swap的设置
linux·数据库
s1ckrain1 小时前
数字逻辑笔记—组合逻辑电路
笔记·fpga开发·嵌入式
python百炼成钢2 小时前
50.linux_USB驱动
linux·运维·服务器·驱动开发