【Alibaba Cloud】【Cloud Monitor】【Zabbix】Alibaba Cloudの監視サービスCloud Monitor をZabbixと連携する。

はじめに

Cloud Monitorとは中国のクラウドサービスであるAlibaba Cloudを監視するサービスです。 AWSでいうとCloudWatchと同様のサービスです。 ZabbixとCloud MonitorのAPIと連携することで、Zabbix画面上でAlibaba Cloudサービスを監視することができます。 今回はCloud MonitorのAPIを連携するためのスクリプトについて説明します。 最低限必要な情報のみ記載しているため、追加で監視したい場合は適宜追加してください。

事前準備

  • Zabbix構築済み。
  • Cloud Monitor にてサービスを監視済み。
  • Cloud Monitor の権限があるRAMロールを作成済み。

Cloud Monitor API連携スクリプト

#! /usr/bin/env python3
#coding=utf-8
# Alibaba Cloudのモジュールのインポート
from aliyunsdkcore.client import AcsClient
from aliyunsdkcms.request.v20190101.DescribeMetricListRequest import DescribeMetricListRequest

import json

# 監視対象
accessKeyId = 'accessKeyId'
accessSecretKey = 'accessSecretKey'
region = 'region'
instanceId = 'instanceId'

# 監視対象の取得
client = AcsClient(accessKeyId, accessSecretKey, region)

#### Cloud Monitor にリクエスト
request = DescribeMetricListRequest()
request.set_Dimensions("{'instanceId': '" + instanceId  + "'}")
request.set_accept_format('json')

# 監視対象サービス
request.set_Namespace('acs_vpn')
request.set_MetricName('net_rx.rate')

# リクエスト取得
response = client.do_action_with_exception(request)

# 監視項目の値を加工
Datapoint = json.loads(json.loads(response)["Datapoints"])[-1]
DatapointValue = Datapoint["Value"]

print(DatapointValue)

上記を作成し、Zabbixの外部スクリプト連携を行うとZabbixで監視することができます。 Zabbixの外部スクリプトのせっていについては、別の機会に説明したいと思います。 以下に、スクリプトの詳細な説明を記載します。

Alibaba Cloudのモジュールのインポート

from aliyunsdkcore.client import AcsClient
from aliyunsdkcms.request.v20190101.DescribeMetricListRequest import DescribeMetricListRequest

Cloud Monitor と連携するために必要なモジュール群です。環境によってはpip3 installでモジュールをインストールしてください。 また、 v20190101となっているように、バージョンによってはモジュールが動作しない可能性があり、頻繁に変わると思われます。

監視対象

accessKeyId = 'accessKeyId'
accessSecretKey = 'accessSecretKey'
region = 'region'
instanceId = 'instanceId'

事前に作成したRAMユーザーのアクセスキーとシークレットキーを記載してください。 また、リージョンと監視対象のインスタンスIDを記載してください。

Cloud Monitor にリクエストする値の設定

request = DescribeMetricListRequest()
request.set_Dimensions("{'instanceId': '" + instanceId  + "'}")
request.set_accept_format('json')
  • DescribeMetricListRequest()
    Cloud Monitor にリクエストするための変数を格納します。
  • request.set_Dimensions()
    監視インスタンスのIDを設定
  • request.set_accept_format()
    フォーマットを指定します。サンプルではJSONを指定しています。

Cloud Monitor にリクエストする値の設定(監視対象サービスとメトリック)

request.set_Namespace('acs_vpn')
request.set_MetricName('net_rx.rate')
  • request.set_Namespace()
    こちらで監視サービスを設定します。スクリプトの例ではVPN Gatewayです。 対象がECSの場合はacs_vpnacs_ecs_dashboardになります。
  • request.set_MetricName()
    こちらで監視メトリックを設定します。サンプルでは受信の帯域幅を取得しています。 サービスにより様々な値があります。
    監視サービスと監視メトリックを変更する場合はこちらの値を、適宜変更します。
    参考文献のプリセットメトリックのリファレンスを元に値を決めてください。

リクエスト取得

response = client.do_action_with_exception(request)

上記で、設定した値でCloud Monitor から値を取得します。

監視項目の値を加工

Datapoint = json.loads(json.loads(response)["Datapoints"])[-1]
DatapointValue = Datapoint["Value"]

print(DatapointValue)

リクエストした値には様々な値が格納されているためDatapointsのみ出力し、[-1]で最新の値のみを取得しています。
また、Valueのみ取得し、printで出力します。

さいごに

上記のスクリプトをZabbixの外部スクリプト連携にて、監視するとスクリプトの値を監視することができます。 Cloud Monitor のリクエストにセットする値はタイムスタンプなど、ほかにも様々な値があります。
参考文献のDescribeMetricListをもとに値を決めてください。

参考文献