SLS日志服务:实时日志分析实践

李

李架构师

· 阅读 1800

分享
SLS日志服务

SLS日志服务:实时日志分析实践

SLS(日志服务)是阿里云的一站式日志平台,支持日志的采集、存储、查询、分析、可视化、告警。相比自建ELK,SLS免运维、弹性伸缩、按量付费,是云上日志管理的首选方案。本文分享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%)。

SLS日志服务:实时日志分析实践

一份可执行的日常清单

  • 暴露面盘点:定期梳理对外端口与服务,关闭不必要的开放。
  • 权限最小化:账号与密钥按最小权限分配,定期回收闲置权限。
  • 告警治理:清理长期无人响应的告警,保证留下的告警都值得处理。
  • 预案演练:对高频故障场景准备处置预案并定期演练。

清单不复杂,难在坚持;而监控告警与可观测体系的差距,恰恰体现在坚持上。

监控告警与可观测体系的体系化思路

与其追求单点工具的极致配置,不如先保证覆盖面:关键资产是否都在监控之内、重要操作是否都有审计、对外暴露面是否都经过评估。覆盖面完整之后,再谈深度优化才有意义。

体系化的另一个好处是可传承:不依赖某个人的记忆,而是依赖流程与清单,团队整体水位才会稳定提升。