SyslogをKafkaサーバに転送して、そこからGraylogをつかってlogをPub-Sub方式で取得をさせる

前回、syslogをKafkaに転送させるようにしたので、今度はそこからGraylogでログを取得する。 特にプラグインもなしでできるので、(いろいろと問題はあるが)なかなか良い感じだ。

設定は簡単で、[System] > [Inputs]で新規のインプットとして[GELF Kafka]を選択し、「Launch new input」から新しいインプットを作成するだけだ。

zookeeperのアドレスは複数指定できるので、各ノードのアドレスを指定してやる。

で、INPUTが正常に作成・動作したら、以下のようにKafkaからログが取得されるようになる。

このとき、タイムスタンプがGraylogがログを取得したタイミングになってしまうので注意。

また、注意したいのが2017年01月時点の今のバージョンだと、暗号化に対応していない点だ。 そのため、普通にtcpdumpで中身が見れてしまう。

[root@BS-PUB-CLUSTERTEST01 ~]# tcpdump -i ens18 -A port 9092 and host BS-PUB-GRAYLOG | grep test
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens18, link-type EN10MB (Ethernet), capture size 65535 bytes
..kq..k...syslog.................^...\.......]...P.3...........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_test000"}
..kw..k........^...P...(.........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 001"}
..k{..k........_...P..1q.........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 002"}
..k~..k........`...P.u[F.........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 003"}
..k...k........a...P.:M..........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 004"}
..k...k........b...P..'..........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 005"}
..k...k........c...P.............B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 006"}
..k...k........d...P.|...........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 007"}
..k...k........e...P. ...........B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 008"}
..k...k........f...P.............B{"host":"BS-PUB-CENT7-01","ident":"root","message":"test_tes 009"}

このため、Kafka⇔Graylog間の通信がインターネットなどの場合は、間にもう一個違うソリューションが必要になるかもしれない。

なお、うまく動かない場合はKafkaへの名前解決がちゃんと出来てるかを確認するといいだろう。zookeeperから返ってくる名前でKafkaにアクセスするので、もし名前解決ができないなら/etc/hostsなどに追記してやるなど、個別に対応が必要となる。