[和訳] Chef Analytics + Slack = 最強 #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Chef Analytics + Slack = Awesome (2015/07/24) の和訳です。
最近 Chef 社では、社内のメッセージング、コラボレーションツールを Slack に移行しました。以前は、解析の製品である Chef Analytics と統合されていたので、HipChat を使っていました。もし Chef Analytics (訳注:和訳) になじみがなければ、これは Chef Server と Chef Client に起きたイベントをリアルタイムストリーム表示するものと考えてください。Chef Analytics はイベントが起きたときに異なるエンドポイントに通知するルールを書けます。例えば、Chef Audit Mode を実行して失敗があれば、メッセージングツールに通知を送ってほしいと思うでしょう。Slack Webhook と Chef Analytics の Webhook Notification を使えばとても簡単にできます。
- まず、create a new Slack Webhook を開きます。メッセージを送りたいチャンネルを選択すると、Slack はメッセージをポストするための URL を生成します。その URL が必要になるのでコピーしておきます。
- Chef Analytics WebUI にログインし、Notification に移動します。「+」をクリックして新しい Webhook 通知を追加します。
- 通知の名前(ここでは「slack」としています)をつけ、先程 Slack からコピーした URL をペーストします。これで通知を使う準備ができました。
通知を作成したら、その通知を使うためのルールを作成する必要があります。Slack Webhook のメッセージ形式も勉強しましょう。次は、Chef Analytics に投入されたあらゆる action イベントについてメッセージを送るだけという統合のためのとても簡単なルールです。
rules 'org notifier'
rule on action
when
true
then
notify('slack', '
{
"text": "test from the blog post"
}
')
end
end
Slack は Webhook に送られるのは JSON ドキュメントを想定していて、Chef Analytics 1.1.4 は複数行の通知の記述をサポートしています。送る必要のある最小のペイロードは「text」プロパティです。このルールを保存し、Chef Server で変更が起きたときに Slack にメッセージが流れるのを見てみましょう。すごい、メッセージがきちんとフォーマットされたでしょう? Slack はいくつかの方法でメッセージを変更できます。「username」プロパティで Slack チャンネルでのユーザ名を設定でき、「icon_emoji」プロパティを設定すればアイコンを指定できます。例えば、Chef Audit Mode が失敗したときに Slack に通知するルールを書いてみましょう。
rules 'failed-audit'
rule on run_control_group
when
status != 'success'
then
notify('slack', '
{
"username": "Audit Alarm",
"icon_emoji": ":rotating_light:",
"text": "{{message.name}} (cookbook {{message.cookbook_name}}) had `{{message.number_failed}}` failed audit test(s) on node `{{message.run.node_name}}` in organization `{{message.organization_name}}`"
}
')
end
end
この結果、Slack でのメッセージは次のようになります。
メッセージの付加機能を使ってもうちょっとこのメッセージを強化できます。チャンネル内で audit ルールをもっと目立たせるためにメッセージに「警告」色を付加し、チャンネル参加者がよく気がつくようにしてみましょう。
rules 'failed-audit'
rule on run_control_group
when
status != 'success'
then
alert:warn('{{message.cookbook_name}} {{message.recipe_name}} audit failed')
notify('slack', '
{
"username": "Audit Alarm",
"icon_emoji": ":rotating_light:",
"attachments": [ {
"text": "{{message.name}} (cookbook {{message.cookbook_name}}) had `{{message.number_failed}}` failed audit test(s) on node `{{message.run.node_name}}` in organization `{{message.organization_name}}`",
"color": "danger"
}]
}
')
end
end
このルールは次のようなメッセージになります。
メッセージをより目立たせたければ、Slack のフォーマットルール を全部見てみてください。この記事が Chef Analytics と Slack の組み合わせを始める助けとなれば幸いです。この 2つのツールの組み合わせは、chatops 体験と効果を強化する強力な組み合わせとなるでしょう。