Chronograf + Telegraf + InfluxDBでSyslog Viewerを作る

時系列データの可視化は個人的な好みでGrafanaを使うことが多いので気づいていなかったが、いつの間にかChronografがSyslog Viewerとして使える様になっていたようだ。[^1]
[^1]: [Release note](https://www.influxdata.com/blog/chronograf-1-6-released-introducing-log-viewer-and-additional-sharing-capabilities/) を見るかぎりVer1.6から実装された模様

SyslogをWebUIで検索・閲覧する用途に最近では一般的にElasticsearchを利用しているケースが多いのだと思う。ただ特にクラスタ構成など必要ない小規模構成でもっと手軽に構築できれるものがほしいなと常々思っていたので早速自宅環境に導入してみた。

![Capture2.JPG](https://qiita-image-store.s3.amazonaws.com/0/16560/d4762eaa-ceb7-8504-b5a5-5f2401e27ed9.jpeg)

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](https://portal.influxdata.com/downloads/)から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`をクリック！
![Capture.JPG](https://qiita-image-store.s3.amazonaws.com/0/16560/46396948-fcc7-a372-a93a-5dd64e15a113.jpeg)

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

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

あとは[公式サイト](https://docs.influxdata.com/chronograf/v1.7/guides/analyzing-logs/)を見ながらいろいろ試せる。
message検索など多少重さは感じるけど、対象時間帯を予め区切っておけばよいので別に問題はない。あと検索は大文字・小文字区別がある。
以下は公式サイトからの引用。

こんな感じで色々絞り込みをしたり...
![絞り込み](https://docs.influxdata.com/img/chronograf/log-viewer-search-filter.gif)

特定時間のログを眺めたり...
![絞り込み](https://docs.influxdata.com/img/chronograf/log-viewer-specific-time.gif)

楽しい！:v: