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ロール設定します。
- 「Identity and Access Management(IAM)」を開き「ロール」をクリックします。
- 画面右上の「ロールを作成」をクリックします。
- 「EC2」を選択し「次のステップ:アクセス権限」をクリックします。
- 「CloudWatchReadOnlyAccess」を選択(チェック)し「次のステップ:タグ」をクリックします。
- 任意のタグを入力し(未記入でも問題なし)、「次のステップ:確認」をクリックします。
- ロール名を入力し「ロールの作成」をクリックします。
- EC2インスタンス画面で対象インスタンスをクリックします。
- 「アクション」-「セキュリティ」-「IAMロールを変更」をクリックします。
- 先ほど作成したIAMロールを選択し「保存」をクリックします。
- 早くインスタンスへ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での環境設定を記載します。
- PythonファイルをPython2よりPython3へ変換するツールをインストールするため、以下のコマンドを実行します。
yum install 2to3
- 以下のコマンドを実行し、Pythonファイルを実行出来るようにするためのモジュールをインストールします。
pip3 install boto3 pip3 install feedparser
Pythonファイル修正
上記Zabbixサイトの仕組みはCloudWatchから値を取得するため、PythonファイルをZabbixで実行し値を取得する仕組みとなり、githubサイトのPythonファイルを利用しますが、Python3用ではないため、実行出来るよう修正します。
- 以下のgithubサイトよりPythonファイルを入手し、以下の場所に保存します。
githubサイト<https://github.com/tech-sketch/zabbix_aws_template/blob/master/scripts/cloudwatch_zabbix.py>保存場所 /usr/lib/zabbix/externalscripts/
- Zabbixからのファイル実行はzabbixユーザーが実行するため、以下のコマンドを実行し、ファイルのオーナーや権限を変更します。
chown zabbix:zabbix cloudwatch_zabbix.py chmod 755 cloudwatch_zabbix.py
- 入手したPythonファイルをPython3用に変換するため、以下のコマンドを実行します。
2to3 -w cloudwatch_zabbix.py
- 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')
- 「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},』も不要になるため、削除します。
- 以下のgithubサイトよりZabbixテンプレートを入手します。
githubサイト<https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/3.0/cloudwatch_template.xml> - Zabbix Web UIへログインし、左ペイン「レポート」-「テンプレート」をクリックしテンプレート一覧を表示します。
- 画面右上「インポート」をクリックします。
- 「参照」ボタンより入手したZabbixテンプレートを選択し「インポート」をクリックします。インポートに成功すると以下のメッセージが表示されます。
- テンプレート画面に戻り、インポートされたことを確認します。
- テンプレート一覧画面にて、各テンプレートの「ディスカバリ」をクリックします。(画像はEC2インスタンステンプレート修正例)
- ディスカバリルールの名前をクリックします。(画像はEC2インスタンステンプレート修正例)
- キー値より『”-a”,{$KEY},”-s”,{$SECRET},』を削除し「更新」をクリックします。
設定前(画像はEC2インスタンステンプレート ディスカバリルールの修正例)設定後(画像はEC2インスタンステンプレート ディスカバリルールの修正例) - 次に、テンプレート一覧画面にて各テンプレートの「アイテム」をクリックします。(画像はEC2インスタンステンプレート修正例)
- アイテムの名前をクリックします。(画像はEC2インスタンステンプレート修正例)
- キー値より『”-a”,{$KEY},”-s”,{$SECRET},』を削除し「更新」をクリックします。
設定前(画像はEC2インスタンステンプレート アイテムの修正例)設定後(画像はEC2インスタンステンプレート アイテムの修正例) - 他のテンプレート(EBS、ELB、RDS)も同様にキーを設定変更します。
EC2インスタンス監視設定
以下の手順でEC2インスタンスの監視設定します。注意点はテンプレート設定上、ホスト名にインスタンスIDを記載します。インターフェースは設定不要になります。
- 左ペインの「設定」-「ホスト」をクリックしホスト一覧を表示します。
- 画面右上「ホストの作成」をクリックします。
- 「ホスト」タブでは、以下を入力します。
ホスト名:インスタンスID
表示名:わかりやすい表示名など(入力しない場合は「ホスト名」で記載されたインスタンスIDが表示されます)
グループ:任意のグループを指定 - 「テンプレート」タブでは、上記のテンプレートを「選択」をクリックし選択します。
- 「マクロ」タブでは、マクロ欄に「{$REGION}」と入力し、値にはインスタンスのリージョンを記載します。
- 各タブの記載内容に問題なければ「追加」をクリックし、監視ホストを追加します。
- ホスト一覧より、追加されたことを確認します。
※しばらくするとディスカバリルールが実行されアイテム数が増加します。
以上、CloudWatchに登録されているEC2インスタンスのZabbix監視設定の完了となります。
最短でAWSを習得したい方におすすめ!
オンラインスクール「とらくら」
当ブログを運営しているオンラインスクール「とらくら」では、AWSを扱うために必要不可欠な主要サービスの知識を、理論学習だけでなく、環境構築をハンズオン形式で実践できるカリキュラムをご用意しています。
随時、個別の無料説明会を開催しており、講座内容や料金、本講座を受講するメリット・デメリットについてはもちろん、業界に精通しているからこそできるエンジニアのキャリアプランや業界の情勢などを、ざっくばらんにお話します。
些細なことでも、お気軽にご相談ください。
投稿者プロフィール
-
<インフラエンジニア>
■ こんにちは!こんばんわ!「たむ」と申します。製造業からITへ転職し、インフラ、主にサーバ関連をやってきました。IT関連の学校を卒業していませんが、なんとか、サーバ技術者やってます。あっはぃ・・・
最新の投稿
- AWS2022年2月2日Zabbix5でCloudWatch監視設定(AWS RDS)
- Backlog2021年12月20日Backlogの更新をSlackで通知する設定を入れてみた
- AWS2021年12月3日Zabbix5でAWSステータス監視設定
- AWS2021年11月30日Zabbix5でCloudWatch監視設定(EC2インスタンス)