Fluentd導入してからエラーログを全部Slackに通知する

やりたいこと

サーバーが落ちるときすぐ管理者に通知する

設計イメージ

nginx_rails_fluentd_slack.jpg

Fluentdで全部のエラーログをまとめてSlackに送信する。

Fluentd導入

Fluentdとは

ログ収集ミドルウェアである。Fluentdにインプットされた、すべてのログをJSONに変換し、アウトプットする。

Fluentdのインストール (Ubuntu 14.04)

事前準備

  • ntpをインストールする
$ sudo apt-get install ntp
  • ファイルディスクリプタの上限を増やす

現在のファイルディスクリプタ数を確認

$ ulimit -n
1024  

もし1024なら不十分なので上限を増やす。/etc/security/limits.confに以下の行を追加する

root soft nofile 65536  
root hard nofile 65536

* soft nofile 65536
* hard nofile 65536

編集終わったらマシン再起動

$ sudo reboot

もう一度確認

$ ulimit -n
65536  

Fluentdのインストール

$ curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

起動するときFluentd(td-agent)を自動に起動

$ sudo update-rc.d td-agent defaults

Slackへ連帯

  • FluentdのSlackプラグインをインストールする
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-slack
  • SlackのWebhookを登録

https://yourteam.slack.com/services/new/incoming-webhook

ガイドに従ってやれば良い。 これで準備完了!

Fluentdの設定

## nginx
<source>  
  type tail
  format none #今回はそのままのログを送信するのでnoneにする
  path /var/log/yourproject/nginx_error.log # ログファイルの場所
  tag nginx.error
  pos_file /var/log/td-agent/nginx.pos
</source>

## unicorn
<source>  
  type tail
  format none 
  path /var/log/yourproject/unicorn_error.log
  tag unicorn.error
  pos_file /var/log/td-agent/error.pos
</source>

## slackに通知
<match *.error>  
  type slack
  webhook_url [WEBHOOK_URL_HERE] # webhookのURL
  channel channel_notification # channel指定
  username fluentd
  flush_interval 2s # すぐに通知したいのでとりあえず2秒間隔
</match>  

td-agentを再起動

$ sudo service td-agent restart

確認

unicornをstopして、つまりアプリケーションサーバーが動かない状態でこういうメッセージが来た!

Screen Shot

参考