如何查询Azure IoT Hub中设备发送的数据总量(含非孪生D2C消息)
查询Azure IoT Hub非孪生D2C消息的数据总量
非孪生D2C消息的日志定位
非孪生的设备到云(D2C)消息,在Azure Diagnostics日志中对应的OperationName为SendD2CMessage,日志类别属于DeviceTelemetry,和你之前处理的D2CTwinOperations孪生操作日志是完全独立的两类记录。
消息大小属性说明
这类非孪生D2C消息默认不会在properties_s字段中自带messageSize属性,需要通过以下两种方式获取消息大小:
- 自定义属性方式:如果设备发送消息时主动在消息属性中添加了大小字段,可通过
extractjson提取对应自定义属性; - 日志内置字段方式:Azure IoT Hub诊断日志会自动记录
body_size_s(消息体大小)和properties_size_s(消息属性大小)两个字段,将二者相加即可得到单条消息的总大小。部分环境下字段名可能为驼峰格式的BodySize和PropertiesSize,需根据实际日志结构调整。
完整统计查询语句
以下是按天统计指定设备非孪生D2C消息总数据量的KQL查询:
AzureDiagnostics | where TimeGenerated between (datetime("2022-10-01") .. datetime('2022-11-08')) | where OperationName == "SendD2CMessage" // 筛选非孪生D2C消息 | extend DeviceId = extractjson("$.deviceId", properties_s) | where DeviceId == "your-target-device-id" // 替换为实际设备ID // 计算单条消息总大小:消息体大小 + 属性大小,字段名需匹配实际日志 | extend TotalMessageSize = toint(body_size_s) + toint(properties_size_s) | where TotalMessageSize > 0 | summarize totalSizeInBytes = sum(TotalMessageSize) by bin(TimeGenerated, 1d) | extend totalSizeInKiloBytes = totalSizeInBytes/1024 | order by TimeGenerated asc
验证日志字段的方法
如果不确定日志中记录大小的字段名称,可先执行以下查询查看样本数据:
AzureDiagnostics | where TimeGenerated between (datetime("2022-10-01") .. datetime('2022-11-08')) | where OperationName == "SendD2CMessage" | limit 10
从返回的结果中确认对应大小字段的准确名称,再调整主查询中的字段引用。
内容的提问来源于stack exchange,提问作者jjczopek
相关产品推荐
相关产品推荐

