FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Fluentdを使ってツイートをSlackに流す

こんにちは、丸山です。

ご存知の方も多いと思いますが、Fluentdというログ収取用のミドルウェアがあります。その特徴の一つにプラグインによる様々な形でのログ収集というものがあります。プラグインの組み合わせによっては、ログだけではなく、様々なメッセージを収集し、別のところへ転送するといった連携を行うことが可能です。

そこで今回はtwitterとSlackに対応したプラグインを使用して、ツイートをSlackに流してみます。

Fluentdのインストール(Mac OS X

ここからdmgファイルをダウンロードしてインストールします。

デフォルトでは設定ファイルの場所は/etc/td-agent/td-agent.conf、ログの場所は/var/log/td-agent/td-agent.logになります。

プラグインのインストール

次に各プラグインをインストールします。

以下は今回インストールするプラグインとそれぞれのインストール方法です。

fluent-plugin-twitter

sudo td-agent-gem install eventmachine
sudo td-agent-gem install fluent-plugin-twitter

fluent-plugin-slack

sudo td-agent-gem install fluent-plugin-slack

Fluentdの設定

プラグンがインストールできたら、Fluentdの設定をしていきます。設定はconfファイルに記述していきます。

メッセージ取得元(Twitter)の設定

まずはツイートを取得する設定です。fluent-plugin-twitterTwitter 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にそのツイートが流れるようになります。