云上日志架构:统一采集、存储和分析
日志是排查问题的第一手资料。在分布式系统中,日志分散在各个节点上,如果没有统一的日志管理方案,排查问题就像大海捞针。本文分享如何基于阿里云SLS(日志服务)搭建统一的云上日志架构。
日志分类
企业级日志通常分为四类:系统日志(syslog、dmesg、secure)、应用日志(业务代码输出的日志)、访问日志(Nginx/SLB的access log)、审计日志(操作记录、API调用记录)。不同类型的日志有不同的采集方式和保留策略。
采集方案
ECS上的日志推荐使用Logtail(阿里云官方采集Agent)。Logtail以DaemonSet方式部署在ACK集群中,自动采集所有容器的标准输出日志。对于ECS上的文件日志,安装Logtail后配置采集规则(文件路径、解析正则、过滤条件)。
应用日志建议在代码中使用结构化日志格式(JSON),包含traceId、timestamp、level、message等字段。这样在SLS中可以直接用JSON解析,无需复杂的正则表达式。
存储和索引
SLS的Project按地域划分(和ECS同地域,避免跨地域流量费),Logstore按日志类型划分。建议创建以下Logstore:app-log(应用日志)、access-log(访问日志)、sys-log(系统日志)、audit-log(审计日志)。
开启索引后,SLS支持全文搜索和SQL分析。索引分全量索引和字段索引,建议关键字段开启字段索引(支持精确匹配和模糊搜索),非关键字段只开全量索引(节省存储)。
分析和告警
SLS支持类SQL的查询语法,可以做实时统计分析。常用查询:错误日志统计 level: ERROR | SELECT count(*) as cnt, __source__ GROUP BY __source__。接口响应时间分析 * | SELECT avg(request_time), p99(request_time) FROM access-log。
配置SLS告警,当错误率超过阈值或出现特定错误模式时,自动通知运维人员。告警可以对接钉钉、短信、电话、Webhook。
