こんにちは、丸山です。
ご存知の方も多いと思いますが、Fluentdというログ収取用のミドルウェアがあります。その特徴の一つにプラグインによる様々な形でのログ収集というものがあります。プラグインの組み合わせによっては、ログだけではなく、様々なメッセージを収集し、別のところへ転送するといった連携を行うことが可能です。
そこで今回はtwitterとSlackに対応したプラグインを使用して、ツイートをSlackに流してみます。
Fluentdのインストール(Mac OS X)
ここからdmgファイルをダウンロードしてインストールします。
デフォルトでは設定ファイルの場所は/etc/td-agent/td-agent.conf、ログの場所は/var/log/td-agent/td-agent.logになります。
プラグインのインストール
次に各プラグインをインストールします。
以下は今回インストールするプラグインとそれぞれのインストール方法です。
sudo td-agent-gem install eventmachine sudo td-agent-gem install fluent-plugin-twitter
sudo td-agent-gem install fluent-plugin-slack
Fluentdの設定
プラグンがインストールできたら、Fluentdの設定をしていきます。設定はconfファイルに記述していきます。
メッセージ取得元(Twitter)の設定
まずはツイートを取得する設定です。fluent-plugin-twitterはTwitter Streaming APIを利用するため、ここではTwitter APIを利用する準備ができていること(consumer_key等の取得)を前提としています。
<source> type twitter consumer_key <自分のconsumer_key> # Required consumer_secret <自分のconsumer_secret> # Required oauth_token <自分のoauth_token> # Required oauth_token_secret <自分のoauth_token_secret> # Required tag input.twitter # Required timeline tracking # Required (tracking or sampling or location or userstream) keyword 'Scala' # Optional (keyword has priority than follow_ids) lang ja,en # Optional output_format nest # Optional (nest or flat or simple[default]) </source>
Fluentdの設定ファイルはいくつかのディレクティブを用いて記述されます。ここではsourceディレクティブを設定しています。sourceディレクティブにはログやメッセージの入力元を指定します。今回はツイートを取得してそれを他のところに流すため、メッセージ取得元であるtwitterの指定をしています。
設定内容についの詳細は省略しますが、上記の設定ではScalaというキーワードを含んだツイートを取得するようにしています。
メッセージ出力先(Slack)の設定
次にSlackへメッセージを流す設定です。fluent-plugin-slackではSlack APIのtokenが必要となりますので、予め取得しておいてください。
<match input.twitter> type buffered_slack token <Slack APIのtoken> channel %23fluentd-twitter username tweet icon_emoji :slack: flush_interval 60s message_keys text message "%s" </match>
ここではmatchディレクティブを設定しています。matchディレクティブはログ・メッセージの出力先を指定します。今回は取得したメッセージをSlackに流すため、メッセージ出力先としてSlackの設定をしています。
上記の設定では、メッセージをtweetという名前とslackアイコンを付けて、#fluentd-twitterというチャンネルに流すようにしています。チャンネルを指定するときは、先頭に%23を付けます。
また、取得されたツイートは他の様々な情報とともにJSON形式で渡ってきます。そのなかでツイート自体はtextというkeyに対応するvalueとして渡ってくるので、message_keysにtextを指定しています。そしてmessageに"%s"と記述することで、そのtextというkeyに対応するvalue、つまりツイートをメッセージとしてSlackに表示することになります。
以上の設定を行ったら、fluentdを起動します。
sudo launchctl load /Library/LaunchDaemons/td-agent.plist
ちなみに停止は以下のコマンドです。
sudo launchctl unload /Library/LaunchDaemons/td-agent.plist
これで取得対象のツイートがされると、Slackにそのツイートが流れるようになります。