Zabbix 6.2で追加されたAWS Amazon EC2監視テンプレートの使用方法

2022年12月20日Amazon Web Services,AWS EC2,Zabbix

こんにちは!プラットフォーム技術部の小羽根陸です。

前回の記事では、Zabbixテンプレートの使用方法を紹介しました。今回は、2022年5月にリリースされたZabbix 6.2で追加されたAWSのAmazon EC2を監視するテンプレートがとても便利だと感じたため使用方法を紹介します!

今までAWSを含むクラウドサービスをZabbixで監視する際は、シェルスクリプトを自前で作成し、Zabbixから実行して監視データを取得していました。今回追加されたEC2監視テンプレート内には、JavaScriptが用意されているため、ユーザーがシェルスクリプトを作成する必要がなく簡単に監視できるようになりました。

LTS版を使用している方は、Zabbix 7.0 LTSのリリース(2023年第2四半期予定)をお待ちください。(2023年1月16日追記:Zabbix 6.0.13 LTSのリリースに含まれることになりました。詳しくはこちら。)

AWS Amazon EC2監視テンプレートの説明

今回は、EC2監視テンプレートとして「AWS EC2 by HTTP」を使用します。EC2用のホストにテンプレートをリンクすることで、EC2インスタンスとインスタンスにアタッチされているEBSボリュームのメトリクス、およびインスタンスのアラームをCloudWatch API経由で取得できます。

「AWS EC2 by HTTP」テンプレートでは、以下のアイテム内でJavaScriptを使用し、複数のメトリクスデータを収集します。

  • AWS CloudWatch: Get instance alarms data
  • AWS EBS: Get volumes data
  • AWS EC2: Get metrics data
  • AWS EBS: [“{#VOLUME_ID}"]: Get metrics

上記アイテムで一括取得した値を「依存アイテム」として、別アイテムに引き継ぎ「保存前処理」機能で必要な値だけを抽出します。アイテム個々で監視対象にデータ収集するのと比べて、マスターアイテムとして1度で複数の値を取得しているため、監視対象へのアクセス頻度が減り、Zabbixサーバーの負荷を軽減できます。イメージとしては下図の通りです。

依存アイテム説明

「AWS EC2 by HTTP」テンプレートでは、依存アイテムに値を引き継ぐ用途のマスターアイテムは、DBの容量を圧迫させないために、「保存前処理」機能を使用して取得した値を破棄しています。そのため、Zabbixフロントエンドから「最新データ」を確認すると値を取得していないように見えます。

マスターアイテムの値破棄

また、冒頭でも記載しましたが、テンプレート内にEC2のリソースを監視するJavaScriptが用意されました。今までは、監視対象EC2が多ければ多いほど実行するスクリプトが増加し、プロセス起動負荷がものすごくかかっていましたが、Zabbixサーバープロセスであるpoller内のJavaScriptエンジンで実行されるようになったため、プロセス起動負荷の軽減に繋がっています。

監視対象のインスタンスにアタッチされているEBSボリュームはZabbixのディスカバリルール機能で、自動検出してアイテムとトリガーを作成してくれます。

AWSテンプレートの使用方法

ここからは、ZabbixならびにAWSの設定方法について説明します。

事前に準備するもの

  • Zabbix 6.2以降の環境
  • AWSアカウント
  • 監視対象のAmazon EC2

「AWS EC2 by HTTP」テンプレートを使用するには、Zabbix 6.2以降のバージョンが必須です。Zabbix 6.0以前の環境だと、JavaScriptエンジンに値をハッシュ化するhmac関数が未実装のため、テンプレート内に用意されているJavaScriptが動作しません。(2023年1月16日追記:Zabbix 6.0.13 LTSのリリースでhmac関数が実装され、テンプレート内に用意されているJavaScriptが動作するようになりました。詳しくはこちら。)

Zabbix 6.2.2以前の環境はテンプレートの最新化が必要

Zabbix 6.2.0のテンプレートだと一部アイテムの「保存前処理」で値を抽出する箇所にバグがあり取得できません。また、Zabbix 6.2.1のテンプレートでは一部アイテムが値の取得に失敗するバグがあります。バグについてはZabbixサポートページにチケットが作成されていますので、興味のある方はご確認ください。

上記バグはZabbix 6.2.3で修正されているため、6.2.2以前をお使いの方はテンプレートを最新化する必要があります。余談ですが、今回の記事はZabbix 6.2.0で作成していたため、アイテム値取得が失敗する原因を調査するのに時間がかかりました・・・。

Zabbixの開発がおこなわれているGitHubを確認したところ、Zabbix 6.4.0以降では上記バグは修正されているため、テンプレートを最新化する必要はありません。そのためZabbix 6.2.0 ~ 6.2.2以外を使用の方は、本記事内のAWSの設定に進んでOKです。

Zabbix 6.2.0 ~ 6.2.2の環境をお使いの方は以下リンクから最新のテンプレートをダウンロードします。

Zabbix 6.2 AWS_EC2_HTTPテンプレート

ダウンロードが完了したら、用意したZabbixにテンプレートをインポートしていきます。Zabbixフロントエンドにアクセスして、メインメニューから【設定】→【テンプレート】の順に押下します。

Zabbixフロントエンド

テンプレートの一覧から「インポート」を押下します。

Zabbixテンプレート一覧

Zabbix 5.4以前は既存のテンプレートを上書きしたくない場合、リネームして上書きされないように対応していました。Zabbix 5.4からはテンプレートがUUIDで管理されるようになったため、UUIDが同じ場合は、テンプレート名が異なっていても上書きされてしまいます。そのため「AWS EC2 by HTTP」テンプレートが上書きされて困る場合は、事前にエクスポートしておくことをおすすめします。

「ファイルを選択」を押下して先ほどダウンロードをしたyamlファイルを選択し、「インポート」を押下します。

Zabbixインポート

Zabbix 5.4からインポート時に差分が表示されるようになりました。赤背景が変更前の内容、緑背景が変更後の内容です。問題なければ、再度「インポート」を押下します。

Zabbixインポート差分確認

インポートが成功した場合は、「インポートに成功しました」と表示されます。

Zabbixインポート成功

テンプレートを確認できたらインポート完了です。

AWSの設定

まずはAWS側の設定をおこないます。EC2メトリクスを収集するために必要なIAMポリシーとIAMユーザーを作成します。

IAMの設定

AWSマネジメントコンソールにログインして、「IAM」を押下します。

AWSポータル画面

画面が遷移した後に「ポリシー」を押下します。

AWS IAMダッシュボード画面

「ポリシーを作成」を押下します。

AWS ポリシー画面

ポリシーの作成画面が表示されるので「JSON」タブを選択します。

AWS ポリシー作成画面

JSONコードの入力画面が表示されます。

AWS ポリシー作成 JSON入力画面

以下のJSONコードをコピーして、入力画面に貼り付けます。

{
    "Version":"2012-10-17",
    "Statement":[
        {
          "Action":[
              "cloudwatch:Describe*",
              "cloudwatch:Get*",
              "cloudwatch:List*",
              "ec2:Describe*"
          ],
          "Effect":"Allow",
          "Resource":"*"
        }
    ]
  }

入力画面に貼り付けたら「次のステップ:タグ」を押下します。

AWS ポリシー作成 JSON入力後画面

タグは必要に応じて設定してください。今回の記事ではタグは追加せず設定を進めます。

「次のステップ:確認」を押下します。

AWS ポリシー作成 タグ追加画面

IAMポリシーの名前、説明を入力します。

AWS ポリシー作成 ポリシー確認画面2

下にスクロールして「ポリシーの作成」を押下します。

AWS ポリシー作成 ポリシー確認画面3

IAMポリシーの作成が成功した場合は、作成したIAMポリシーの名前が表示されます。

AWS ポリシー作成画面

次にIAMユーザーを作成します。サイドバーにある「ユーザー」を押下します。

AWS IAM画面

「ユーザーを追加」を押下します。

AWS ユーザー一覧画面

ユーザー名を記載して、「アクセスキー-プログラムによるアクセス」にチェックをいれます。

その後に「次のステップ:アクセス権限」を押下します。

AWS ユーザーを追加 ユーザー詳細の設定画面

アクセス許可の設定画面に遷移するため、「既存のポリシーを直接アタッチ」を選択後に、先ほど作成したポリシーを選択して「次のステップ:タグ」を押下します。

「ポリシーのフィルタ」から検索することでスムーズに作成したポリシーを見つけられます。

AWS ユーザーを追加 アクセス許可の設定画面

必要に応じてタグの追加をおこないます。今回の記事ではタグを追加せず「次のステップ:確認」を押下して先に進めています。

AWS ユーザーを追加 アクセス許可の設定画面

入力した内容に間違いがなければ「ユーザーの作成」を押下します。

AWS ユーザーを追加 確認画面

成功と表示されていれば、ユーザーの作成は完了です。

ユーザーを作成した際に表示される「アクセスキーID」と「シークレットアクセスキー」後にZabbixの設定で使用するため控えておいてください。「.csvのダウンロード」を選択することでファイルとして保存できます。

このページを閉じてしまうと、「シークレットアクセスキー」の確認はできなくなります

AWS ユーザーを追加 追加成功画面

「シークレットアクセスキー」を控え忘れた場合は、再度アクセスキーを作成する必要があります。

アクセスキーの再作成

この手順は「シークレットアクセスキー」を控え忘れた場合のみ実施してください。「シークレットアクセスキー」を控えている場合は、この手順を飛ばしてください。

それでは、アクセスキーを再発行していきます。先ほど作成したユーザーを選択します。

AWS ユーザー選択

「認証情報」タブを選択します。

AWS ユーザー認証情報確認

「アクセスキーの作成」を押下します。

AWS アクセスキーの作成

新たにアクセスキーが発行されるため、「アクセスキーID」と「シークレットアクセスキー」を控えておきましょう。

AWS アクセスキーの作成成功画面

新たにアクセスキーを発行したため、使用しないアクセスキーは削除します。

削除するためには一度無効化する必要があるため、「無効化」を選択します。

AWS ユーザーを追加 アクセス許可の設定画面

「無効化」を押下します。

AWS アクセスキーの非アクティブ化

「×」を押下します。

AWS アクセスキー削除

削除するかを確認されるため、赤枠にアクセスキーIDを入力後に「削除」ボタンを押下します。

AWS アクセスキー削除画面

削除されたことを確認します。

AWS アクセスキー削除確認

EC2の確認

監視対象のインスタンスIDとリージョン情報が必要なため確認していきます。AWSマネジメントコンソールにログインして、「EC2」を押下します。

AWSポータル画面

画面が遷移した後にサイドバーの「インスタンス」を押下します。

AWS EC2メニュー

監視したいインスタンスを選択して、表示されたインスタンスIDをコピーします。インスタンスIDは、後にZabbixの設定で使用するため控えておいてください。

AWS EC2一覧 インスタンスID

次に監視するEC2インスタンスが起動しているリージョンのコードを確認します。

AWS EC2一覧 リージョン

今回の記事では、東京リージョンにEC2インスタンスを構築しているため、リージョンコードである「ap-northeast-1」を控えておきます。

AWS EC2一覧 リージョン一覧

Zabbixの設定

続いてZabbixの設定をおこないます。Zabbixの設定では、監視したいAWS EC2用のホスト作成、EC2監視テンプレートを作成したホストにリンク、そしてテンプレートに含まれている設定をおこないます。

まずホストを作成するため、メインメニューから【設定】→【ホスト】の順で押下します。

Zabbixフロントエンド画面

「ホストの作成」を押下します。

Zabbix ホスト作成

ホスト作成画面が表示されるため、以下内容を入力または選択します。

  • ホスト名:任意のホスト名を入力
  • テンプレート:「AWS EC2 by HTTP」を選択
  • ホストグループ:任意のホストグループを選択

Zabbix 5.0までホストを作成する際は、インターフェース設定は必須項目でしたが、Zabbix 5.2からインターフェースの設定は未設定でホストが作成できるようになりました。

Zabbix ホスト情報入力

次にマクロの設定をおこないます。マクロとは指定した文字列(変数名)を指定した値に自動で置き換えてくれる機能です。

テンプレートに登録されているマクロを編集するためには「継承したマクロとホストマクロ」を選択します。

Zabbix ホスト作成 マクロ設定

以下のマクロを設定するために、「変更」を選択して本記事内のAWSの設定で控えておいた値を記載します。

  • {$AWS.ACCESS.KEY.ID}:作成したAWSユーザーのアクセスキーID
  • {$AWS.EC2.INSTANCE.ID}:監視するEC2のインスタンスID
  • {$AWS.REGION}:監視するEC2インスタンスが起動しているリージョンコード
  • {$AWS.SECRET.ACCESS.KEY}:作成したAWSユーザーのシークレットアクセスキー
Zabbix ホスト作成 マクロ値入力

マクロの値を入力後に、下にスクロールして「追加」を押下する。

Zabbix ホスト作成 マクロ設定追加

ホストが作成されていることを確認する。

Zabbix ホスト作成確認

【監視データ】→【最新データ】から最新データを確認して、値が取得できていたら成功です。

Zabbix 最新データ

一部、値が取得できないアイテムがある恐れがあります。その場合は「?」を選択することでアイテムの説明が確認することができるので、確認してみましょう。

Zabbix 最新データ アイテム説明確認

今回の記事で確認したアイテムはIOPS SSDボリュームのみ取得できるアイテムと記載されていました。今回監視対象のEC2にはgp2ボリュームのみアタッチしていたため、値が取得できていなかったようです。

他にも、Nitroベースのインスタンスでないと取得できないアイテムや、本記事内のAWS Amazon EC2監視テンプレートの説明で記載した通り、マスターアイテムは値を破棄しているため、最新の値は空白になります。

まとめ

AWSのAmazon EC2監視テンプレート使用方法について紹介しました。

今回の記事を書き始めた時は、AWSのEC2監視テンプレートのみ実装だったのですが、Zabbix 6.2.2からは以下に記載したテンプレートが追加されており、AWSのRDSやS3、さらにAzureの監視も容易にできるようになっています。

  • AWS by HTTP
  • AWS RDS instance by HTTP
  • AWS S3 bucket by HTTP
  • Azure by HTTP

今後クラウドサービスの監視テンプレートが多く追加されていくと思います。すでにオンプレはZabbixで監視しているけどクラウド対応が今一つで、と他の監視ソリューションを検討されている皆さん、ぜひエンハンスに注目しお試しください。

Zabbixをさらに有効活用しAWSやAzureなどクラウド環境も含めた統合監視を実現したい、テンプレート提供されていないクラウドリソースの監視を実装したい、など課題や要望を抱えている皆様、ぜひ当社の「Zabbixサポートプラス」や「監視設定代行・支援」サービスをご検討ください。まずはお気軽にご相談を。

アークシステムは Zabbix Japan LLC の認定パートナー企業です。 当社はZabbixバージョン1.1の時代から監視ソリューションの活用を進め、Zabbixに関する製品・サービスの販売に加え、Zabbix関連サービスの提供を行っています。

Zabbixに関するお問い合わせはこちらからお願いいたします。

  • 株式会社アークシステムの予約・来訪管理システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix