Check maingun status on mackerel

ghostにはmailの設定がある。mailは今のところ、パスワードをわすれた時に再設定メールを送る際に使用される。バージョン0.8からはβ機能の一つのsubscribers機能からも使う(まだメール送信機能は無いっぽいけど)。

送信元メールアドレスの設定方法はいくつかある。

このうち簡単に試せそうなmailgunで設定していた。

こんな感じ。

mail: {
    fromaddress: 'lorentzca@ghost.ponpokopon.me',
    transport: 'SMTP',
    options: {
        service: 'Mailgun',
        auth: {
            user: 'mailgun username', // mailgun username
            pass: 'mailgun password'  // mailgun password
        }
    }
}

最近サーバーを引越したタイミングで、DNSレコードの引っ越しミスがあって何日かmailgunが無効になっていたので、気づけるようにしたいと思いMackerelで雑に監視してみた。

監視の方法は、mailgunのapiを叩いてドメイン(mailgunに登録した自ドメイン)のステータスを確認し、active以外だったらアラートを出すというだけのもの。ansibleで適用している。mailgunのapiを埋め込む部分はとりあえずvaultを使用。

監視スクリプト

  • check_mailgun.sh
#!/bin/sh

DOMAIN="ghost.ponpokopon.me"
STATUS="active"
RESULT=$( \
  curl -s --user 'api:{{ lookup('vault', 'secret/mailgun_apikey') }}' \
  https://api.mailgun.net/v3/domains/$DOMAIN | \
  jq -r .domain.state \
)

if [ "$RESULT" != "$STATUS" ]; then
  echo "mailgun/$DOMAIN is down."
  exit 2
fi

echo "mailgun/$DOMAIN status is ok."
exit 0

mackerelプラグインの設定

  • check_mailgun.conf
[plugin.checks.mailgun]
command = "/usr/local/sbin/check_mailgun.sh"
notification_interval = 60
max_check_attempts = 2

playbook

  • main.yml
# check mailgun
- name: check mailgun script is added
  template: src="check_mailgun.sh" dest="/usr/local/sbin/check_mailgun.sh" owner=root group=root mode=0755
  when: stage == "prod"
  tags: mackerel

- name: check mailgun status on mackerel
  copy: src="check_mailgun.conf" dest="/etc/mackerel-agent/conf.d/check_mailgun.conf" owner=root group=root mode=0644
  notify:
    - restart mackerel-agent
  when: stage == "prod"
  tags: mackerel

出来た!!

感想

  • 今回早く設定したかったのでとりあえずシェルを使って設定したが、golangで書き直す!
    • その際もっと汎用的に使える形にする
  • 自分で監視項目追加するの面白い
  • せっかくmackrel有料アカウントにしたので色々試すぞ!