目标
后端任一接口一分钟内 5xx 响应超过一定的量,马上收到报警提示
报警及慢接口有详细列表可以查看
低成本。几年前公司的日志报警系统是自研的,开发成本比较高,也没有达到阿里云日志服务这种产品化程度
机器部署情况
阿里云 EC 服务器
功能概述
阿里云日志服务,采集并分析 nginx 访问日志;写日志分析 SQL,每分钟调度执行,符合条件就触发报警;
根据响应状态码提供:接口 5xx 响应报警、接口 4xx 响应报警;报警通知方式为钉钉群机器人,5xx 跟 4xx 响应分别通知到专用的后端跟前端同学群;
修改日志分析 SQL,在专用 dashboard 展示相关报警请求的详细信息列表
根据响应时间提供:慢响应请求列表,同样放到 dashboard
效果图
钉钉群报警【c 是符合条件的个数,st 是响应状态码】
阿里云日志服务仪表盘 -5xx 报警接口详情
操作步骤
配置日志采集
新建 Project;新建 Logstore;
配置 nginx 日志采集;
日志路径:/path_to_logs/**/access.log
模式:nginx 配置;从线上 nginx.conf 文件里拷贝 log_format main,配置到页面;
Topic 生成方式:文件路径正则;自定义正则:/path_to_logs/([^/]+)/access.log,正好把域名提取出来。可参考生成主题
Logtail 机器组:配置 nginx 机器内网 IP
nginx 机器安装 Logtail 采集器;
参考文档
五分钟快速入门
分析 Nginx 日志
日志服务(SLS)用户手册
配置日志分析 SQL 及报警
日志库》查询分析》查询,可以写 SQL 实时查询 / 分析,然后另存为告警
配置告警条件
配置告警通知。一个告警可配置多个通知列表,可以同时通知到钉钉群跟短信
5xx 报警 SQL
为了方便查看具体的错误接口,基于 uri 分组统计并报警,报警内容里包含 uri 信息
为了方便确认严重程度,报警内容里包含响应状态码
__topic__:www.xyz.com and status in [500 600) | select count(1) as c, avg(status) as st, case when strpos(request_uri, ‘?’) > 0 then split_part(request_uri, ‘?’, 1) else request_uri end as uri group by uri having count(1)>=5 order by count(1) desc
分析 SQL 的写法可参考
告警 - 实时监控 Nginx 访问日志
实时分析简介。支持的 SQL 语法及计算函数都有
告警条件配置
告警通知配置
上面的配置图可能会变,这个产品一直在进化,18 年 12 月的时候发现有一次大的改版。
dashboard 相关报警请求的详细信息列表 SQL:
__topic__:www.xyz.com and status in [500 600) | select time_local, status, upstream_addr, __topic__ as vhost, case when strpos(request_uri, ‘?’) > 0 then split_part(request_uri, ‘?’, 1) else request_uri end as uri order by time_local desc
dashboard 慢响应分析 SQL:
__topic__:www.xyz.com and request_time > 0.3 | select count(1) as count, avg(request_time) as avg_request_time, min(__topic__) as vhost, case when strpos(request_uri, ‘?’) > 0 then split_part(request_uri, ‘?’, 1) else request_uri end as uri group by uri order by avg_request_time desc