3
0

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.

IBM Cloud:Cloud メンテナンス通知をZabbix Serverへ転送する

Last updated at Posted at 2022-12-12

概要

IBM CloudではCloudのメンテナンス通知をメールで受信することができます。一方でオンプレ等の監視にZabbixを利用している方の中には、Cloud通知も一括でZabbixで管理したい方がいるかもしれません。

本記事では、Event Notification・IBM Cloud Functionsを利用し、Cloud通知をZabbixへ転送する方法を記載します。

検証構成

今回は以下の構成で検証しています。
構成.png
Event Notificationは2022年12月現在、以下のリージョンのみで提供されています。

  • ダラス(us-south)
  • ロンドン(eu-gb)
  • シドニー(au-syd)
  • フランクフルト(eu-de)

Zabbix Serverの設定

Zabbix Serverのインストール

こちらに従い「Ubuntu Linux 22.04 LTS」にインストールしました。
Zabbix Server 6.0 を、Ubuntu 20.04にインストール

zabbix trapperの設定

「設定」->「ホスト」を選択し、対象サーバーの「アイテム」をクリックします。
image.png

タイプを「Zabbixトラッパー」を選択して保存します。
Screen Shot 2022-12-13 at 0.31.39.png

PythonによるZabbixへの転送コード作成

今回はzabbixが提供している「zabbix sender」機能を使用します。zabbix senderは、zabbix server内で作成したzabbix trapperを指定して、希望のデータをpushすることができます。
またコマンドとしても提供されており、yum install zabbix-senderでインストール可能です。
本記事ではコマンドではなくプログラム内にsenderを組み込み自動化したいので、pythonのpy-zabbixライブラリを用いて、Event Notificationsからzabbixへ転送するコードを書きます。

pythonのバージョンは以下の通りです。

$ python3 --version
Python 3.10.8

以下、転送プログラムです。
functionsでは受信したデータをparamに格納してmain()を実行します。
paramはデバッグも考慮して分岐させています。

from pyzabbix import ZabbixMetric, ZabbixSender

HOST = "[zabbix host名]"
KEY = "[zabbixの設定Key名]"
PORT = [zabbixの待ち受けポート]   # デフォルトは "10051"
ADDRESS = "[宛先IPアドレス]"


def sendto_zabbix(param):
    metrics = []
    mtrc = ZabbixMetric(HOST, KEY, param)
    metrics.append(mtrc)
    zbx = ZabbixSender(ADDRESS)
    zbx.send(metrics)


def main(param):   # "param"にEvent Notificationsからの転送イベント内容が格納
    if param:
        sendto_zabbix(param)
        return { 'massage': param }
    else:
        return { 'message': 'No massage' }   # Cloud Functionsでのデバグ用

IBM Cloud Functionsの作業

IBM Cloud Functionsの作成

上部タブにて「Event Notifications」で検索、または以下よりオーダーします。
https://cloud.ibm.com/catalog/services/event-notifications

Namespaceを新規作成する場合は、
左タブ「Namespace setting」をクリック -> 上部の" ^ "をクリック -> 「Create Namespace」をクリックします。

名前とリージョンを選択し「Create」をクリックします。

コードをIBM Cloud Functionsへアップロード

IBM Cloud Functionsでは、実行コードと一緒に外部パッケージをzip化・アップロードすることで使用することが出来ます。
本記事では、virtualenv を使用してパッケージ化します。 virtualenvを使用すると、 pipを使用してインストールできる追加のパッケージをリンクできます。

※参考

アップロード用コンテナイメージの作成・zip化

dockerイメージをダウンロードします。

$ docker pull ibmfunctions/action-python-v3.9

zip にパッケージ化するための作業ディレクトリを準備し、import したい外部パッケージを requirements.txt にリストで書いておきます。(py-zabbixはpipでインストール可能です。)

作業ディレクトリ内のファイルリスト
$ ls workspace
__main__.py
requirements.txt
requirements.txtの中身
$ cat requirements.txt
py-zabbix

virtualenvを作成します。

$ docker run --rm -v "$PWD:/tmp" --entrypoint "/bin/bash" ibmfunctions/action-python-v3.9:latest -c "cd /tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"

created virtual environment CPython3.9.13.final.0-64 in 40219ms
  creator CPython3Posix(dest=/tmp/virtualenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: ZabbixSender==0.2.7, pip==21.3.1, py_zabbix==1.1.7, setuptools==60.2.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
Requirement already satisfied: py-zabbix in ./virtualenv/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (1.1.7)
WARNING: You are using pip version 21.3.1; however, version 22.3.1 is available.
You should consider upgrading via the '/tmp/virtualenv/bin/python -m pip install --upgrade pip' command.

virtualenvとたくさんのpemファイルが作成されます。

$ ls -l
jp419713$ ls -l
total 22456
-rw-r--r--  1 jp419713  staff      557 Nov 20 13:10 __main__.py
-rw-r--r--  1 jp419713  staff       10 Nov 20 13:03 requirements.txt
-rw-------  1 jp419713  staff   259465 Nov 18 23:08 tmp1cxl01kgcacert.pem
-rw-------  1 jp419713  staff   259465 Nov 18 23:08 tmp43ze4fdocacert.pem
.
.
.
-rw-------  1 jp419713  staff   259465 Nov 18 23:08 tmpvyopq50bcacert.pem
-rw-------  1 jp419713  staff   259465 Nov 18 23:08 tmpxzg8gn1tcacert.pem
drwxr-xr-x  6 jp419713  staff      192 Nov 18 22:51 virtualenv

virtualenvとコードをzip化します。

zip -r zabbix.zip virtualenv __main__.py

IBM Cloudへアップロード

$ ibmcloud login -apikey xxxxxx -r jp-tok
$ ibmcloud plugin install cloud-functions
$ ibmcloud fn namespace target Namespace-test
$ ibmcloud fn action create sendto-zabbix [ファイルパス]/zabbix.zip --kind python:3.9

作成されたことをIBM Cloudポータルで確認します。
Functions」->「Action」をクリックします。

アップロードしたパッケージを選択すると以下のような画面になるので、左メニューの「Endpoints」をクリックします。
image.png

Endpoints」記載のREST APIをコピーしておきます。(Event Notificationsで使用します)

Event NotificationsからIBM Cloud Functionsへのアクセス許可

IBM Cloud Functionsへのアクセスが許可されたAPI Keyを発行します。後の手順でEvent Notificationsへ登録することでイベントの転送を許可します。

初めに、IBM Cloudポータルホーム画面から「管理」->「アクセス (IAM)」に移動します。
image.png

「Service IDs」を選択して「Create」をクリックします。

image.png

名前空間を作成します。
(どのサービスに対してのアクセスを管理するのか分かれば大丈夫です)
Screen Shot 2022-12-10 at 17.59.34.png

作成が完了するとService ID詳細画面に移ります。
続いてアクセス権限を設定するため、「Assign Access」をクリックします。
image.png

以下のように権限設定しました。設定後、「Add」->「Assign」をクリックします。

  • Service:Functions
  • Resource:All
    • (「Specific Resource」->「Service Instance」で特定のNamespaceのみ指定可能です)
  • Role and actions:全て
    image.png

続いて「API Keys」タブを選択し、「Create」をクリックします。
image.png

名前を設定して「Create」をクリックします。

API keyが表示されますが、表示は一度きりなのでダウンロードしておきます。
(後でEvent Notificationsの設定で使用します)

Event Notificationsの設定

Event Notificationsの作成

上部タブにて「Event Notifications」で検索、または以下よりオーダーします。
https://cloud.ibm.com/catalog/services/event-notifications

private経由で管理する必要がある場合はService Endpointsにて「Both public & private network」を選択します。そのほかの注意事項は以下を参照ください。
https://cloud.ibm.com/docs/event-notifications?topic=event-notifications-en-regions-endpoints#en-service-endpoints

Event Notificationsでのイベント転送設定

source の設定

イベントのソースを指定します。
作成したEvent Notificaitons画面に移動し、「source」タブを選択します。
image.png

「Add」->「IBM Cloud Source」をクリックします。

「Platform Notifications for IBM Cloud」の「View configuration」をクリックします。!
image.png

「Notification distribution list」ページに飛ぶので、「Add」->「Event Notificaitons」を選択します。
image.png

作成したEvent Notificaitonsリソースを選択し、「Add」をクリックします。

Sourceに追加されたのが確認できます。
Screen Shot 2022-12-10 at 17.26.09.png

Destinationの設定

イベントの送信先を指定します。
作成したEvent Notificaitons画面にて、「Destinations」タブを選択します。デフォルトでSMSとEMailのチャネルが作成されます。編集することで特定のSMS/Emailへの転送が可能です。
Add」をクリックします。
image.png

「Name」と先ほどコピーしたFunctionsの「REST API」と「APIキー」を入力します。
image.png

Topicsの設定

Topicsでは、発生したイベントの中で特定のイベントのみを転送したい場合のフィルタを定義します。

Event Notificaitons画面の「Topics」タブを選択し、「Create」をクリックします。

「name」を入力して「Create」をクリックします。
optionでは、特定の"イベント・タイプ"や"重大度"に制限することが出来ます。

Subscriotionsの設定

「Subscriptions」タブを選択して「Create」をクリックします。
image.png

これまで作成した"Topic"と"Destination"を選択、「Create」をクリックします。
Screen Shot 2022-12-13 at 0.12.25.png

転送の確認

イベントが発生すると、以下のようにzabbixでイベントを受信することが出来ました!
image.png

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?