【Azure Event Hub】在VMSS中使用WAD(Window Azure Diagnostic)插件发送日志到Event Hub中报错分析

简介: 本文分析Azure VMSS中WAD扩展向Event Hub推送日志时出现丢失的问题。错误提示“Event Hub is too busy”及“50+ batches in queue”表明非服务端瓶颈,而是WAD客户端本地队列满(硬编码上限50批),因日志生成速度超过发送速度所致。建议扩容VMSS实例或优化WAD sinks配置分流日志。

问题描述

使用Azure的虚拟机集VMSS中部署应用程序,通过它的扩展WAD(Window Azure Diagnostic)来授权系统及应用层面的全部事件日志,并发送到Event Hub中。

只是,通过EventHub收集到的日志,发现丢失了一部分事件日志。并且在VMSS中收集到的日志文件中,可以发现下列错误信息:

  1. Failed to publish data to event EventXXXXXXXXXXXXXXXXXXXXXX; event hub xxxxxxxxx.servicebus.chinacloudapi.cn\/xxxxxx is too busy
  2. There are more than 50 batches in the queue for EventHub.
  3. Operation could not be completed within the specified time

基于以上信息,是否是接收端Event Hub达到了瓶颈了呢?

 

问题解答

对于错误消息 event hub xxxx is too busy,初步判断是怀疑Event Hub服务端的瓶颈。因为Event Hub的吞吐量是存在限制的。

事件中心的吞吐量容量由“吞吐量单位”控制。 单个吞吐量单位限制为:

  • 流入量:最高每秒 1 MB,或每秒 1000 个事件(以先达到的限制为准)。
  • 流出量:最高每秒 2 MB,或每秒 4096 个事件。

当流入量受限,事件中心将引发 EventHubsException(“原因”值为 ServiceBusy)。

如果Event Hub服务端出现限流并报错Service Busy,会在Azure Event Hub门户指标上显示。但是,在WAD报错event hub xxxxxxxxx.servicebus.chinacloudapi.cn\/xxxxxx is too busy的时间点上,并没有发现Event Hub的Service Busy报错指标。

所以,在排除Event Hub服务端之后,回到WAD客户端的配置,根据 “There are more than 50 batches in the queue for EventHub.” 分析到50是WAD 客户端的源代码中硬编码,无法配置和修改。

如果WAD所在的实例上的日志数据数据量太大,在发送给Event Hub服务之前,在Queue中已经有50个batch后 (即本地缓存池已满,消息的生成速度 > 发送速度),就会出现There are more than 50 batches in the queue for EventHub 报错信息。

 

如果是客户端生成的日志事件过多,合理的解决方案有:

1)增加VMSS中的实例数,让应用分配到更多实例上,减少单个实例上生产日志的速度。最终达到消息的生成速度<发送速度

2)修改WAD的 sinks 配置,对事件日志进行分类,减少单个sinks发送渠道压力

 

 

参考资料

吞吐量单位 : https://docs.azure.cn/zh-cn/event-hubs/event-hubs-scalability#throughput-units

Send data from Microsoft Azure diagnostics extension to Azure Event Hubs : https://learn.microsoft.com/en-us/azure/azure-monitor/agents/diagnostics-extension-stream-event-hubs

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
29天前
|
测试技术 Windows
【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享
本文详解如何使用OpenSSL生成自签名证书链,包括根CA、中间CA和服务器证书,并最终打包为包含私钥的PFX文件,适用于内部系统或测试环境部署,步骤清晰,可复制即用。
177 3
|
3月前
|
开发框架 Java .NET
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
Java应用在Azure App Service(Windows)部署时,因IIS默认限制上传文件不超过30MB,导致大文件上传出现413错误。虽无web.config文件,可通过Kudu工具手动创建并配置maxAllowedContentLength和maxRequestLength,突破限制,实现大文件上传。
249 3
|
10月前
|
存储 安全 数据安全/隐私保护
【Azure Function App】在Function App中使用System Managed Identity访问Storage Account
本文介绍了如何在Azure Function中使用托管身份(Managed Identity)替代AzureWebJobsStorage连接函数应用到存储账户,以提高安全性并减少Access Key的使用。具体步骤包括:1) 启用系统分配的身份;2) 为函数应用授予存储访问权限,添加必要角色(如Storage Blob Data Contributor);3) 配置`AzureWebJobsStorage__blobServiceUri`参数指定Blob Service Uri。完成后删除旧配置,即可通过Managed Identity访问Storage Account。
329 19
|
10月前
|
API C++
【Azure Developer】VS Code上登录China Azure遇见错误:CAA20002
在VS Code中安装Azure Resource插件后,修改云环境为中国区Azure时,可能会遇到错误代码CAA20002。解决办法是将Microsoft Account的Client ID Version从默认的v1修改为v2。具体操作为:打开VS Code设置页面“Setting”,输入“microsoft account”过滤配置,在Microsoft中找到Client ID Version并将其值更改为v2。完成后测试登录即可成功。相关参考资料可查阅GitHub上的VS Code Azure登录问题讨论。
276 6
|
11月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
292 4
|
6月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
313 5
|
8月前
|
NoSQL 网络协议 Java
【Azure Redis】Redis服务端的故障转移(Failover)导致客户端应用出现15分钟超时问题的模拟及解决
在使用 Azure Cache for Redis 服务时,因服务端维护可能触发故障转移。Linux 环境下使用 Lettuce SDK 会遇到超时 15 分钟的已知问题。本文介绍如何通过重启 Primary 节点主动复现故障转移,并提供多种解决方案,包括调整 TCP 设置、升级 Lettuce 版本、配置 TCP_USER_TIMEOUT 及使用其他 SDK(如 Jedis)来规避此问题。
291 1
|
11月前
|
JSON 数据格式
【Azure Fabric Service】演示使用PowerShell命令部署SF应用程序(.NET)
本文详细介绍了在中国区微软云Azure上使用Service Fabrics服务时,通过PowerShell命令发布.NET应用的全过程。由于Visual Studio 2022无法直接发布应用,需借助PowerShell脚本完成部署。文章分三步讲解:首先在Visual Studio 2022中打包应用部署包,其次连接SF集群并上传部署包,最后注册应用类型、创建实例并启动服务。过程中涉及关键参数如服务器证书指纹和服务端证书指纹的获取,并附带图文说明,便于操作。参考官方文档,帮助用户成功部署并运行服务。
351 73
|
7月前
|
容器
【Container App】如何长Ping一个目标主机和端口?
本文介绍如何使用 nc (Netcat) 命令持续检测目标主机和端口的连通性。通过编写一个包含 while 循环和 sleep 的脚本,实现类似“长 ping”的效果,适用于测试请求是否正常发出的场景。
445 0
|
9月前
|
存储 数据可视化 开发工具
【Application Insights】Application Insights存储的Function App的日志存在"Operation Link" 为空的情况
在将 Azure Functions 升级到 .NET 8 和 Isolated Worker 模式后,Application Insights 的请求日志中 `operation_Link` 字段为空,导致分布式追踪无法正常关联。解决方法包括:确保引用正确的 SDK 包(如 `Microsoft.Azure.Functions.Worker.ApplicationInsights`),正确配置 Application Insights 服务,移除默认日志过滤规则,并使用最新依赖包以支持分布式追踪。通过这些步骤,可恢复端到端事务视图的可视化效果。
197 10