本文目录导读:

- 场景一:使用 ELK Stack(Elasticsearch + Logstash + Kibana)—— 开源首选
- 场景二:使用云服务(以阿里云 SLS 日志服务为例)—— 免运维
- 场景三:使用商业监控工具(如 Grafana + Loki/Prometheus)—— 可视化最强
- 核心“坑”与最佳实践
- 快速选择建议
收集日志 → 提取关键信息 → 设定触发条件 → 通知负责人。
不同的工具实现方式不同,下面针对三大主流场景(开源 ELK、云服务、商业监控)分别说明操作方法。
使用 ELK Stack(Elasticsearch + Logstash + Kibana)—— 开源首选
这是最常见的方案,标准做法是使用 Elastic Watcher(X-Pack 的一部分,基础版免费)。
步骤:
- 确认日志已进入 Elasticsearch:确保你的应用日志已通过 Filebeat/Logstash 发送到了 ES 索引(如
myapp-logs-*)。 - 进入 Kibana:
- 点击左侧菜单 Stack Management → Watcher。
- 点击 创建阈值告警 (Create threshold alert)。
- 配置规则(核心步骤):
- 名称:
接口500错误告警 - 索引:选择
myapp-logs-* - 时间窗口:
最近5分钟 - 查询条件:
- KQL 写法:
response_status: >= 500 - Lucene 写法:
response_status: [500 TO *]
- KQL 写法:
- 触发条件:
count()is greater than10(5分钟内超过10个500错误就告警)
- 名称:
- 配置动作(通知方式):
- Slack:填入 Webhook URL。
- Email:配置 SMTP 服务器。
- Webhook:调用你的自定义接口(最灵活)。
- 保存并激活。
优点:完全自主可控,数据不出网。 缺点:需要维护 ES 集群。
使用云服务(以阿里云 SLS 日志服务为例)—— 免运维
国内用户常用阿里云日志服务(SLS),其告警配置非常方便。
步骤:
- 日志已采集:确认你的日志已经通过 Logtail 等采集到了 SLS 的 Logstore。
- 进入告警:打开 SLS 控制台,找到你的 Project → 告警 → 告警规则。
- 新建告警:
- 搜索语句:
* | select count(*) as error_count where status >= 500 - 触发条件:
error_count > 100(错误数大于100) - 分组:按
host或service_name分组,可以分别看到每台机器的情况。
- 搜索语句:
- 设置通知:
- 行动策略:选择已有的钉钉/飞书/企业微信机器人(填入 Webhook URL)。
- 频率:每5分钟检查一次。
- 保存。
优点:无需维护服务器,自动弹性伸缩。 缺点:按存储和查询量付费。
使用商业监控工具(如 Grafana + Loki/Prometheus)—— 可视化最强
Grafana 现在是可视化标准,配合 Loki 处理日志,配置告警。
步骤:
- 接入数据源:Grafana 里添加 Loki 数据源(如果是 Prometheus 指标,方法类似)。
- 创建告警规则:
- 进入 Alerting → Contact points(先配置通知渠道,如钉钉、邮件)。
- 进入 Alert rules → New alert rule。
- 编写查询:
- 使用 LogQL 语法:
sum(rate({service="myapp"} |= "ERROR" [5m])) > 0.1含义:过去5分钟内,每秒钟 ERROR 日志出现次数超过0.1次(即5分钟有30个ERROR)。
- 使用 LogQL 语法:
- 设置通知:选择刚才配置好的 Contact point。
- 保存。
优点:统一监控大盘(Metrics + Logs + Traces)。 缺点:学习成本稍高(需要懂 LogQL)。
核心“坑”与最佳实践
在具体操作时,有几个常见误区需要注意:
- 别直接上报“错误日志”:
- ❌ 错误写法:
count(log_level="ERROR") > 0 - ✅ 正确做法:必须设置阈值(如连续3次或5分钟内出现10次),否则瞬间会被刷屏。
- ❌ 错误写法:
- 必须设置“静默时间” (Silence):
如果每5分钟告警一次,半夜上线发版,可能会触发100条告警,配置一个简单的静默规则(如“屏蔽已处理的告警”)非常重要。
- 增加“分组”:
- 如果100台服务器同时报错,不要发送100条告警,应该按
服务名 + 错误类型分组,只发一条汇总消息:“共有 80 台机器报告 500 错误,占总机器 80%”。
- 如果100台服务器同时报错,不要发送100条告警,应该按
- 要能直接定位:
- ❌ 垃圾告警:
"日志错误" - ✅ 高质量告警:
"[严重] 线上核心支付模块 - 5分钟内错误率90%,最新错误日志样例:/tmp/pay_err.log:23 - SQL connection timeout"
- ❌ 垃圾告警:
快速选择建议
| 你的情况 | 推荐工具 | 配置难度 |
|---|---|---|
| 个人项目、小团队、无运维经验 | 阿里云 SLS / 腾讯云 CLS / Datadog | ⭐ 低 |
| 公司有 Elasticsearch 集群 | Kibana Watcher | ⭐⭐ 中 |
| 已有 Grafana 监控大盘 | Grafana + Loki | ⭐⭐⭐ 中高 |
| 需要极低延迟、高吞吐 | 自建 Flink + Kafka(适合高级用户) | ⭐⭐⭐⭐⭐ 高 |
如果是为了快速解决问题:建议直接使用云服务(阿里云 SLS)或商业软件(如 Datadog),配置一个简单的“错误数超过阈值”的规则,5分钟内就能跑通。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。