一、整体目标与核心要素
目标 :把分散的系统/服务/业务日志集中采集、存储、检索、分析与可视化,支持故障定位、性能分析、审计与报警。
核心要素:采集(Collect)→ 存储(Store)→ 分析(Analyze)→ 可视化(Visualize)
组件对应关系(常用组合):
- Filebeat (边缘采集器)/Logstash(可做解析) → Elasticsearch (存储、索引、搜索) → Kibana(可视化、仪表盘)
二、常见日志类型与用途
-
系统日志(System)
-
示例:
/var/log/messages,syslog,dmesg -
用途:主机级故障、内核问题、权限/进程崩溃排查
-
-
服务日志(Service)
-
示例:Nginx access/error、MySQL 通用日志、慢查询日志(slow query)
-
用途:服务请求追踪、性能瓶颈、错误率分析
-
慢查询日志对 DBA/开发非常重要,用来优化 SQL
-
-
业务日志(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 堆设置过高)
五、架构与搭建逻辑(步骤)
-
先把 ES 集群搭好(配置 discovery、集群名、主选举、索引模板、ILM)
-
把 httpd/nginx 做好(日志格式/路径标准化、rotate 策略、权限)
-
安装 Logstash / Filebeat:Filebeat 放边缘轻量采集(推荐),Logstash 用于复杂解析/过滤
-
Filebeat/Logstash → 输出到 ES(或通过 Kafka 中转)
-
安装 Kibana:连接 ES,创建索引模式、仪表盘、告警(Watcher 或使用 Elastic Alerting)
六、Filebeat(采集器)关键点
-
轻量、部署于日志产生端或近端(web、app、db)
-
Pros: 低资源、自动处理 log rotation、模块化(nginx/mysql 模块)
-
常见采集方式:
-
filebeat.inputs指定 path(/var/log/nginx/access.log) -
使用
filebeat.modules(如nginxmodule 自动解析) -
输出可以直接到 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 索引模板(简化示例)
