fluentd + slackでsshのログイン状態を監視

いまどき、chatopsが叫ばれているが、chatからの命令を受け取るだけではなく、 chatに状態を表示したい。 chatは即時通達の手段であって、目的ではない。同時にfluentd + kibanaでログ解析ができるようにする。

syslog_ngのインストール

syslogを使う以上、syslogdは必要となる。 今回はauth_logを用いるので必然性はないが、今後のために入れておく。 これを行うことで、hostベースやファシリティベースでのログファイルの分離が 可能になり、以後の解析や連携に役立つ。

sudo aptitude install syslog-ng
sudo vi /etc/syslog-ng/syslog-ng.conf
> 以下のようにinternal()のあとにudp追加。
source s_src { unix-dgram("/dev/log"); internal(); udp();
            file("/proc/kmsg" program_override("kernel"));
};

次に、Configの読み込みを行う。

sudo service syslog-ng restart
logger -n 127.0.0.1 -p local1.debug hoge
tail /var/log/debug

として、メッセージが残っていればOK

Javaのインストール

Fluentdなどに必要なのでいれる。

sudo apt-get install ruby software-properties-common
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer

パッケージのインストール 5.0

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/5.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-5.x.list
sudo apt-get -y update && sudo apt-get -y install elasticsearch
sudo update-rc.d elasticsearch defaults 95 10
sudo service elasticsearch start
# kibana
cd /tmp
wget https://download.elastic.co/kibana/kibana/kibana-5.0.0-alpha4-amd64.deb
dpkg -i kibana-5.0.0-alpha4-amd64.deb
sudo update-rc.d kibana defaults 95 10
sudo /etc/init.d/kibana restart
# logstash
wget https://download.elastic.co/logstash/logstash/packages/debian/logstash-5.0.0-alpha4.deb

dpkg -i logstash-5.0.0-alpha4.deb

パッケージのインストール

# ElasticSearchのrepoとか
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get -y update && sudo apt-get -y install elasticsearch
# td-agentいれる
curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
# kibanaいれる
echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list
sudo apt-get update && sudo apt-get install kibana
sudo update-rc.d kibana defaults 95 10
sudo update-rc.d elasticsearch defaults 95 10
sudo service elasticsearch start
sudo  /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-slack
sudo  /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-grep
sudo  /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-copy
sudo /etc/init.d/kibana restart
# http://192.168.78.2:5601/ などにアクセスしてkibanaが見えることを確認

SSHのログ用のConfig

sudo vi /etc/td-agent/td-agent.conf

で以下のように書く

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<source>
  type tail
  path /var/log/auth.log
  format syslog
  tag auth_log
  pos_file /var/log/td-agent/syslog_auth_log.pos
</source>


<match auth_log.**>
  type grep
  input_key message
  regexp Accepted|failure|Invalid
  add_tag_prefix greped
</match>

<match greped.**>
  @type slack
  token <TOKEN>
  channel general
  username ssh-agent
  color danger
  flush_interval 5s
</match>
sudo chmod 777 /var/log/auth.log
sudo /etc/init.d/td-agent  configtest
sudo /etc/init.d/td-agent  restart
# sudo usermod -G adm,td-agent td-agent

Fluentdのテスト(試験用)

sudo apt-get install python-pip
pip install fluent-logger
from fluent import sender
from fluent import event
sender.setup('slack.test', host='localhost', port=24224)
event.Event('follow', {
    'message': 'hogehoge',
    'to': 'userB'
    })