構築した ElasticSearch + Kibana に Fluentd を利用してログを投入する。
ログは WOWHoneypot のもの。WOWHoneypot については電子書籍も販売されてるので、ハニーポットを勉強したい人は買うのをオススメします。
Fluentd 環境を AWS の Ubuntu 上で整えるまでの手順。
WOWHoneypot 構築
WoWHoneypotを植えてみよう を参考にさせていただきました。
ところどころタイポがあったので気をつける。
AWS Ubuntu16.04 の時刻同期
ログを扱う上で時刻を正確にすることは必須。
Ubuntu16.04 では時刻の同期に systemd-timesyncd が利用されている。Amazon Time Sync Service で利用するので、169.254.169.123 を同期先に設定する(AWS上にないならntp.nict.jp とかかな)。
sudo vi /etc/systemd/timesyncd.conf
以下のように変更。
NTP=169.254.169.123
再起動して確認。
sudo systemctl restart systemd-timesyncd sudo systemctl status systemd-timesyncd
時刻同期はコレで問題ないが、JST を利用したいのでタイムゾーンの設定を行う。
sudo timedatectl set-timezone Asia/Tokyo timedatectl status # Local time が JST になったことを確認 Local time: Sun 2018-07-08 16:00:05 JST Universal time: Sun 2018-07-08 07:00:05 UTC RTC time: Sun 2018-07-08 07:00:04 Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no
Fluentd インストール前準備
Fluentd をインストールする前に、2つの事前準備を行います。
1つ目は、ファイルディスクリプタの上限をあげる。
sudo vi /etc/security/limits.conf
以下を追記。
root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536
変更後、再起動します。
sudo reboot
systemd で Fluentd の実行を行う場合は、起動時にこのLmititNOFILe = 65536 としてくれるようなので、この設定をしなくてもいいみたい。まあ、念の為。
2つ目は、ネットワークカールパラメータの最適化。
sudo vi /etc/sysctl.conf
net.core.somaxconn = 1024 net.core.netdev_max_backlog = 5000 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_wmem = 4096 12582912 16777216 net.ipv4.tcp_rmem = 4096 12582912 16777216 net.ipv4.tcp_max_syn_backlog = 8096 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 10240 65535
設定を有効化。
sudo sysctl -p
この設定は高負荷環境で有効に働くようだが、そんな高負荷でもないサイト上ではやる意味が薄いかもしれない。
Fluentd インストール
Fluentd1.0 (td-agent3) をインストールする。Ubuntu 16.04 なので Xenial を選択。
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh
起動。
sudo systemctl enable td-agent.service sudo systemctl start td-agent.service
動作確認をしておく。
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
td-agent の動作ログに 送ったメッセージが記録されれば問題なし。
tail /var/log/td-agent/td-agent.log
2018-07-08 16:32:27.642313787 +0900 debug.test: {"json":"message"}
コメント