こんにちは。技術開発室の與島です。

Microsoft AzureのモニタリングサービスであるAzure Monitorに対応した監視ツール、azmon をOSSとして公開しました。
本エントリで紹介させていただきます。

azmon

azmonは次のことが行えるチェックプラグイン・メトリック収集プラグインです。

  • Azure Monitor上のメトリックデータをNagiosプラグインとしてチェック
  • Azure Monitor上のメトリックデータをSensuプラグイン形式で出力

check, metricという2つのサブコマンドが、それぞれ上記に対応しています。

弊社では監視にNagios、メトリック可視化にGrafana(+Graphite)を利用しているため、それらと連携して使う想定で開発しました。
汎用的に使えるように出力フォーマットに互換性をもたせていますので、mackerel-agentなどとあわせても利用できると思います(実際に検証はしていませんので、うまくできないなどあればIssueでご報告ください)。

azmonによるチェック監視

checkサブコマンドでNagiosプラグインとしてチェックを実行します。

チェック対象のリソースはグローバルオプションで指定します。
また、チェック対象のメトリックと閾値は、checkサブコマンドのオプションで指定します。

以下のメトリックに対してチェックを行う場合の実行コマンドと出力結果の例です。

  • サブスクリプションID: abcdef01-2345-6789-abcd-ef0123456789
  • リソースグループ: azmon-demo
  • リソースタイプ: Virtual machine
  • 集計の種類: Average
  • メトリック: Percentage CPU
$ azmon \
  --subscription-id abcdef01-2345-6789-abcd-ef0123456789 \
  --resource-group azmon-demo \
  --namespace Microsoft.Compute/virtualMachines \
  --resource web01 \
  --aggregation Average \
  check --metric-name "Percentage CPU" --warning-over 80 --critical-over 90
OK - web01 Percentage CPU is 0.295000

閾値を指定するオプションは、--warning-over, --critical-over, --warning-under, --critical-underの4つがあります。

チェック対象のメトリックデータの値が 〜以上 の場合にアラートを発生させたい場合は、--*-overを、チェック対象のメトリックデータの値が 〜以下 の場合にアラートを発生させたい場合は、--*-underを利用します。

azmonによるメトリック可視化

metricサブコマンドでメトリックデータをSensuプラグイン形式で出力します。これを利用して収集したデータを時系列データベースに保存して、Grafanaなどによって可視化できます。

対象のリソースはグローバルオプションで指定します(チェック監視と同じです)。
取得、出力するメトリックは、metricサブコマンドのオプションで指定します。

以下のメトリックを取得、出力する場合の実行コマンドと出力結果の例です。グローバルオプションはチェック監視の例と同じなので省略します。

  • サブスクリプションID: abcdef01-2345-6789-abcd-ef0123456789
  • リソースグループ: azmon-demo
  • リソースタイプ: Virtual machine
  • 集計の種類: Average
  • メトリック: Percentage CPU
$ azmon \
  <グローバルオプション> ...
  metric --metric-names "Percentage CPU"
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.PercentageCPU.Average   0.297500        1555397880

メトリックの指定には--metric-namesオプションを利用します。上の例では「Percentage CPU」のみを指定していますが、カンマ区切りで複数指定することもできます。

$ azmon \
  <グローバルオプション> ...
  metric --metric-names "Percentage CPU,Network In,Network Out"
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.PercentageCPU.Average   0.280000        1555398120 azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.NetworkIn.Average       0.000000        1555398120
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.NetworkOut.Average      0.000000        1555398120

また、--metric-namesオプションは必須ではありません。--metric-namesがない場合は、グローバルオプションで指定したリソースタイプのすべてのメトリックが対象になります(ただし、ディメンションの指定が必須のものは除きます)。

$ azmon \
  <グローバルオプション> ...
  metric
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.OSPerDiskReadBytessec.Average   0.000000        1555396440
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.OSPerDiskWriteBytessec.Average  2527.175000     1555396440
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.OSPerDiskWriteOperationsSec.Average     0.410000        1555396440
...
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.NetworkOutTotal.Average 93134.000000    1555396500
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.PerDiskReadBytessec.Average     0.000000        1555396440
azure.Microsoft.ComputevirtualMachines.azmon-demo.web01.DataDiskWriteBytessec.Average   0.000000        1555396440

Azure Monitorのメトリックの情報について

リソースタイプ毎の取得可能なメトリックは、以下のページにまとまっています。
実際に利用するときは、こちらを参考にしながらオプションを組み立てていくかたちになると思います。

最後に

azmonは、以前書いたMicrosoft Kubernetes(AKS)/Azure DevOps ワークショップの記事のなかで検討中としていた以下の件の成果物として作りました。

まだ検討段階ですが、Azure APIからアラートやメトリックの情報を取得して、その情報をもとにチェックを行うNagiosプラグインを作る方向で考えています。

ちなみに、開発言語はGoです。実装やデザインについては、mackerel-agent-pluginsmetrinを参考にさせていただきました。

株式会社ハートビーツのインフラエンジニアから、ちょっとした情報をお届けします。