こんにちは。技術開発室の與島です。
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-pluginsやmetrinを参考にさせていただきました。