PHPでも勉強するか! その5 ZABBIXからツイートする 1


今回やるネタはこれ。

GW-20160522-132207

簡単なんだけど、30時間くらいかかった(´・ω・`)
とりあえずZABBIXサーバ上のFTPサービスを監視対象としました。

■■PHPの仕込み

PHPでツイートする基本についてはこちらで勉強。

PHPからTwitterツイート(2015年2月版)
http://qiita.com/tsunet111/items/9309801cd3e3bcf6e32a

PHP 5分で出来る!Twitter API アプリケーション認証(Application-only authentication)
https://blog.apar.jp/php/2778/

PHPでTwitterへ自動でツイートするツールを作る
http://9-bb.com/php-twitter/

上記サイトをパクって参考にPHPファイルを作りました。
未だに== と = の違いがわかってないです。この辺が苦労しました。
if分の時は条件だから == で、変数に入れる値は = って感じなのかな(汗)
あとautoload.phpの指定はフルパスで書いてください。
下の方の行は、実際ツイートする前にローカルログに吐き出させてみた時の残骸。

<?php

// OAuthライブラリの読み込み
require "/usr/lib/zabbix/alertscripts/alert-tweet/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

//認証情報4つ
$consumerKey = "XXXXXXXX";
$consumerSecret = "XXXXXXXX";
$accessToken = "XXXXXXXX";
$accessTokenSecret = "XXXXXXXX";

//接続
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//status文字変更
if ($argv[2] == 'OK' ) {
    $status = '復旧なう';
} else {
    $status = '障害なう';
}

$body = "[わいシステム] " . $argv[1] . "  " . "状況:" . $argv[2] . "  [" . $status  . "]" ;

//ツイート
$res = $connection->post("statuses/update", array("status" => $body ));


//レスポンス確認
//var_dump($res);

//テストファイル出力
//$date = date('c');
//$log1 = $date . $body  ;

//file_put_contents("/var/log/zabbix/tweet-alert.log" , $log1);

ZABBIXから渡される{TRIGGER.STATUS}を見て文字を変えるようにしてます。

スクリプトファイルは /usr/lib/zabbix/alertscripts に置きました。
アブラハムさんのtwitteroauthをダウンロードしてフォルダ名は”alert-tweet”に
リネームしてまるごと置いておきます。

[root@wiki-web-2 alertscripts]# ls -lR
.:
合計 16
drwxrwxrwx 4 zabbix zabbix 4096  5月 15 09:28 2016 alert-tweet
-rwxrwxrwx 1 zabbix zabbix 1018  5月 22 12:37 2016 alert-tweet.php

./alert-tweet:
合計 32
-rwxrwxrwx 1 zabbix zabbix 1100  4月 21 08:23 2016 LICENSE.md
-rwxrwxrwx 1 zabbix zabbix 1000  4月 21 08:23 2016 README.md
-rwxrwxrwx 1 zabbix zabbix  983  4月 21 08:23 2016 autoload.php
-rwxrwxrwx 1 zabbix zabbix  982  4月 21 08:23 2016 composer.json
-rwxrwxrwx 1 zabbix zabbix  685  4月 21 08:23 2016 phpmd.xml
-rwxrwxrwx 1 zabbix zabbix  274  4月 21 08:23 2016 phpunit.xml
drwxrwxrwx 3 zabbix zabbix 4096  4月 21 08:23 2016 src
drwxrwxrwx 3 zabbix zabbix 4096  4月 21 08:23 2016 tests

./alert-tweet/src:
合計 308
-rwxrwxrwx 1 zabbix zabbix   1851  4月 21 08:23 2016 Config.php
-rwxrwxrwx 1 zabbix zabbix    692  4月 21 08:23 2016 Consumer.php
-rwxrwxrwx 1 zabbix zabbix   1073  4月 21 08:23 2016 HmacSha1.php
-rwxrwxrwx 1 zabbix zabbix   6194  4月 21 08:23 2016 Request.php
-rwxrwxrwx 1 zabbix zabbix   2063  4月 21 08:23 2016 Response.php
-rwxrwxrwx 1 zabbix zabbix   1731  4月 21 08:23 2016 SignatureMethod.php
-rwxrwxrwx 1 zabbix zabbix    833  4月 21 08:23 2016 Token.php
-rwxrwxrwx 1 zabbix zabbix  13344  4月 21 08:23 2016 TwitterOAuth.php
-rwxrwxrwx 1 zabbix zabbix    146  4月 21 08:23 2016 TwitterOAuthException.php
drwxrwxrwx 2 zabbix zabbix   4096  4月 21 08:23 2016 Util
-rwxrwxrwx 1 zabbix zabbix   3418  4月 21 08:23 2016 Util.php
-rwxrwxrwx 1 zabbix zabbix 250607  4月 21 08:23 2016 cacert.pem

./alert-tweet/src/Util:
合計 4
-rwxrwxrwx 1 zabbix zabbix 606  4月 21 08:23 2016 JsonDecoder.php

./alert-tweet/tests:
合計 628
-rwxrwxrwx 1 zabbix zabbix   1383  4月 21 08:23 2016 AbstractSignatureMethodTest.php
-rwxrwxrwx 1 zabbix zabbix    381  4月 21 08:23 2016 ConsumerTest.php
-rwxrwxrwx 1 zabbix zabbix    995  4月 21 08:23 2016 HmacSha1Test.php
-rwxrwxrwx 1 zabbix zabbix    705  4月 21 08:23 2016 TokenTest.php
-rwxrwxrwx 1 zabbix zabbix  10128  4月 21 08:23 2016 TwitterOAuthTest.php
drwxrwxrwx 2 zabbix zabbix   4096  4月 21 08:23 2016 Util
-rwxrwxrwx 1 zabbix zabbix    505  4月 21 08:23 2016 bootstrap.php
-rwxrwxrwx 1 zabbix zabbix 215694  4月 21 08:23 2016 kitten.jpg
-rwxrwxrwx 1 zabbix zabbix    559  4月 21 08:23 2016 sample_env
-rwxrwxrwx 1 zabbix zabbix 383631  4月 21 08:23 2016 video.mp4

./alert-tweet/tests/Util:
合計 4
-rwxrwxrwx 1 zabbix zabbix 1258  4月 21 08:23 2016 JsonDecoderTest.php

■■ZABBIX登録

ZABBIXの基本構造
①アイテム:何を監視するか
②トリガー:アイテムがどういう状態になったら障害ステータスとするか
③アクション:どういう条件で、どういう手段で発報するか

この3つを設定します。
設定>ホストで確認すると、アイテムやトリガーの登録状況を確認できますね。

GW-20160522-134900

人力でアイテムとトリガーを登録してもいいですが、面倒なのでテンプレートを使いました。
ZABBIXサーバとして稼働しているのがうちだと”LANP2 副系(稼働系)”なのでホスト名をクリック
そして開いた画面でFTPテンプレートを登録。

GW-20160522-135548

ZABBIXサーバのアイテムに登録されたことを確認
GW-20160522-135907

ZABBIXサーバのトリガーに登録されたことを確認
GW-20160522-135929

設定>アクション>アクションの作成

・アクション
 タイトルだけつけてデフォルト。

・アクションの実行条件
 ”トリガー” ”=” でFTPトリガーを指定。
GW-20160522-140510

・アクションの実行内容
 こんな感じ。コマンドはsudoする必要無しです。
  「php /usr/lib/zabbix/alertscripts/alert-tweet.php “{TRIGGER.NAME}” “{TRIGGER.STATUS}”」

GW-20160522-140520

ZABBIXのGUIはクドいので、追加や更新ボタンの押し忘れに注意。
これでZABBIXサーバ上のvsftpdのstart/stopでツイートされるようになります。
この基本を抑えれば、あらゆるZABBIXアラートをツイートできるかとおもいます。


Leave a comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

One thought on “PHPでも勉強するか! その5 ZABBIXからツイートする