ZabbixからAzureリソースを監視してみた-LoadBalancer編

こんにちは。技術部の髙岡です。

前回のブログで、Azure内のLinuxサーバをZabbixから監視する方法を検証してみましたが、LinuxサーバであればZabbixエージェントをインストールすることができるので、わざわざスクリプトを作り込まなくても、CPU使用率等のリソース情報を取得して監視することが可能です。あまり、有り難みのない事例だったと思います。

ZabbixエージェントをインストールできないPaasやSaasのようなクラウドサービスを監視するのであれば、有り難みのある事例となるのではないかと思いました。
そこで、今回は、ZabbixエージェントをインストールできないAzure Load BalancerのリソースをZabbixから監視する事例を紹介します。
方式は前回のLinuxサーバの監視と同様で、Azure Monitorから監視メトリックの情報を取得するライブラリを使ったPythonスクリプトを実行して、Zabbixの外部チェック機能で取り込んで監視します。

やりたいことlb2

Azure Load Balancerの任意の監視項目をAzure Monitorから取得するスクリプトを実行します。
例として、ByteCount(送信バイト数)を取得してZabbixで監視してみます。

設定方法

前回のブログで記載した方法と同じ要領です。

Azure Load Balancerの送信バイト数を取得するPythonスクリプトの作成

#! /usr/bin/env python

import datetime
from azure.mgmt.monitor import MonitorManagementClient

subscription_id = 'a2b379a4-5530-4d43-9360-b705cf560d75'
resource_group_name = 'test-ttakaoka'
# ロードバランサーのリソース名称を指定します。
vm_name = 'ttakaoka-lb-standard-test'

resource_id = (
    "subscriptions/{}/"
    "resourceGroups/{}/"
    "providers/Microsoft.Network/loadBalancers/{}"
).format(subscription_id, resource_group_name, vm_name)

# サブスクリプション認証を使います。
from azure.common.credentials import ServicePrincipalCredentials
# テナントIDを指定します。
TENANT_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
# サービスプリンシパルのアプリケーションIDを指定します。
CLIENT = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
# サービスプリンシパルのクライアントIDのパスワードを指定します。
KEY = 'xxxxxxxxx'
credentials = ServicePrincipalCredentials(
    client_id = CLIENT,
    secret = KEY,
    tenant = TENANT_ID
)

client = MonitorManagementClient(
    credentials,
    subscription_id
)

today = datetime.datetime.now()
nexttime = today - datetime.timedelta(minutes=1)

metrics_data = client.metrics.list(
    resource_id,
# 監視データを取得する期間を1分と指定します。
    timespan="{}/{}".format(nexttime, today),
# 監視項目を指定します。
# リソース毎に使用可能な監視項目
# https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/metrics-supported
    interval='PT1M',
    metricnames='ByteCount',
# 1分間の合計を取得します。
    aggregation='Count'
)

for item in metrics_data.value:
    for timeserie in item.timeseries:
        for data in timeserie.data:
            print("{}".format(data.count))

このスクリプトを実行した結果です。

# ./azure-mon-lb.py
10

スクリプト実行で取得した送信バイト数をZabbixで監視する設定

前回のブログと同様に、Zabbixの外部チェック機能を活用します。
スクリプトを実行するホストがZabbixサーバ自身なのでIPアドレスとして「127.0.0.1」を指定しますが、
Zabbixが識別するホスト名としてはAzure上のリソースであることがわかるような名前「azure-lb-01」を指定します。

ホストの登録
ホストの設定lb

監視アイテムの登録
アイテムの設定lb

AzureとZabbixでの監視結果の比較

Azure Monitorでの表示
Azureのグラフlb

Zabbixでの表示
zabbixのグラフlb

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です