Azure Monitorのアラート設定に集約という項目が追加されてました
Azure Monitorのアラート設定で、LogAnalyticsワークスペース-Custom log searchにを指定した際に集約という項目が追加されてました。
詳細は上記サイトに記載の通りですが、これを具体的に言うと、LogAnalyticsワークスペース単位でアラート設定を行う場合に正しく集計されないケースがあるという事になります。
1つの例として、以下のような継続して閾値を超えた場合の設定を行うには、Custom log searchを利用し、かつクエリとして仮想マシン単位で指定が必要でした。
監視対象:仮想マシン
監視内容;メモリ監視
閾値;% Used Memoryが80%以上
間隔;5分間
継続回数;3回
集約という項目を使う事により、仮想マシン単位ではなく、LogAnalyticsのワークスペース単位での設定可能になりました。
※Metricを利用してのリソース監視では仮想マシン単位での監視が可能ですが、連続して3回発生した場合等、継続を条件としたような設定ができません。その為、Custom log searchでの設定が必要になります。
Azure Monitorに設定するクエリ(Custom log searchを使う場合)
下記のLogAnalyticsクエリで、ワークスペースに接続された仮想マシンの% Used Memoryを仮想マシン単位で取得可能です。 しかし、このクエリをAzure Monitorのクエリとして設定しても、ワークスペースに接続された仮想マシンの平均値で認識されるため、正しくアラート検知されませんでした。(平均値として認識されるのはAzure Monitorの仕様だそうです。)
#LogAnalyticsクエリ(メモリ使用率取得) Perf | where ( ObjectName == 'Memory’ ) | where ( CounterName == '% Used Memory’ ) | summarize AggregatedValue=avg(CounterValue) by bin(TimeGenerated, 5m), Computer |
Azure Monitorに設定するクエリとしては、下記のように、仮想マシンを明示的に指定する必要がありました。
#LogAnalyticsクエリ(メモリ使用率取得) Perf | where ( Computer == 'VM名' )` | where ( ObjectName == 'Memory’ ) | where ( CounterName == '% Used Memory’ ) | summarize AggregatedValue=avg(CounterValue) by bin(TimeGenerated, 5m) |
※リソースを収集するためには、事前にLogAnalytics側の設定で、パフォーマンスカウンターの取得設定が必要です。
集約を利用
集約を使う事により、以下のクエリをAzure Monitorでも正しくクエリを認識させる事ができます。
#LogAnalyticsクエリ(メモリ使用率取得) Perf | where ( ObjectName == 'Memory’ ) | where ( CounterName == '% Used Memory’ ) | summarize AggregatedValue=avg(CounterValue) by bin(TimeGenerated, 5m), Computer |
集約に表示されるのはクエリ内でbyで設定された項目になります。実際の設定は下記画面の通りになります。
今回の場合、集約という項目にComputerが表示されますので、これを選択します。
Computerを指定することにより、以下のクエリでもLogAnalyticsワークスペースに接続された仮想マシンのリソースをAzure Monitor上でも期待した動作をしてくれます。
集約を使う事のメリット。
ワークスペース単位での指定になるため、仮想マシンがワークスペースに接続された段階でAzure Monitorの設定変更する事なく、監視が開始できます。
また1つのアラートルールで済むため、コスト削減のメリットもあります。
非常に、細かい部分での機能になりますが、メリットは十分にあるかと思います。