打通钉钉+WebHook:日志服务告警升级

摘要: 用一个最最常用的案例(Nginx日志分析)来说明当前使用场景,告警要解决的3个问题:是否有错误;是否有性能问题;是否有流量急跌或暴涨

阿里云日志服务是针对实时数据一站式服务,用户只需要将精力集中在分析上,过程中数据采集、对接各种存储计算、数据索引和查询等琐碎工作等都可以交给日志服务完成。

9月日志服务升级实时分析功能(LogSearch/Analytics),可以使用查询+SQL92语法对日志进行实时分析,并在结果分析可视化上,支持自带Dashboard、DataV、Grafana、Tableua(通过JDBC)、QuickBI等可视化方式。

在监控场景中光有可视化是不够的,日志服务提供告警与通知功能如下:

将查询(SavedSearch)保存下来
对查询设置触发周期(间隔),并对执行结果设定判断条件并且告警
设置告警动作(如何通知),目前支持通知方式有3种:

通知中心:在阿里云通知中心可以设置多个联系人,通知会通过邮件和短信方式发送
WebHook:包括钉钉机器人,及自定义WebHook等
(即将支持)写回日志服务(logstore):可以通过流计算,函数服务进行事件订阅;也可以对告警生成视图和报表
告警功能配置与使用可以参见告警文档。

图片描述

告警设置案例(Nginx日志为例)
我们用一个最最常用的案例(Nginx日志分析)来说明当前使用场景,告警要解决的3个问题:

是否有错误
是否有性能问题
是否有流量急跌或暴涨
准备工作(Nginx日志接入)
日志数据采集。详细步骤请参考5分钟快速入门 或 直接在Logstore页面 数据源接入向导 中设置。
索引设置,详细步骤请参考索引设置与可视化或最佳实践网站日志分析案例。
对关键指标设置视图 + 告警。
(在做完1、2步骤后,在查询页面可以看到原始日志)

图片描述
Sample视图(例子):

图片描述

1. 是否有错误
错误一般有这样几类:404(请求无法找到地址)/502/500(服务端错误),我们一般只需关心500(服务端错误),将这个query保存下来,统计单位时间内错误数c。告警可以设定一个规则c > 0 则产生告警:

status:500 | select count(1) as c

这种方式比较简单,但往往过于敏感,对于一些业务压力较大的服务而言有零星几个500是正常的。为了应对这种情况,我们可以在告警条件中设置触发次数为2次:只有连续2次检查都符合条件后再发告警。

2. 是否有性能问题
服务器运行过程中虽然没有错误,但有可能会出现延迟(Latency)增大情况,因此我们可以针对延迟进行告警。

例如我们可以通过以下方式计算某个接口(“/adduser”)所有写请求(”Post“)延时。告警规则设置为 l > 300000 (当平均值超过300ms后告警)。

Method:Post and URL:"/adduser" | select avg(Latency) as l

利用平均值来报警简单而直接,但这种方法往往会使得一些个体请求延时被平均掉,反馈不出问题。例如我们对该时间段的Latency可以计算一个数学上的分布(划分20个区间,计算每个区间内的数目),从分布图上可以看到大部分请求延时非常低(<20ms),但最高的延时有2.5S。

Method:Post and URL:"/adduser" | select numeric_histogram(20, Latency)

图片描述

为应对这种情况,我们可以用数学上的百分数(99%最大延时)来作为报警条件,这样既可以排除偶发的延时高引起误报,也能对整体的演示更有代表性。以下的语句计算了99%分位的延时大小 approx_percentile(Latency, 0.99) ,同样我们也可以修改第二个参数进行其他分位的划分,例如中位数的请求延时 approx_percentile(Latency, 0.5)

Method:Post and URL:"/adduser" | select approx_percentile(Latency, 0.99) as p99

在监控的场景中,我们也可以在一个图上绘出平均延时,50%分位延时,以及90%分位延时。以下是按一天的窗口(1440分钟)统计各分钟内延时的图:

* | select avg(Latency) as l, approx_percentile(Latency, 0.5) as p50, approx_percentile(Latency, 0.99) as p99, date_trunc('minute', time) as t group by t order by t desc limit 1440

图片描述

3. 是否有流量急跌或暴涨?
服务器端自然流量一般符合概率上的分布,会有一个缓慢上涨或下降过程。流量急跌或暴涨(短时间内变化非常大)一般都是不正常的现象,需要留意。

(例如下图的监控中,在2分钟时间内流量大小下跌30%以上,在2分钟内后又迅速恢复)

图片描述

急跌和暴涨一般会有如下参考系:

上一个时间窗口:环比上一个时间段
上一天该时间段的窗口:环比昨天
上一周该时间段的窗口:环比上周
我们这里以第一种情况来作为case讨论,计算流量infow数据的变动率(也可以换成QPS等流量)。

3.1 首先定义一个计算窗口
例如我们定一个1分钟的窗口,统计该分钟内的流量大小,以下是一个5分钟区间统计:

* | select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60  as window_time from log group by window_time order by window_time limit 15

从结果分布上看,每个窗口内的平均流量 sum(inflow)/(max(time)-min(time)) 应该是均匀的:

图片描述

3.2 计算窗口内的差异值(最大值变化率)
这里我们会用到子查询,我们写一个查询,从上述结果中计算最大值 或 最小值 与平均值的变化率(这里的max_ratio),例如如下计算结果max_ratio 为 1.02。我们可以定义一个告警规则,如果max_ratio > 1.5 (变化率超过50%)就告警。

* | select max(inflow)/avg(inflow) as max_ratio from (select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60  as window_time from log group by window_time order by window_time limit 15) 

图片描述

3.3 计算窗口内的差异值(最近值变化率)
在一些场景中我们更关注最新的数值是否有波动(是否已经恢复),那可以通过max_by方法获取最大windows_time中的流量来进行判断,这里计算的最近值为lastest_ratio=0.97。

注意:

这里的max_by函数计算结果为字符类型,我们需要强转成数字类型
如果要计算变化相对率,可以用(1.0-max_by(inflow, window_time)/1.0/avg(inflow)) as lastest_ratio 代替

* | select max_by(inflow, window_time)/1.0/avg(inflow) as lastest_ratio from (select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60  as window_time from log group by window_time order by window_time limit 15) 

图片描述

总结
日志服务查询分析能力是完整SQL92,支持各种数理统计与计算等,只要会用SQL都能进行快速分析,欢迎尝试!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AliOS Things v1.1.1新特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;10/20在github上开源v1.1.0版本。经过AliOS Things团队及合作伙伴1个多月的努力&#xff0c;很高兴有些更新可以和大家分享。AliOS Things v1.1.1包含了ESP32支持&#xff0c;AT框架&#xff…

Spark精华问答 | spark性能优化方法

Hadoop再火&#xff0c;火得过Spark吗&#xff1f;今天我们继续关于Spark的精华问答吧。1Q&#xff1a;影响性能的主要因素是什么&#xff1f;A&#xff1a;网络传输开销大硬件资源利用率低同一资源的复用率低2Q&#xff1a;优化的方向有哪些&#xff1f;A&#xff1a;设置数据…

android 7.0 解锁亮屏,Android7.0亮屏流程分析

亮屏的本质是改变屏幕的电源状态&#xff0c;经过一系列的调用会来到PowerManagerService中的updatePowerStateLocked()1.PowerManagerService到DisplayPowerControllerprivate void updatePowerStateLocked() {if (!mSystemReady || mDirty 0) {return;}if (!Thread.holdsLoc…

concat函数显示小数点包括0

场景1&#xff1a;当小数点大于等于3位小于5位&#xff1a; select regexp_replace(concat(nvl(round(0.0001,4),0)*100,%),^.,0.)as rate from dual;例如&#xff1a;0.001-0.0001 场景2&#xff1a;当小数点小于等于2位&#xff1a; select concat(nvl(round(0.01,4),0)*1…

阿里云Elasticsearch的X-Pack:机器学习、安全保障和可视化

摘要&#xff1a; ELK是日志分析领域较为流行的技术选择&#xff0c;不少阿里云用户选择在ECS上搭建开源Elasticsearch。与自建开源Elastisearch相比&#xff0c;阿里云Elasticsearch做了性能优化&#xff0c;支持弹性扩容&#xff0c;并搭载了商业版组件X-Pack&#xff0c;为用…

Linux部署Web应用程序超链接下载中文名称文件404问题解决办法

超链接内容如下&#xff1a; <a href"jsp/plugin/用户手册.doc">用户手册</a>开发环境为Windows&#xff0c;Tomcat和WebSphere都用过&#xff0c;超链接都能正常下载 项目生产环境为Linux&#xff0c;由于Linux默认不支持中文&#xff0c;因此超链接下…

2017北京云栖大会:云效企业级协同研发专场议题揭秘!

摘要&#xff1a; 阿里巴巴原汁原味的研发协同平台是如何支撑双十一1682亿背后的研发协同&#xff1f;大中型企业如何完成公有云/专有云/混合云转型升级&#xff0c;实现高效协同研发&#xff1f; 阿里巴巴原汁原味的研发协同平台是如何支撑双十一1682亿背后的研发协同&#xf…

html5在线api,HTML5+ API Reference

Push模块管理推送消息功能&#xff0c;可以实现在线、离线的消息推送&#xff0c;通过plus.push可获取推送消息管理对象。方法&#xff1a;对象&#xff1a;ClientInfo: JSON对象&#xff0c;获取的客户端标识信息PushMessage: JSON对象&#xff0c;推送消息对象MessageOptions…

毋庸置疑,容器带来改变!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘晶晶对于飞贷金融科技副总裁陈定玮而言&#xff0c;金融行业数据具有相较于其他行业更为严格的的高标准安全性要求&#xff0c;对容错的要求更为尤甚&#xff1b;此外是否能高效支撑飞贷金融科技的核心业务&#xff0c;尤其…

阿里云发布首款全球智能互联的网络产品——云骨干网

摘要&#xff1a; 12月13日&#xff0c;阿里发布全球首款智能互联的网络产品–云骨干网&#xff08;Cloud Backbone Network&#xff09;。这款产品能够分钟级构建多地域全球网络&#xff0c;并和混合云连成一体&#xff0c;打造具有企业级规模和通信力的智能云上骨干网络。12月…

matlab pca降维_手撸PCA(Python七行代码实现)

直接上代码&#xff1a;x np.random.rand(10,5) #随机生成一组样本 x - x.mean(axis0) # 见详注1 C x.T.dot(x) # 计算自协方差矩阵 lam,v lina.eig(C) # 特征分解&#xff0c;v是 new_index np.argsort(lam)[::-1] # 特征值排序&#xff0c;见详注2 A -v[:,n…

MaxCompute复杂数据分布的查询优化实践

摘要&#xff1a; 2017年中国大数据技术大会于12月7-9日在北京新云南皇冠假日酒店隆重举行, 大会就大数据时代社会各行业的智能化进程和行业实践展开深入讨论。 在12月8日的“大数据分析与生态系统”分论坛上&#xff0c;来自阿里巴巴计算平台事业部的高级技术专家少杰&#xf…

android开源tabview,TabBarView

声明一个TabBarView &#xff0c;同时将ViewPager传递给它&#xff1a;LayoutInflater inflator (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View v inflator.inflate(R.layout.custom_ab, null);tabBarView (TabBarView) v.findViewById(R.i…

Linux 主机信息 总览

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

AliOS Things异步事件框架Yloop

摘要&#xff1a; Yloop概要 Yloop是AliOS Things的异步事件框架。Yloop借鉴了&#xff0c;libiuv及嵌入式业界常见的event loop&#xff0c;综合考虑使用复杂性&#xff0c;性能&#xff0c;及footprint&#xff0c;实现了一个适合于MCU的事件调度机制。 Yloop概要 Yloop是Al…

这项技术,风头正劲,BAT要力捧!程序员:我彻底慌了...

人工智能离我们还遥远吗&#xff1f;近日&#xff0c;海底捞斥资1.5亿打造了中国首家火锅无人餐厅&#xff1b;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营&#xff0c;百度无人车彻底量产。李彦宏称&#xff0c;这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家…

joi模块验证日期格式_python datetime模块详解

一、datetime模块介绍通过print(dir(datetime))&#xff0c;我们可以看到模块内属性和类&#xff1a;[MAXYEAR, MINYEAR, __builtins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__, date, datetime, datetime_CAPI, sys, time, timedelta, …

AliOS Things 基于组件化思想的多bin特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基于组件化思想的多bin特性&#xff0c;这是AliOS Things有专利保护的多bin fota升级解决方案的核心 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基…

case计算机英语,计算机英语常用术语

小编为大家整理了。一起来学习吧!KB:等于1024 ByteMB:等于1024 KBGB&#xff1a;等于1024 MBByte:字节&#xff0c;等于8 bit***8个位的组合&#xff0c;共有256种电路状态***&#xff0c;计算机一个文字以8 bit来表示bit:位&#xff0c;计算机数据最基本的单位&#xff0c;有0…

查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等

查看属于什么类型主机&#xff1f; dmidecode -s system-product-name物理机&#xff1a; [rootswnode1]# dmidecode -s system-product-name I840-GS虚拟机&#xff1a; [rootgnntdb DbBackup]# dmidecode -s system-product-name VMware Virtual Platform# 总核数 物理CP…