Chronograf + Telegraf + InfluxDBでSyslog Viewerを作る


時系列データの可視化は個人的な好みでGrafanaを使うことが多いので気づいていなかったが、いつの間にかChronografがSyslog Viewerとして使える様になっていたようだ。1
SyslogをWebUIで検索・閲覧する用途に最近では一般的にElasticsearchを利用しているケースが多いのだと思う。ただ特にクラスタ構成など必要ない小規模構成でもっと手軽に構築できれるものがほしいなと常々思っていたので早速自宅環境に導入してみた。

Syslogの時系列ヒストグラム表示がある。ログメッセージ検索は正規表現も可能。SeverityやFacility、Hostnameでの絞り込みも可能。もちろん特定時間帯のログのみを抽出することもできる。

構成

server側で用意するのはclientからのsyslogを514/udpポートで受けて6514/tcpポートへ転送するためのRsyslogに加え、Chronograf, Telegraf, InfluxDBのみ。

                   +------------------------------------------------+
                   |                                                |
                   |   +---------+                         server   |
+--------+ 514/udp |   |         |                                  |
| client +------------->         |                                  |
+--------+         |   |         |                                  |
                   |   | rsyslog |                                  |
+--------+ 514/udp |   |         |                                  |
| client +------------->         |                                  |
+--------+         |   |         |                                  |
                   |   +----+----+                                  |
                   |        |                                       |
                   |        | 6514/tcp                              |
                   |        |                                       |
                   |   +----v-----+  +----------+  +------------+   |
                   |   | telegraf +--> influxdb +--> chronograf |   |
                   |   +----------+  +----------+  +------------+   |
                   |                                                |
                   +------------------------------------------------+

設定

Chronograf, Telegraf, InfluxDBをInfluxCouldからDLし、手順通りにインストール&サービス起動する。

sudo systemctl start chronograf
sudo systemctl start telegraf
sudo systemctl start influxdb

Rsyslogはclientから514/udpポートで受け取ったsyslogを6514/tcpポートへ転送する。
/etc/rsyslog.d/50-forward.confファイルを作成し、以下の通り記述する。

$ModLoad imudp
$UDPServerRun 514

$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName srvrfwd # set file name, also enables disk mode
$ActionResumeRetryCount -1 # infinite retries on insert failure
$ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down

*.* @@(o)127.0.0.1:6514;RSYSLOG_SyslogProtocol23Format

Telegrafは6514/tcpポートで受け取ったsyslogをInfluxDBへ保存する。
/etc/telegraf/telegraf.confを編集し、以下の通り必要な箇所をコメントアウトする。

# # Accepts syslog messages per RFC5425
[[inputs.syslog]]
#   ## Specify an ip or hostname with port - eg., tcp://localhost:6514, tcp://10.0.0.1:6514
#   ## Protocol, address and port to host the syslog receiver.
#   ## If no host is specified, then localhost is used.
#   ## If no port is specified, 6514 is used (RFC5425#section-4.1).
  server = "tcp://:6514"

RsyslogとTelegrafを再起動して設定を反映。

sudo systemctl restart rsyslog
sudo systemctl restart telegraf

以上で設定は終わり。非常に簡単。

操作方法

上記の設定により既にInfluxdbにはログデータが蓄積されてはじめている。
http://<サーバーのIPアドレス>:8888/ へアクセスし、Chronografを起動して確認してみる。
イニシャルセットアップが始まるので指示通り無難に設定を終えて...

Log Viewerをクリック!

ちなみに以下のコマンドでダミーログを飛ばしてきちんと受信・表示されていることを確認できるので、何もログが表示されない場合はこれで切り分けを。

logger -n <サーバーのIPアドレス> -d test

あとは公式サイトを見ながらいろいろ試せる。
message検索など多少重さは感じるけど、対象時間帯を予め区切っておけばよいので別に問題はない。あと検索は大文字・小文字区別がある。
以下は公式サイトからの引用。

こんな感じで色々絞り込みをしたり...

特定時間のログを眺めたり...

楽しい!


  1. Release note を見るかぎりVer1.6から実装された模様