【PowerShell】Powershellの起動時にログを生成するショートカット作成

はじめに

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になります。
  • 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の外部スクリプト連携にて、監視するとスクリプトの値を監視することができます。

参考文献