#マクロ
- {$EB_APP} : 環境名
- {$EB_ENVCNT} : 正常のアプリケーション数
#アイテム
- タイプ:外部チェック
- キー: http_get.sh -> パラメタをcurlに渡すだけ
http_get.sh["https://api.hoge.com/v1/AwsEbEnvCount.aspx?acc=4&app={$EB_APP}&envcnt={$EB_ENVCNT}"]
- 単位:文字列
#トリガー
- 名前:[PF]EBリリース後の旧環境削除漏れ発生 {ITEM.LASTVALUE}
- 条件式:10連続アウト
{[KEY].count(#10,"","ne")}=10
#API
zabbixのexternalscriptsにpythonなどのスクリプトを置くとまとまるが、C#で組んだAPIがすでにあったのでAPIを叩くことに。
using System.Web.Script.Serialization;
using Amazon.ElasticBeanstalk;
/*
appName 監視APP名
AmazonConfig 認証カスタムクラス 別途組んでください
return 「""」以外はエラーする
*/
private string GetCountEnv(AmazonConfig.AccountNo acc, string appName, int envCount)
{
var ret = new Dictionary<string, string>();
if (envCount == 0)
{
envCount = 1;
}
AmazonConfig conf = new AmazonConfig(acc);
var cl = new AmazonElasticBeanstalkClient(conf.AccessKeyID, conf.SecretAccessKey, conf.RegionEndpoint);
var res = cl.DescribeEnvironments();
//envCountより環境数が多いと削除漏れ!
var envs = res.Environments.Where(s => s.Health == "Green").GroupBy(s => s.ApplicationName).Where(s => s.Key == appName && s.Count() > envCount);
foreach (var i in envs)
{
ret.Add(i.Key, i.Count().ToString());
}
if (ret.Count > 0)
{
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(ret);
}
else
{
return "";
}
}
#メモ
これで削除漏れによる無駄な運用コストが減ったと。