SLS日志服务:实时日志分析实践
SLS(日志服务)是阿里云的一站式日志平台,支持日志的采集、存储、查询、分析、可视化、告警。相比自建ELK,SLS免运维、弹性伸缩、按量付费,是云上日志管理的首选方案。本文分享SLS的核心功能和实战经验。
「SLS日志服务:实时日志分析实践」提醒我们一个朴素的事实:监控告警与可观测体系靠的不是临场发挥,而是平时的体系化建设。告警是否准确、日志是否齐全、权限是否收敛,决定了故障来临时是从容处置还是手忙脚乱。
日志采集
ECS日志:安装Logtail Agent,配置采集规则(文件路径、行首正则、过滤条件)。Logtail支持多种日志格式:正则、JSON、分隔符、完整单行。对于多行日志(如Java异常堆栈),配置行首正则(如 ^\d{4}-\d{2}-\d{2})。
容器日志:在ACK中以DaemonSet方式部署Logtail,自动发现所有容器的标准输出日志。通过环境变量或Annotation可以自定义采集规则(如只采集特定容器的日志、过滤特定字段)。
SDK直接上报:应用代码中使用SLS SDK直接上报日志,适合需要精确控制日志场景。支持异步发送、批量聚合、自动重试。
查询分析
SLS使用类SQL的查询语法,分为搜索部分和分析部分,用 | 分隔:
搜索(全文索引):error AND timeout(同时包含error和timeout)、status: 500(字段精确匹配)、message: "connection refused"(短语搜索)。
分析(SQL语法):* | SELECT status, count(*) as cnt GROUP BY status ORDER BY cnt DESC LIMIT 10。支持时间函数、字符串函数、JSON函数、窗口函数等。
常用分析场景:错误率统计、接口P99延迟、用户行为分析、安全审计。查询结果可以直接生成图表,嵌入到SLS Dashboard中。
告警配置
SLS告警由三部分组成:查询条件 + 触发条件 + 通知方式。例如:5分钟内5xx错误超过100次,发送钉钉告警。
告警支持高级功能:告警抑制(子告警被抑制不重复通知)、告警升级(超时未处理升级通知)、告警去重(相同告警合并)、无数据告警(日志中断时告警)。通知渠道支持钉钉、短信、邮件、电话、Webhook。
成本优化
SLS按写入量、存储量、读取量计费。优化建议:合理设置索引(非必要字段不开索引),设置数据保留天数(30天通常足够),使用智能冷热分层(30天以上的日志自动降为低频存储,费用降低60%)。
一份可执行的日常清单
- 暴露面盘点:定期梳理对外端口与服务,关闭不必要的开放。
- 权限最小化:账号与密钥按最小权限分配,定期回收闲置权限。
- 告警治理:清理长期无人响应的告警,保证留下的告警都值得处理。
- 预案演练:对高频故障场景准备处置预案并定期演练。
清单不复杂,难在坚持;而监控告警与可观测体系的差距,恰恰体现在坚持上。
监控告警与可观测体系的体系化思路
与其追求单点工具的极致配置,不如先保证覆盖面:关键资产是否都在监控之内、重要操作是否都有审计、对外暴露面是否都经过评估。覆盖面完整之后,再谈深度优化才有意义。
体系化的另一个好处是可传承:不依赖某个人的记忆,而是依赖流程与清单,团队整体水位才会稳定提升。
