ZabbixでAWSを監視する方法
~スクリプトによる外部チェック利用時のTips編~

オンプレミスのクラウド化に伴い、特に豊富な導入事例を持つAmazon Web Services(アマゾン ウェブ サービス、以降AWSと略す)への移行を目指す企業が増加しています。
AWS上に構築したシステムの監視に用いられるツールとして、AWSが提供する監視サービスである「Amazon CloudWatch(アマゾン クラウドウォッチ、以降CloudWatchと略す)」が有名ですが、既存の運用オペレーションを活用するために、オンプレミスで使っていた監視ツールをそのまま継続利用するケースも多いかと思います。しかしながら、既存の監視ツールでAWSを監視するには困難なことも多いです。
そこで、本記事では、オンプレミスの監視でメジャーな「Zabbix(ザビックス)」を既存の監視ツールとして取り上げ、Zabbixエージェントでは監視ができないSaaSやPaaSも監視可能にする方法として、

  • Zabbixのスクリプトによる外部チェック機能を用いたAWSの監視方法

についてご紹介します。
なお、本タイトルは2本立てとなっており、今回は「スクリプトによる外部チェック利用時のTips編」です。ZabbixでAWSを監視する方法の概要については「ZabbixでAWSを監視する方法 ~メリット・デメリット解説編~」で解説します。

本記事はこんな方にお勧めします

  • Zabbixの外部チェックを使ってみたい
  • スクラッチ開発のTipsを知りたい

ご注意
本記事では、Zabbixの外部チェック機能を用いた解説に必要なShellおよびPythonを利用したスクリプトが登場します。ShellおよびPythonの文法に関する解説は専門の書籍やウェブページなどをご覧ください。

1. 外部チェックの基本的な使い方

Zabbixの外部チェック機能を利用して、AWSを監視する方法についてご紹介します。なお、本記事ではZabbixのv5.0.26を利用した解説を行っております。バージョンの差異によって操作に多少の違いが発生する可能性がありますが、あらかじめご了承ください。

外部チェックとは

外部チェックは、Zabbixの監視アイテムにおける1つのタイプで、Zabbixサーバーがシェルスクリプトやバイナリーといった任意のコマンドを実行し、コマンドが出力した結果を監視アイテムの値として使用することができる機能です。外部チェックでは、Zabbixサーバーが定期的にコマンドを実行することで監視を行うため、監視対象の機器やサービスにZabbixエージェントを導入する必要がありません。

Zabbixサーバーがシェルスクリプトやバイナリーといった任意のコマンドを実行して監視

簡単なスクリプトによる利用例

外部チェック用のスクリプトを作成する

外部チェックで実行させるスクリプトを作成します。今回は簡単な例として、hostnameコマンドの実行結果を返すShellスクリプトを、hostname.shという名前で作成します。

ソースコード1

外部チェック用のスクリプトを配置する

作成したスクリプトは、externalscriptsディレクトリーの下に配置する必要があります。作成したhostname.shを配置します。
なお、externalscriptsディレクトリーのパスは、デフォルトでは/usr/lib/zabbix/externalscripts/となりますが、/etc/zabbix/zabbix_server.conf内の設定で変更することができます。
本記事では、ディレクトリーパスは/usr/lib/zabbix/externalscripts/として説明します。

ソースコード2

また、Zabbixはデフォルトでzabbixユーザーでスクリプトを実行するため、zabbixユーザーに権限を与える必要があります。以下のコマンドを実行して、スクリプトの実行権限を与えます。

ソースコード3

スクリプトを実行する監視アイテムを作成する

スクリプトを実行するZabbixの監視アイテムを作成します。

  • 「設定」メニューから「ホスト」を選択して開いた画面で、「ホストの作成」をクリックします。
    「ホストの作成」をクリック
  • 「ホスト名」と「グループ」を設定して、「追加」をクリックします。
    • ホスト名:任意
    • グループ:任意
    「ホスト名」と「グループ」を設定して「追加」をクリック
  • ホストが追加されたら、「アイテム」をクリックします。
    追加されたのを確認して「アイテム」をクリック
  • 「アイテムの作成」をクリックします。
    「アイテムの作成」をクリック
  • 「名前」、「タイプ」、「キー」、「データ型」を設定して、「追加」をクリックします。
    • 名前:任意
    • タイプ:外部チェック
    • キー:hostname.sh[]
    • データ型:文字列
    「名前 / タイプ / キー / データ型」を入力して「追加」をクリック
  • これで監視アイテムが追加されました。
    監視アイテムが追加されたのを確認

監視アイテムの値を確認する

外部チェックにより取得されるデータを確認します。

  • 「監視データ」メニューから「最新データ」を選択して開いた画面で、上記で作成したホストを選び、「適用」をクリックします。
    作成したホストを選んで「適用」をクリック
  • hostnameコマンドの実行結果が取得できています。今回の例では、Zabbixサーバー上でhostnameコマンドを実行した結果として、「zabbix-server」という文字列が取得できました。
    hostnameコマンドの実行結果を確認

ここまでが、外部チェックの基本的な使い方です。

2. 外部チェックでAWSを監視する方法

それでは、外部チェックを使ったAWSの監視を試してみましょう。考え方は、「スクリプト内でAWSのAPIを実行し、監視したいデータを取得する」です。

AWSを監視する場合はスクリプト内でAWSのAPIを実行して監視したいデータを取得

事前準備

本記事では、Pythonを使用したスクリプトを作成します。PythonでAWSのAPIを実行するために必要なライブラリー(boto3)をインストールします。

ソースコード4

スクリプトの作成から配置・確認までの一連の流れ

スクリプトを作成する

AWSを監視するスクリプトの例として、指定したAmazon Elastic Compute Cloud (以降、EC2と略す)インスタンスの起動状態(pending、running、 terminatedなど)を取得するスクリプトを作成します。下記のスクリプトを、aws_ec2.pyという名前で作成します。

備考
HTTP_PROXY、HTTPS_PROXYは、プロキシー下で動作させる場合など、必要に応じて設定します。

ソースコード5

このスクリプトは、引数に、AWSのAPIを実行するためのキー情報(アクセスキー・シークレットキー)とリージョン、EC2インスタンスのIDを渡して実行することで、該当するEC2インスタンスの起動状態を出力します。

備考
本記事では、説明の都合上、AWSへの接続方法としてアクセスキー・シークレットキーを用いていますが、セキュリティの観点からAWS Identity and Access Management(IAM)ロールの利用など別の接続方法を推奨します。

スクリプトを配置する

「外部チェック用のスクリプトを配置する」と同様に、作成したスクリプトを指定ディレクトリーに配置します。

ソースコード6

スクリプトの実行権限も同様にzabbixユーザーに与えます。

ソースコード7

監視アイテムを作成する

「スクリプトを実行する監視アイテムを作成する」と同様に、監視アイテムを作成します。

  • ホストを作成します。
    • ホスト名:任意
    • グループ:任意
    ホスト名の入力とグループを選択して「追加」をクリック
  • アイテムを作成します。
    • 名前:任意
    • タイプ:外部チェック
    • キー:aws_ec2.py["アクセスキー","シークレットキー","リージョン","インスタンスID"]

      ご注意
      引数は正しいものに置き換えてください

    • データ型:文字列
    名前とキーを入力しタイプとデータ型を選択して「追加」をクリック

監視アイテムの値を確認する

  • 「監視データ」メニューから「最新データ」を選択して開いた画面で、上記で作成したホストを選び、「適用」をクリックします。EC2インスタンスの起動状態(今回の例では「runnning」)が取得できています。
    ホストを選び「適用」をクリックして監視アイテムの値を確認

起動状態の変化を通知する

EC2インスタンスの起動状態が「stopped」になった場合に通知するようにします。

  • 作成したホストの「トリガー」をクリックします。
    作成したホストの「トリガー」をクリック
  • 「トリガーの作成」をクリックします。
    「トリガーの作成」をクリック
  • 「名前」、「深刻度」を設定します。「条件式」の「追加」ボタンをクリックします。
    • 名前:任意
    • 深刻度:任意
    「名前 / 深刻度」を設定して「条件式」の「追加」ボタンをクリック
  • トリガー条件式の「アイテム」、「関数」、「V」、「結果」を設定し、「挿入」をクリックします。
    • アイテム:上記で作成したアイテム
    • 関数:regexp()
    • V:stopped
    • 結果:= 1
    「アイテム / 関数 / V / 結果」を設定して「挿入」をクリック
  • 「追加」をクリックします。
    「追加」をクリック

通知を確認する

該当するEC2インスタンスを停止した後、以下の手順で確認します。

  • 「監視データ」メニューから「障害」を選択して開いた画面で、起動状態の変化が通知されていることを確認します。
    起動状態の変化が通知されていることを確認
  • 「監視データ」メニューから「最新データ」を選択して画面で、EC2インスタンスの起動状態が「stopped」になっていることを確認します。
    EC2インスタンスの起動状態が「stopped」になっていることを確認

以上で、外部チェックを使ったAWSの監視ができました。
今回は、EC2インスタンスの起動状態の監視という簡単な例でご説明しましたが、AWSのAPIとZabbixを連携して監視を行うための基本的な手法をご理解いただけたかと思います。この手法を応用すれば、CloudWatchの監視メトリクスをAPIで取得し、Zabbixで監視することも可能です。

3. 外部チェックによるAWS監視の注意点

ここまでで、外部チェックを使ったAWS監視の手法を簡単に説明しましたが、実用に際しては、下記の事柄に注意する必要があります。

  • AWS側の仕様変更への追随が必要
  • AWSの新たなサービスを利用・監視したい場合に、スクリプトの改修が必要
  • プログラミング知識や実装工数が必要

詳細は「ZabbixでAWSを監視する方法 ~メリット・デメリット解説編~」の「外部チェックによるAWS監視の注意点」をご覧ください。

4. まとめ

本記事では、

  • Zabbixの外部チェック機能を用いたAWSの監視方法

について紹介しました。AWSの監視ツール・監視方式の検討、Zabbix監視の実践等に役立てていただければ幸いです。また、富士通では「Systemwalker Centric Manager Open監視強化テンプレート」を提供しています。
本製品は、

  • Zabbixを内包しており、Zabbixを使い慣れた方であれば簡単に利用できます。
  • AWS監視のためのスクリプトを提供しているためスクラッチ開発は不要です。
  • 当社がサポートすることでAWSの仕様変更やサービス追加にも対応します。さきほど過去の実例とした挙げたAmazon リソースネーム(ARN)形式の変更があった際も当社で対応しました。

こちらもぜひ、ご検討ください。

こちらもおすすめ

日々のビジネスに欠かせないICTインフラを、いかに安心かつ安全、効率的に運用するかは、今後のビジネスの成長を左右します。DXやクラウド導入により、ICTインフラが変化する今、運用を見直すチャンスです。

「Systemwalker Centric Manager」を導入すれば、クラウド監視サービスと連携できるので、IaaS / PaaS / オンプレミスの一元監視が可能です。拡張・変化するシステム環境に柔軟かつ統合的に対応できる運用監視の実現により、運用担当者は苦労することなく、システムの安定稼働に注力できます。

解決への次のステップ

【無料オンラインデモ 申し込み受付中】柔軟なクラウドと堅牢なオンプレミスのハイブリッドシステムをうまく運用するポイントとは?

クラウドのIaaS/PaaSサービスおよびオンプレミスを一元的に監視、調査できる統合監視ソフト(Systemwalker Centric Manager)の無料オンラインデモの申し込み受付中。
ビル街,ノートPCを手に空を見上げる男性

よろず相談会(無料)

クラウドでのシステムトラブルにお悩みではありませんか?気軽に相談いただける「よろず相談会」を行っています。
ノートPCにはしごをかけたり大きな虫眼鏡でのぞく小人のイラスト

ICTシステム監視の運用はクラウド化に素早く柔軟に対応できますか?

ライフサイクル管理ソフトウェア「Systemwalker Centric Manager」の特集記事を掲載。DXのカギを握るクラウドとオンプレミスのハイブリッド環境を監視・運用する方法について解説します。
クラウドシステムを双眼鏡でのぞく男性のイラスト

備考
Zabbixはラトビア共和国にあるZabbix LLCの商標です。
Amazon Web Services、AWS、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon CloudWatchは、Amazon.com, Inc. またはその関連会社の商標です。
記載されている会社名、システム名、製品名、サービス名などの固有名詞は一般に各社の登録商標または商標です。
Pythonは,Python Software Foundationの登録商標です。
また、本文および図表中に記載されている会社名、システム名、製品名、サービス名などには必ずしも「TM」、「®」を付記しておりません。

関連情報

ガラス張りのオフィスで仕事をする人々のグループ。

クラウド上のシステム運用にお悩みの方必見!

システムを安定稼働させるためには、システムの可用性、状態監視、業務運用管理が重要なポイントになりますが、従来のオンプレミスとクラウドとで設計や運用は異なるのでしょうか。重要なポイントは変わりませんが、クラウドの機能・特徴を意識した設計や運用が必要です。
特集「クラウド運用管理」ではクラウド運用の基本的な考え方を解説するとともに、システムを安定稼働させる方法についてわかりやすくご紹介します。