Zabbix5でCloudWatch監視設定(EC2インスタンス)

AWS CloudWatchに登録されているEC2インスタンスをZabbix監視

とらくらのインフラエンジニア、たむです。
EC2インスタンスにZabbixエージェントのインストールが行えなかったり、SNMP設定が実施出来ないなどの設定変更に制限がある場合があり、それでも監視しなければいけない状況があります。その場合、Zabbixサイト「AWS監視テンプレート」に記載されている「CloudWatchのメトリック値を利用してZabbix監視する方法」が有効です。しかし、その記事では使用しているバージョンが古く、現時点で一番サポートが長い「Zabbix 5」では動作しないため、前記事「AWS AmazonLinuxへのZabbixインストール」で構築したZabbix5環境での構築方法を以下記載します。

設定項目

  • IAMロール設定
  • Zabbixサーバーのconfig設定
  • Python環境設定
  • Pythonファイル修正
  • zabbixテンプレート設定
  • zabbixホスト設定

IAMロール設定

EC2インスタンスがCloudWatchへアクセス出来るようにIAMロール設定します。

  1. 「Identity and Access Management(IAM)」を開き「ロール」をクリックします。
  2. 画面右上の「ロールを作成」をクリックします。
  3. 「EC2」を選択し「次のステップ:アクセス権限」をクリックします。IAM role 設定
  4. 「CloudWatchReadOnlyAccess」を選択(チェック)し「次のステップ:タグ」をクリックします。IAM role 設定 policy
  5. 任意のタグを入力し(未記入でも問題なし)、「次のステップ:確認」をクリックします。
  6. ロール名を入力し「ロールの作成」をクリックします。IAM role 設定 作成
  7. EC2インスタンス画面で対象インスタンスをクリックします。
  8. 「アクション」-「セキュリティ」-「IAMロールを変更」をクリックします。EC2ロール設定
  9. 先ほど作成したIAMロールを選択し「保存」をクリックします。IAM role 設定 policy
  10. 早くインスタンスへIAMロールを適用したい場合は、再起動してIAMロールを適用します。

Zabbixサーバーのconfig設定

ZabbixよりCloudWatchへの値取得に時間がかかるため、以下のコマンドでZabbixサーバーのconfigに記載されているTimeout値を変更します。

vi /etc/zabbix/zabbix_server.conf

デフォルトでは482行目の「Timeout」値を「30」秒に変更します。

### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3

Timeout=30

Python環境設定

本記事作成時点のAmazonLinux上ではPython2.7とPython3.7がインストールされていますが、Python2はサポート終了ということで、Python3での環境設定を記載します。

  1. PythonファイルをPython2よりPython3へ変換するツールをインストールするため、以下のコマンドを実行します。
    yum install 2to3
  2. 以下のコマンドを実行し、Pythonファイルを実行出来るようにするためのモジュールをインストールします。
    pip3 install boto3
    pip3 install feedparser

Pythonファイル修正

上記Zabbixサイトの仕組みはCloudWatchから値を取得するため、PythonファイルをZabbixで実行し値を取得する仕組みとなり、githubサイトのPythonファイルを利用しますが、Python3用ではないため、実行出来るよう修正します。

  1. 以下のgithubサイトよりPythonファイルを入手し、以下の場所に保存します。
    githubサイト<https://github.com/tech-sketch/zabbix_aws_template/blob/master/scripts/cloudwatch_zabbix.py>

    保存場所
    /usr/lib/zabbix/externalscripts/
  2. Zabbixからのファイル実行はzabbixユーザーが実行するため、以下のコマンドを実行し、ファイルのオーナーや権限を変更します。
    chown zabbix:zabbix cloudwatch_zabbix.py
    chmod 755 cloudwatch_zabbix.py
  3. 入手したPythonファイルをPython3用に変換するため、以下のコマンドを実行します。
    2to3 -w cloudwatch_zabbix.py
  4. PythonファイルをPython3で実行出来るように、先頭行のShebangを修正します。また、変換だけではプログラム内で値を渡せずエラーとなるため、文字コード指定するよう、行頭の箇所 1行名、173行目より175行目、186行目を修正します。
    vi cloudwatch_zabbix.py

    <1行目修正前>

    #!/bin/env python

    <1行目修正後>

    #!/usr/bin/env python3

    <173~175行目修正前>※173行目空白行

    
    header = struct.pack('<4sBQ', 'ZBXD', 1, len(send_data_string))
    send_data_string = header + send_data_string
    

    <173~175行目修正後>

    b1, b2 = ('<4sBQ'.encode('utf-8'), 'ZBXD'.encode('utf-8'))
    header = struct.pack(b1, b2, 1, len(send_data_string))
    send_data_string = header + send_data_string.encode('utf-8')

    <186行目修正前>

    response += data

    <186行目修正後>

    response += data.decode(encoding='utf-8')
  5. 「cloudwatch_zabbix.py」実行時に以下のファイル「parser.py」も使用します。しかし、こちらも値を渡せずエラーとなるため、文字コード指定するよう110行目の行末に追記します。
    vi /usr/lib64/python3.7/html/parser.py

    <110行目修正前>

    self.rawdata = self.rawdata + data

    <110行目修正後>

    self.rawdata = self.rawdata + data.decode(encoding='utf-8')

Zabbixテンプレート設定

上記Zabbixサイトのリンクにもある以下のgithubサイトにZabbixテンプレートがあり、IAMユーザーのアクセスキーとシークレットアクセスキーを使用して値を取得するキーとなってます。本記事では、上記でIAMロールでインスタンスよりCloudWatchへのアクセス許可設定しているのでIAMユーザー設定は不要になり、ディスカバリルールとアイテムのキー値の『”-a”,{$KEY},”-s”,{$SECRET},』も不要になるため、削除します。

  1. 以下のgithubサイトよりZabbixテンプレートを入手します。
    githubサイト<https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/3.0/cloudwatch_template.xml>
  2. Zabbix Web UIへログインし、左ペイン「レポート」-「テンプレート」をクリックしテンプレート一覧を表示します。
  3. 画面右上「インポート」をクリックします。Zabbixテンプレート一覧
  4. 「参照」ボタンより入手したZabbixテンプレートを選択し「インポート」をクリックします。Zabbixテンプレート インポートインポートに成功すると以下のメッセージが表示されます。Zabbixテンプレート インポート成功メッセージ
  5. テンプレート画面に戻り、インポートされたことを確認します。
  6. テンプレート一覧画面にて、各テンプレートの「ディスカバリ」をクリックします。(画像はEC2インスタンステンプレート修正例)Zabbix cloudwatchテンプレート一覧
  7. ディスカバリルールの名前をクリックします。(画像はEC2インスタンステンプレート修正例)zabbix テンプレート ディスカバリ 名前
  8. キー値より『”-a”,{$KEY},”-s”,{$SECRET},』を削除し「更新」をクリックします。
    設定前(画像はEC2インスタンステンプレート ディスカバリルールの修正例)Zabbixテンプレート ディスカバリルール編集設定後(画像はEC2インスタンステンプレート ディスカバリルールの修正例)Zabbixテンプレート ディスカバリルール編集
  9. 次に、テンプレート一覧画面にて各テンプレートの「アイテム」をクリックします。(画像はEC2インスタンステンプレート修正例)Zabbix cloudwatchテンプレート一覧
  10. アイテムの名前をクリックします。(画像はEC2インスタンステンプレート修正例)Zabbixテンプレート アイテム一覧
  11. キー値より『”-a”,{$KEY},”-s”,{$SECRET},』を削除し「更新」をクリックします。
    設定前(画像はEC2インスタンステンプレート アイテムの修正例)Zabbixテンプレート アイテム編集設定後(画像はEC2インスタンステンプレート アイテムの修正例)Zabbixテンプレート アイテム編集
  12. 他のテンプレート(EBS、ELB、RDS)も同様にキーを設定変更します。

EC2インスタンス監視設定

以下の手順でEC2インスタンスの監視設定します。注意点はテンプレート設定上、ホスト名にインスタンスIDを記載します。インターフェースは設定不要になります。

  1. 左ペインの「設定」-「ホスト」をクリックしホスト一覧を表示します。
  2. 画面右上「ホストの作成」をクリックします。Zabbixホスト一覧
  3. 「ホスト」タブでは、以下を入力します。
    ホスト名:インスタンスID
    表示名:わかりやすい表示名など(入力しない場合は「ホスト名」で記載されたインスタンスIDが表示されます)
    グループ:任意のグループを指定Zabbix ホスト追加
  4. 「テンプレート」タブでは、上記のテンプレートを「選択」をクリックし選択します。Zabbixホスト追加 テンプレート指定
  5. 「マクロ」タブでは、マクロ欄に「{$REGION}」と入力し、値にはインスタンスのリージョンを記載します。Zabbixホスト追加マクロ
  6. 各タブの記載内容に問題なければ「追加」をクリックし、監視ホストを追加します。
  7. ホスト一覧より、追加されたことを確認します。
    ※しばらくするとディスカバリルールが実行されアイテム数が増加します。

 

以上、CloudWatchに登録されているEC2インスタンスのZabbix監視設定の完了となります。

最短でAWSを習得したい方におすすめ!
オンラインスクール「とらくら」

当ブログを運営しているオンラインスクール「とらくら」では、AWSを扱うために必要不可欠な主要サービスの知識を、理論学習だけでなく、環境構築をハンズオン形式で実践できるカリキュラムをご用意しています。

随時、個別の無料説明会を開催しており、講座内容や料金、本講座を受講するメリット・デメリットについてはもちろん、業界に精通しているからこそできるエンジニアのキャリアプランや業界の情勢などを、ざっくばらんにお話します。

些細なことでも、お気軽にご相談ください。



インフラ構築コース、受講生募集中!AWS WordPress環境構築コース、受講生募集中!

投稿者プロフィール

たむ
たむ
<インフラエンジニア>
■ こんにちは!こんばんわ!「たむ」と申します。製造業からITへ転職し、インフラ、主にサーバ関連をやってきました。IT関連の学校を卒業していませんが、なんとか、サーバ技術者やってます。あっはぃ・・・

コメントを残す

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