概要
dkron にはジョブの実行結果を通知する仕組みがあります
dkron Pro であれば Processors を使って実現できますが OSS 版には通知用の Processors がありません
OSS 版にも File, Log, Syslog Processors はありますがメールや Slack に通知するための Processors はありません
が、OSS 版でも Slack に通知する機能はあります
Pro 版とのジョブごとに異なるチャネルに通知することができないくらいです
環境
- Ubuntu 16.04 LTS
- dkron 1.2.4
ジョブの登録
ジョブは何でも OK です
とりあえず Shell executor
を使って定期的にコマンドを実行するジョブを登録します
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "job1",
"schedule": "@every 30s",
"timezone": "Asia/Tokyo",
"owner": "hawksnowlog",
"owner_email": "hawksnowlog@gmail.com",
"disabled": false,
"tags": {
"dkron_server": "true:1"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "date"
}
}'
OSS 版の Slack の通知はジョブが成功しても失敗しても通知されます
ちなみに Pro 版の Slack Processor は onSuccess
という設定で成功した場合も送信するか失敗した場合だけにするか設定することができます
Slack の設定を有効にする
次に Slack の通知を有効にします
Incomming Webhook の仕組みを使うので URL を事前に取得しておいてください
また設定は管理画面からは行えないので設定ファイルに直接記載します
sudo vim /etc/dkron/dkron.yml
webhook-url: https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx
webhook-payload: "{\"text\":\"A status of {{.JobName}} is {{.Success}}\",\"username\":\"DkronBot\",\"icon_url\":\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2LszE5GtwoK-DGY1onFDSRJ4y6hyphenhyphenTkB3PqKxuHgO9TYJ77RwDdy9Fa9DBOs_bWzkUOUqCg2oah1i5_GEGLs1ZyEoUIFIeRNZ87lwznv94tth9ReNahxhWyRFkMNDAaqoCll-VyvaGYdo/s1600/jarato.png\"}"
webhook-headers:
- Content-Type:application/json
webhook-url
は取得したものに変更してください
webhook-payload
は Slack の Incomming Webhook で使える payload がそのまま指定できます
また golang のテンプレートを使うことができます
struct のフィールドが使用可能になっているようです
一覧はコードを直接見るしかありませんが以下が参照可能です
https://github.com/victorcoder/dkron/blob/master/dkron/notifier.go#L69
自分が試した感じだと {{.Report}}
を使うと invalid payload になるためうまく通知できません
おそらく JSON のフォーマットに違反した情報が展開されてしまっているためだと思います (p-r 案件かなと)
設定ファイルに Slack の情報を記載したら dkron を再起動しましょう
sudo systemctl restart dkron
動作確認
あとは動作確認です
ジョブが失敗したときに Slack に通知がくれば OK です
今回は webhook-payload
内で channel
の指定はしていないので通知されるチャネルは Incomming Webhook を作成した際に指定したデフォルトのチャネルになります
dkron.yml
は dkron のグローバルな設定になるのですべてのジョブのエラーが通知されてしまいますが、一応こんな感じで Slack の通知を実現することはできました
Tips
dkron のログをチェックする
sudo journalctl --no-pager -u dkron.service | less
ログをデバッグ表示にする
vim /etc/dkron/dkron.yml
log-level: debug
最後に
OSS 版 dkron で Slack の通知を試してみました
dkron.yml に Incomming Webhook の URL を指定することで実現できますが、すべてのジョブに共通の設定になってしまいます
ちなみに Pro 版では Slack Processor という仕組みが使えます
dkron-processor-slack.yml
にチーム単位で Incomming Webhook URL を指定することができ、そのチームをジョブに紐付けることでジョブごとに通知先を切り替えることができるようです
当然ですが OSS 版では使えないので試せませんでした
0 件のコメント:
コメントを投稿