🎫

Azure EventHubsのInput、Outputメッセージ数を比較する

2024/05/10に公開

やりたいこと

Azure EventHubsで大量のメッセージを捌いていると、どのくらいのメッセージが来てるか、遅延が発生したりしていないか、InputMessagesとOutputMessagesを比較したくなったので、
Azure Monitorのクエリをメモとして残します。

EventHubs > 監視 > ログ

ここでクエリを実行します。

日付単位でメッセージ数を集計したい

Azure OpenAIで下記のように依頼しました。

Azure Monitorのクエリで取得できるIncommingMessagesとOutgoingMessagesの数がIncommingMessagesに対して5%以内の差分か判定するクエリを教えて

だいたい、下記のような感じのクエリが出力されたので、期間とかを変更して
6日分くらいのデータを集計するようにしました。

// 入力メッセージ数の集計  
let InputMessages = AzureMetrics  
| where MetricName == "IncomingMessages" and TimeGenerated >= ago(7d)  
| summarize TotalInputMessages = sum(Total) by bin(TimeGenerated, 1d);  
  
// 出力メッセージ数の集計  
let OutputMessages = AzureMetrics  
| where MetricName == "OutgoingMessages" and TimeGenerated >= ago(7d)  
| summarize TotalOutputMessages = sum(Total) by bin(TimeGenerated, 1d);  
  
// 入力メッセージ数と出力メッセージ数の結合と比較  
InputMessages  
| join kind=inner OutputMessages on TimeGenerated  
| project TimeGenerated, TotalInputMessages, TotalOutputMessages,  
          Difference = abs(TotalInputMessages - TotalOutputMessages),  
          IsWithin5Percent = abs(TotalInputMessages - TotalOutputMessages) <= (TotalInputMessages * 0.05)  
| order by TimeGenerated desc 

6日前くらいの分単位のInput/Outputメッセージの比較

let InputMessages = AzureMetrics  
| where MetricName == "IncomingMessages" and TimeGenerated >= ago(7d) and TimeGenerated <= ago(5d)  
| summarize TotalInputMessages = sum(Total) by TimeGenerated;

let OutputMessages = AzureMetrics  
| where MetricName == "OutgoingMessages" and TimeGenerated >= ago(7d) and TimeGenerated <= ago(5d)
| summarize TotalOutputMessages = sum(Total) by TimeGenerated;  
  
// 入力メッセージ数と出力メッセージ数の結合と比較  
InputMessages  
| join kind=inner OutputMessages on TimeGenerated  
| project TimeGenerated, TotalInputMessages, TotalOutputMessages,  
          Difference = abs(TotalInputMessages - TotalOutputMessages),  
          IsWithin5Percent = abs(TotalInputMessages - TotalOutputMessages) <= (TotalInputMessages * 0.05)  
| order by TimeGenerated desc 

上記を実行すると、1分あたりのOutputメッセージ数が1200、1300などの100メッセージ単位で捌かれていることに気づきました。

どこかで分単位のLIMITに引っかかってるんだろうなー

EventHubsのLimit
https://learn.microsoft.com/ja-jp/azure/event-hubs/event-hubs-quotas
この辺のLimitではなさそうなので、メッセージを捌く側のLimitかなー

まとめ

AOAIで大体のクエリはできますが、間違いとか、ステップを踏む必要もあるので、公開情報として残すことでGPT-Xの精度向上につながらないかなというモチベーションが生まれてます。

ヘッドウォータース

Discussion