share facebook facebook twitter menu hatena pocket slack

2011.10.25 TUE

PHPで外部テキストを変数展開

鈴木 宏康

WRITTEN BY 鈴木 宏康

現在、Nagiosのアラートメール通知を、サービス毎に行えるようにしているところです。

上記のような仕組みを作る際は、メールテンプレートをどのような形にするか悩むところだと思いますが、今回は可能な限りシンプルにしようと考え、外部ファイルのテキストをevalで変数展開する方法を試してみました。

はじめに、下記のようなメールテンプレートを用意しておきます。

$NOTIFICATIONTYPE $CONTACTGROUPNAME $HOSTNAME $HOSTSTATE

TYPE     : $NOTIFICATIONTYPE($HOSTSTATE)
ACCOUNT  : $CONTACTGROUPNAME
HOST     : $HOSTNAME($HOSTADDRESS)
DATETIME : $LONGDATETIME
OUTPUT   : $HOSTOUTPUT

これを下記のスクリプトで変数展開します。

$CONTACTGROUPNAME = $argv[1];
$HOSTNAME         = $argv[2];
$NOTIFICATIONTYPE = $argv[3];
$HOSTSTATE        = $argv[4];
$HOSTADDRESS      = $argv[5];
$LONGDATETIME     = $argv[6];
$HOSTOUTPUT       = $argv[7];

$template = file_get_contents("/opt/cloudpack//conf/$CONTACTGROUPNAME/nagios/mail/host/$HOSTNAME.txt");
$eval = "return <<

複雑なように見えますが、要点としては外部テキストを下記のように調整して、evalしています。
※タイトルとは関係ないですが外部ファイルの取得は引数によって変更する形です。

return << 外部テキスト
EVAL;

そして下記のように実行すると、

./tmp-nagios-notify-host "admin_cloudpack.jp" "admin-a" "RECOVER" "UP" "xxx.xxx.xxx.xxx" "2011/11/11 11:11:11" ""

正しく変数展開され、下記のようなファイルが出力されます。

RECOVER admin_cloudpack.jp admin-a UP

TYPE     : RECOVER(UP)
ACCOUNT  : admin_cloudpack.jp
HOST     : admin-a(xxx.xxx.xxx.xxx)
DATETIME : 2011/11/11 11:11:11
OUTPUT   :

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。