IDCF」に変更となっております。ビッグデータ・ソリューションアーキテクトの高階(takashina)です。電話、メール、ケータイメッセージはもちろんのこと、LINE、FacebookのMessenger、Skype、Facetime、Slack、chatwork、HipChatなどといった様々なジャンルのツールを使っているかと思います。プッシュ通知されるツールだと、タイムラインを追っていくだけで必要な情報や通知内容が読めるので、手間が少なくて便利ですよね。ログのバッチ処理をしている場合、自動的にその集計結果を送ってきてもらえたら、それも手間が少なくて便利そう。そこで今日は、Yahoo!ビッグデータインサイト(以下「YBI」)で実行したクエリの結果をSlackへ通知する手順についてご紹介します。前提条件ここから先、次の前提で綴っていきます。IDCFクラウドで仮想サーバー作成、ネットワークの設定まずはIDCFクラウドでSlackへの投稿を操作するサーバーを作ります。他のサーバーを使う方は、適宜同様の設定をしてください。ヘルプサイトをご覧ください。64-bitで作成しました。ネットワークの設定は下記のように行います。SSH(22/TCP)とSinatra(4567/TCP)でアクセス可能としてください。※Sinatraが何者か、は後述します。続いてSlack側で準備をしていきます。通知を送りたいSlackのteamにアクセスしておきましょう。Webhooksがあります。今回はこの機能を使ってYBIからSlackへのクエリ結果通知を実現していきます。Webhooksの設定がされているSlackのChannelであれば、ここの手順は不要です。integration」を選択します。すると、Slackの細かな設定ができるページへ飛びます。Webhooks」が現れるのでクリックします。Configuration」とクリックします。integration」ボタンをクリックします。URLが発行されます。外部ツールからこのURLにデータを投げるとSlackのChannel投稿されるわけです。このページでは、Webhookを使った投稿者名、アイコン等を変更することができますが、とりあえず今はそのまま次に進みます。Settings」をクリックして、Slack側での準備は完了です。URLは関係者以外に知られないようにしてください。URLを使った投稿ができるかどうか、CentOSサーバーにログインして、試してみましょう。https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxうまく行けば、SlackのChannelにこんな投稿がされているはずです。続いて、CentOSサーバーにてtd2slackをインストールします。Dataのサービスをベースにしています。Dataのクエリ結果をSlackに流せる「td2slack」があるので、これを使います。td2slackは、RubyによるWebアプリケーションを簡単に実現するためのソフトウェアであるSinatraで作られています。PUTをSinatraでフッキングしてSlackへ送る、という動きをしています。Sinatraについて詳しく知りたい方はこちらをどうぞ。yumインストールtd2slackをインストールするのにbundlerを使っていきます。その前に、インストールに使うruby-devel、gcc、rubygem-bundlerをyumでインストールします。RubyGemsもアップデートしておきましょう。下記の環境変数を設定します。RACK_ENV=productionSinatraアプリケーション(app.rb)からSLACKへ投稿する際に、SLACK_WEBHOOK_URLの環境変数で指定したURLへ送っています。RACK_ENVは、Sinatraアプリケーションを外部のサーバーから利用できるようにするために設定しています。td2slackインストールtd2slackで使われるjsonのgemがGemfileに含まれていなかったため、追記したうえでbundlerでインストールします。./vendor/bundleこれで実行環境が整いました。実行テストとりあえず実行してみましょう。UIからクエリを実行してみます。foo」などという単純なクエリを書きます。このクエリの結果は「foo」カラムに「aaa」という文字列が1行だけ現れます。PUT」へエクスポートします。記入個所はHost、Port、Pathの3箇所です。UI右上にある「Run」!すると..Slackにこんな投稿がされるはずです。CentOSサーバーにはこんなログが出てます。start_thread'確認できたらSinatraは止めておきましょう。td2slackをデーモンで動かすSinatraアプリであるtd2slackは、rackupコマンドでデーモン起動可能です。下記では4567/TCPポートで起動しています。netstatで起動状況を確認してみましょう。18591/ruby止める時はkillしてください。これは、CentOSサーバーのtd2slack/viewsディレクトリ配下にあるerbファイルに沿って出力されています。<%=@td['foo'][0]%>クエリの結果は「foo」カラムに「aaa」という文字列が1行だけ現れるもので、Slackへの投稿された内容は以下の通りでした。<%=@td['foo'][0]%>の部分にクエリ結果の「aaa」が代入されていたのですね。このようにviewsディレクトリ配下のerbファイルを設定すると、いろいろと出力結果をカスタマイズできます。ところで、YBIにはsample_datasetsというデータベース内に、過去のNasdaq株価データが入ったテーブルがサンプルデータとして格納されています。このデータセットに対して、次のようなクエリを実行して、結果をSlackへ流してみましょう。Sinatraアプリを起動しておくのをお忘れなく。4567設定ファイル:トップ5をフォーマットして表示しています。%>クエリ:日毎・銘柄毎の株価上昇率を計算して、上昇率トップ5を取得しています。Exportの設定は次のようにします。/rate_of_increaseクエリをRunしてみましょう。Slackへ出力される結果は次のようになるはずです。1.7.8おわりにいかがでしたか。クエリ結果を定期的にSlackへ出力してもらえると、監視アラートの代わりに使うこともできますね。Inc.▲はてなブログをはじめよう!blog-idcfさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。