【Azure Event Hub】自定义告警(Alert Rule)用来提示Event Hub的消息incoming(生产)与outgoing(消费)的异常情况
问题描述
在使用Azure Service Bus的时候,我们可以根据Queue中目前存在的消息数来判断当前消息是否有积压的情况。
但是,在Event Hub中,因为所有消息都会被存留到预先设定的保留时间(默认是7天), 所以无法通过消息数来判断当前的消息是否有积压或者是有多余重复消费。

当消费端出现异常情况,在没有incoming的情况下,还是存在大量的outgoing,这种情况如何来提前预警呢?是否可以通过设置告警规则来及时通知运维人员呢?
如下图这样Outgoing 大于 incoming的情况

问题解答
在Azure服务中,PaaS资源都可以根据指标数据来设置告警,但是这是基于该服务有这类型指标的情况。
如现在Event Hub中 Outgoing Message 和Incoming Message不匹配的情况,由于Event Hub自身的指标中,并没有一个指标表示 Outgoing 与 Incoming 之间的差距值。 如果需要知道两个指标间的差值,就需要从收集的Metrics指标中进行自定义查询语句,并根据结果进行阈值设定。
主要的步骤有:
1)收集Event Hub Metrics指标到Log A中
- 设置诊断日志,日志发送到Log Analytics Workspace中

详细步骤,可参考官网:https://docs.azure.cn/zh-cn/event-hubs/monitor-event-hubs#log-analytics
2)自定义查询语句,在Kusto中进行行列转换,绝对值转换
示例Kusto语句
AzureMetrics | where ResourceProvider =="MICROSOFT.EVENTHUB" | where MetricName =="EHOUTMSGS" or MetricName =="EHINMSGS" | project TimeGenerated, MetricName, Total, TimeGrain | evaluate pivot(MetricName,sum(Total)):(TimeGenerated:datetime, EHOUTMSGS:long, EHINMSGS:long,AlertValue:long) | project TimeGenerated,EHOUTMSGS, EHINMSGS, AlertValue = abs(EHOUTMSGS - EHINMSGS)
说明:
1: EHOUTMSGS 表示Event Hub Outgoing Messages 统计值
2: EHINMSGS表示 Event Hub Incoming Messages 统计值
3: pivot 函数执行把多行数据转换为多列。此处通过MetricsName的值的不同而转换为 EHOUTMSGS 和 EHINMSGS 两列,并且根据TimeGenerated时间值进行Total统计。在同一个时间点的数据归并为一行数据。
4:AlertValue = abs(EHOUTMSGS - EHINMSGS), 计算差值并取绝对值,然结果显示为正
PIVOT使用的前后对比效果:

3)设置自定义指标
- 选择 Signal Name 为 Custom Log search
- 输入第二步中的Kusto Query 语句
- 在Measurement选择 AlertVaule, Average, 并以5分钟为一个时间周期进行判断

4)设置阈值
在Alert Logic 部分中,这是阈值即可。这里也是触发Alert的关键点,需要根据实际情况来决定一个合理的值。

【结束】
附录:为什么pivot 语句中特意的添加了 输出格式的结构体呢?
| evaluate pivot(MetricName,sum(Total)):(TimeGenerated:datetime, EHOUTMSGS:long, EHINMSGS:long,AlertValue:long)

添加OutputSchema的目的就为了避免查询结构体中缺少了需要统计的字段值而报错('project' operator: Failed to resolve scalar expression named 'EHINMSGS' I)。
如下效果对比:

【Azure Event Hub】自定义告警(Alert Rule)用来提示Event Hub的消息incoming(生产)与outgoing(消费)的异常情况的更多相关文章
- zabbix之自定义告警
zabbix支持内置的告警类型.email,sms,等 有时候需要自定义类型的. [其他微信,钉钉都差不多方式,只是脚本不一样] 自定义告警类型[自定义邮件] 编写自定义脚本,并测试成功. [脚本需要 ...
- 实用干货丨如何使用Prometheus配置自定义告警规则
前 言 Prometheus是一个用于监控和告警的开源系统.一开始由Soundcloud开发,后来在2016年,它迁移到CNCF并且称为Kubernetes之后最流行的项目之一.从整个Linux服务器 ...
- jquery自定义对话框alert、confirm和prompt
jQuery Alert Dialogs,又一个基于jQuery的提示框插件,主要包括Alert.Confirm.prompt这三种,还有一个高级范例,可以在提示框内嵌入HTML语言,可以自定义风格样 ...
- 在Azure China用自定义镜像创建Azure VM Scale Set
在Azure China用自定义镜像创建Azure VM Scale Set 在此感谢世纪互联的工程师Johnny Lee和Lan,你们给了我很大的帮助.因为Azure China的官网没有给出完整的 ...
- SweetAlert – 替代 Alert 的漂亮的提示效果
Sweet Alert 是一个替代传统的 JavaScript Alert 的漂亮提示效果.SweetAlert 自动居中对齐在页面中央,不管您使用的是台式电脑,手机或平板电脑看起来效果都很棒.另外提 ...
- Azure Event Hub 技术研究系列2-发送事件到Event Hub
上篇博文中,我们介绍了Azure Event Hub的一些基本概念和架构: Azure Event Hub 技术研究系列1-Event Hub入门篇 本篇文章中,我们继续深入研究,了解Azure Ev ...
- Microsoft Azure 上的自定义数据和 Cloud-Init
自定义数据是什么? 客户经常询问如何才能在配置Microsoft Azure 虚拟机时插入脚本或其他元数据.在其他云中,这个概念通常称为用户数据.MicrosoftAzure 中也有一项类似的功 ...
- 构建自定义docker镜像,上传至docker hub
docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使 ...
- 使用 PowerShell 创建 Azure VM 的自定义映像
自定义映像类似于应用商店映像,不同的是自定义映像的创建者是你自己. 自定义映像可用于启动配置,例如预加载应用程序.应用程序配置和其他 OS 配置. 在本教程中,你将创建自己的 Azure 虚拟机自定义 ...
- Azure 基础:自定义 Table storage 查询条件
本文是在 <Azure 基础:Table storage> 一文的基础上介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table s ...
随机推荐
- MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - Linux CentOS Docker 安装 MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议,它被设计 ...
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- 关于react的Tabs组件中TabPane的bug
今天解决了我自认为一个很不起眼的Bug. 我的Tabs下面有5个tabPane,并且这几个tabPane共用了一个search组件,今天遇到了一个bug,就是这几个组件使用公共查找组件的时候,前一个组 ...
- Java学习笔记07
1. API API(Application Programming Interface):应用程序接口. Java中的API 指的是JDK中提供的各种功能的Java类,这些类将底层的实现封装 ...
- 使用Java接入小程序订阅消息!
更新完微信服务号的模板消息之后,我又赶紧把微信小程序的订阅消息给实现了!之前我一直以为微信小程序也是要企业才能申请,没想到小程序个人就能申请. 消息推送平台推送下发[邮件][短信][微信服务号][微信 ...
- include-file
0X01 前言 这篇文章介绍文件包含漏洞. 0X02 最常见的两个函数的形象解释: 我们知道文件包含最常见的是两个函数 include() require()(这里就不谈他们的亲戚 include_o ...
- Linux 根据名称自动kill掉当前相关进程
ps aux | grep app | grep -v "grep" | awk '{print $2}' | xargs -r kill
- React项目build
1.项目根目录下新建app.js文件 // 使用 express 搭建一个服务器 const express = require("express"); const { creat ...
- 2023-03-26:给定一个二维数组matrix, 每个格子都是正数,每个格子都和上、下、左、右相邻。 你可以从任何一个格子出发,走向相邻的格子, 把沿途的数字乘起来,希望得到的最终数字中,结尾的0
2023-03-26:给定一个二维数组matrix, 每个格子都是正数,每个格子都和上.下.左.右相邻. 你可以从任何一个格子出发,走向相邻的格子, 把沿途的数字乘起来,希望得到的最终数字中,结尾的0 ...
- 2022-10-29:go语言中的defer能非常方便地处理资源释放问题,rust语言里如何实现defer功能呢?
2022-10-29:go语言中的defer能非常方便地处理资源释放问题,rust语言里如何实现defer功能呢? 答案2022-10-29: rust里有时候你也必须用defer,别说是设计上的问题 ...