前回の「Azure VMのメモリ使用量などのアラート設定(LogAnalytics編)」の続きになります。
サポートに「ゲストOS診断だとグラフは描けてもアラート設定は出来ない、LogAnalyticsでやってみたけどもう少しどうにかなりませんか?」と雑に問い合わせたところ、TelegrafをAzure Monitorと連携するドキュメントとSS付きで設定例まで教えてもらいました。サポートの中の人、ありがとうございます。
以下、ドキュメントです。ここの通りやればよいでしょう。
以下は、そのアラート設定ができるかどうかの確認です。
telegraf?
TelegrafはInfluxdata社製のメトリック収集エージェント。
今回はtelegrafの出力先をAzure Monitorにすることで実現している(Azure Monitorのカスタムメトリックという機能を利用している)
やりたいこと
VMのメモリ使用率とディスク使用率についてアラートを設定したい
(ゲストOS診断でメトリックは取れてグラフを書いたりすることは出来るが、アラート設定ができないため)
前提
- あらかじめVMを用意しておく
- システム割り当てのマネージドID(system-assigned managed identity)を有効にしておく
マネージドIDが必須です。詳しい手順は以下から。
セットアップ
telegrafをダウンロードしてサービスとして裏で動かすだけです。最新版のダウンロードは公式から。
Linux(RHEL系)はこんな感じ。
# Telegrafの導入
sudo yum install -y https://dl.influxdata.com/telegraf/releases/telegraf-1.11.2-1.x86_64.rpm
# 設定ファイルを書き換え: cpu,memory,diskのメトリックをazure_monitorに連携する設定を書き出す
telegraf --input-filter cpu:mem:disk --output-filter azure_monitor config | sudo tee /etc/telegraf/telegraf.conf
# 自動起動設定 & 起動
sudo systemctl enable telegraf
sudo systemctl start telegraf
これだけ。ID/Pass等は要らない。マネージドIDによってVMの情報を勝手に拾ってその情報で連携する。
Azureのドキュメントに無かったWindows 10にも入れた。一応Powershellでコピペで入るようにしている。5.1.17763.503以降なら動くはず。。
$url = "https://dl.influxdata.com/telegraf/releases/telegraf-1.11.2_windows_amd64.zip"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, "telegraf.zip")
Expand-Archive "telegraf.zip" -DestinationPath .\
$telegrafHome = "C:\Program Files\Telegraf"
$configPath = "$telegrafHome\telegraf.conf"
MKDIR "$telegrafHome"
Copy-Item -Path ".\telegraf\*" -Destination "$telegrafHome" -Recurse
& "$telegrafHome\telegraf.exe" --input-filter cpu:mem:disk --output-filter azure_monitor config > $configPath
# Remove BOM
$config = Get-Content $configPath
$utf8NoBomEncoding = New-Object "System.Text.UTF8Encoding" -ArgumentList @($false)
[System.IO.File]::WriteAllLines($configPath, $config, $utf8NoBomEncoding)
& "$telegrafHome\telegraf.exe" --service install
Start-Service -InputObject telegraf
基本的な流れは一緒だけど、AgentなのでWindowsのサービスとして登録する必要があります。
telegrafは親切にコマンドを用意してくれていて"telegraf.exe" --service install
で行える。後はサービスを起動するだけですが。
詳しくはtelegrafのWindowsサービスに関するドキュメントがあります。複数のtelegrafをサービスとして動かしたい場合等は読みましょう。
ちなみに、telegrafはデフォルトで10秒周期でメトリックを送り、空き容量など要らないかもしれないメトリックも取ります。
確認
Agentを有効にして3分後ぐらいにVirtualMachineブレードのメトリックでグラフで見てみます。メトリック名前空間にtelegraf/mem
等が追加されていることがわかります。
最後に今回のメインのアラート設定です。詳しい手順は前回とだいたい同じなので省略して、見え方の部分だけ紹介します。
収集したメトリックはちゃんと「VirtualMachine」の「メトリック」の「Telegraf/mem」として見えます。
ただ注意として、アラートは1VMづつ設定する必要があるようです。このように複数VMを対象にするとアラート設定はできませんでした。(OSの違いのせいかもしれない?)
LogAnalyticsと比べた時の主観
アラート設定で複数指定が出来ない点、増減したときに対応が必要なのがネックな感じ。ここが気になる場合はLogAnalyticsに集めたほうがよいかもしれない。
- 〇 管理するリソースが減る(LogAnalytics不要)
- △ 導入にゲストOS上の操作が必須だが、スクリプト実行で自動化できる
- △ 課金の単位が不明瞭で無料枠が少なく上限設定ができない点が心配。(扱うデータが小さい単位なので課金事故リスクは低そう)
- ×1 VM、1メトリック毎にアラート設定が必要。
トラブルシューティング
遭遇したメモ。
うまく動かない場合はログ(Linuxなら/var/log/messages
)で何が起きているか確認する。
WindowsのServiceはログがどこに出るかは分かっていない。がtelegraf
とオプション無しで実行すると、そのままフォアグラウンドで動いてログが標準出力される。
Jul 16 03:17:00 vm-fukasawah-mem-2 telegraf: 2019-07-16T03:17:00Z E! [agent] Error writing to output [azure_monitor]: unable to fetch authentication credentials: azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https://japaneast.monitoring.azure.com/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/XXXXXXXXXXXXX/providers/Microsoft.Compute/virtualMachines/vm-fukasawah-mem-2/metrics: StatusCode=400 -- Original Error: adal: Refresh request failed. Status Code = '400'. Response body: {"error":"invalid_request","error_description":"Identity not found"}
システム割り当てIDが有効になっていないので有効化してエージェントを再起動。
Jul 16 03:24:00 vm-fukasawah-mem-2 telegraf: 2019-07-16T03:24:00Z E! [agent] Error writing to output [azure_monitor]: failed to write batch: [400] 400 Bad Request
システム割り当てIDを有効にした後に再起動していない場合は再起動。