Lambda Pythonの二つ目の記事で、今度はZabbixに値を送信する内容になります。
普段はZabbix Agentを使っていたのですが、それだと Server => Agent:10050 への通信が発生してしまうので、それに無理に対応するのはウマくないと判断し、Zabbix Senderと同じ手法をとりました。
使い方
Zabbix プロトコルのドキュメントはこの辺で。Lambdaに以下の様な構成でzipをアップロードします。
__init__.py は空ファイルです。
1 2 3 4 5 |
. ├── AlertMetricSender.py └── modules ├── ZabbixSender.py └── __init__.py |
AlertMetricSender.py は例えばこんな感じ。
1 2 3 4 5 6 7 |
from modules.ZabbixSender import ZabbixSender def lambda_handler(event, context): sender = ZabbixSender("zabbix.example.com", 10051) sender.add("gedowfather-example-01", "healthcheck", 1) sender.add("gedowfather-example-01", "gedow.item", 1111) sender.send() |
そして、Lambda -> Configuration -> Handler を
AlertMetricSender.lambda_handler として実行させます。
Senderとして扱うので、Zabbix Server側のアイテム設定では『Zabbixトラッパー』を選択しておきます。
Agentと違って死活監視がないため、ここでは healthcheck アイテムを作って、こんなトリガー {GedowTemplate:healthcheck.nodata(600)}=1 を設定することで死活監視代わりとしています。
modules/ZabbixSender.py
これを使って、例えばAutoScalingGroupの各種CPU利用率や、オンデマンド&スポット価格などを送って比率条件でトリガーしたりします。インスタンス毎のデータではない管理データを送るのに、管理サーバーが不要になるので簡素化できます。
続きます。