5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWSのマネージドサービスをZABBIXで監視する

Last updated at Posted at 2022-03-10

背景

AWS内の監視について、EC2の監視についてはZABBIXサーバを使用している。
マネージドサービス(下記の例だとFSX)の監視についてはCloudWatchを使用している。
メール通知の内容を見やすくするためEventBridgeを挟んでいる。(入力トランスフォーマーを使用)

AWSZABBIX1.png

しかし、これだとマネージドサービスの状態やグラフ確認の際、CloudWatchの画面を参照する必要がある。
下記の様にZABBIXからCloudWatchのAPIをたたいて情報取得すれば、ZABBIXコンソールから一元管理可能となる。

AWSZABBIX2.png

環境

  • Python 3.6.8
  • zabbix_server (Zabbix) 5.0.18

ZABBIXの外部チェックを利用する。外部チェックでシェルスクリプトをキック。
(この際、実行するファイル名に加え、メトリクス名、インスタンスID等を引数として指定する。)
シェルスクリプトからPythonのスクリプトをキックする。
この中でget_metric_statics APIを使用してCloudWatchから値を取得する。

AWSZABBIX3.png

参考

Boto3公式ドキュメント(get_metric_statistics)

手順

事前準備

  • Pythonのインストール
yum install python3
pip3 install boto3
  • IAMロールの設定
    手順は割愛します。CloudWatchにアクセス可能なポリシーを付与したIAMロールを作成してEC2に付与します。
    ZABBIXがオンプレの場合はAWS Configureでアクセスキーを埋め込み。

スクリプト用意

  • 外部ファイルを置く場所に移動
    ZABBIXの設定ファイルの中にパスの記載があります。
cat /etc/zabbix/zabbix_server.conf | grep ExternalScripts
### Option: ExternalScripts
# ExternalScripts=${datadir}/zabbix/externalscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
cd /usr/lib/zabbix/externalscripts
  • Pythonスクリプト準備
    今回はテストでEC2のCPU利用率を取得するスクリプトを作成しました。
    他のマネージサービスについてもパラーメータを変更すれば取得可能です。
cloudwatch.py
import boto3
import datetime
import sys

args = sys.argv
name_space = args[1]
metric_name = args[2]
dimensions = args[3]
dimensions_value = args[4]

def get_metrics(name_space,metric_name,dimensions,dimensions_value):
    client = boto3.client('cloudwatch',
             region_name='ap-northeast-1')

    response = client.get_metric_statistics(
        Namespace = name_space,
        MetricName = metric_name,
        Dimensions = [
             {
            'Name': dimensions,
            'Value': dimensions_value
            },
        ],
        StartTime=datetime.datetime.utcnow() - datetime.timedelta(seconds=600),
        EndTime=datetime.datetime.utcnow(),
        Period = 300,
        Statistics = ['Average']
    )
    response = float(response['Datapoints'][0]['Average'])
    print('{:.3g}'.format(response))

get_metrics(name_space,metric_name,dimensions,dimensions_value)

シェルスクリプトから引数を受取りget_metrics関数を実行します。
関数の中で期間などを指定してCloudWatchから値を取得します。
CPU使用率の小数点以下の桁数が多いので丸めています。
※パラメータ等は公式資料を参照下さい。

  • シェルスクリプト準備
    このシェルをZABBIXの外部チェックで呼び出します。
cloudwatch.sh
python3 /usr/lib/zabbix/externalscripts/cloudwatch.py $1 $2 $3 $4
  • 実行権限付与
chmod 755 cloudwatch.sh

ZABBIX側設定

  • マクロ設定
    アイテムのキーに直接インスタンスIDなどを指定しても良いですが、汎用的な作りにするためにマクロに値を設定します。

AWSZABBIX4.png

マクロ
{$NAME_SPACE1} AWS/EC2
{$METRIC_NAME1} CPUUtilization
{$DIMENSIONS1} InstanceId
{$DIMENSIONS_VALUE1} i-xxxxxxxxxxxxxxxxxxxxxx
  • アイテム設定
    AWSZABBIX5.png

設定する項目(名前などは何でも良いです。)
AWSZABBIX7.png

確認

  • データ取得確認
    「監視データ」⇒「最新データ」から値が取得されていることを確認します。
    AWSZABBIX8.png
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?