18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

slackboard-log〜cronlogライクなSlackboardクライアント〜

Posted at

slackboard-cli〜Slackboardクライアント〜

Slackboard〜Slackプロキシサーバ in Go〜で書いたようにSlackboardにはSlackプロキシ(slackboard)のためのクライアントプログラムであるslackboard-cliが付属している。

これを利用すると稼働中のslackboard(slackboard-host:29800)に対してメッセージを送信するだけでSlackに通知することができる。

$ echo message | slackboard-cli -t test -s slackboard-host:29800

ただ、時々何かの処理に失敗した時だけSlackに通知したいことがある。例えば一日一回圧縮済みのログファイルをGoogle Cloud Storageにアップロードしていて、このタスクが失敗した時だけSlackに通知するケースを考えてみる。

# copy log file to Google Cloud Storage
gsutil cp /data/${data_log}_20150505.log.gz gs://${bucket}/

result=`echo $?`
if [ $result -ne 0 ];
then
    echo "@channel: failed to copy log to Google Cloud Storage(${date_log})." | slackboard-cli -s slackboard-host:29800 -t error-gcs
    exit
fi

シェルでリターンコードを元に失敗判定を行うのは汎用的である一方結構面倒である。というかifの文法を毎回忘れてはググっている自分がいるのをどうにかしたい。

次にcrontabに書かれたスクリプトの実行が失敗した際にSlackに通知したいとする。

0 6 * * * some-command some-args

some-commandをラップしてsome-commandが失敗した際にSlackに通知するロジックを埋め込ることができれば便利だ。似たようなことをするツールにcronlogがある。

0 6 * * * cronlog -- some-command some-args

上記のようにcronlogをはさむとsome-commndが失敗したとき(リターンコードが非ゼロ)にだけ実行結果を標準出力と標準エラー出力に吐くことができる。

で、先週社内のSlackでcronlogのSlack版みたいなのがほしいよね、という話になってその二日後社内リポジトリにslacklogというPerlスクリプトがコミット&マージされた。

slackboard-log〜cronlogライクなSlackboardクライアント〜

cronlogslacklogのアイデアは非常に良いものなので自分もSlackboard向けにGoでslackboard-logというクライアントプログラムを書いてみた。これを使うと特定のタスクが失敗した時だけSlackに通知するような処理を簡単にラッピングできる。

0 6 * * * slackboard-log -s slackboard-host:29800 -t error-some -- some-command some-args

Slackに通知するのとは別に実行結果をファイルに吐くこともできる(-log)。こっちはコマンド実行の成否にかかわらず行われる。

slackboard-log -s slackboard-host:29800 -t error-some -log /tmp/some.log -- some-command some-args
18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?