telegrafで複数入出力をルーティングする方法

# 本記事の目的
* telegrafを利用してinfluxdb等にデータを取り込む場合に、データソースによって格納先のDBを分けたいケースに対処する方法を解説する
    * 事例1: /var/log/hogeはinfluxdbのhogeデータベース、/var/log/fugaはinfluxdbのfugaデータベースに流したい
    * 事例2:　systemデータソースはinfluxdbに流し、apacheデータソースはelasticsearchに流したい
* 事例1のケースを中心に解説するが、事例2でも考え方は同じとなる。
* 2通りの手段を解説する

## 環境
* telegraf 1.20.4
    * input-filter : tail
    * output-filter : influxdb
* influxdb 1.8.10
* AlmaLinux 8.6 ※CentOSでも同様となる

## やること
* `/var/log/metrics/stream1/`と、`/var/log/metrics/stream2/`にそれぞれログが吐き出されており、`stream1/*.log` はinfluxdbDBの「stream1」に、`stream2/*.log` は「stream2」に格納したい


# 方式1
* 方式1は、telegrafのマニュアルに記載のある、input時にタグ付けをして振り分ける方式を説明する
* マニュアルページ: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md

## config

```
[[inputs.tail]]
  files = ["/var/log/metrics/stream1/*.log"]

[[inputs.tail]]
  files = ["/var/log/metrics/stream2/*.log"]
  [inputs.tail.tags]
    influxdb_database = "stream2"

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "stream1"
  [outputs.influxdb.tagdrop]
    influxdb_database = ["*"]

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "stream2"
  tagexclude = ["influxdb_database"]
  [outputs.influxdb.tagpass]
    influxdb_database = ["stream2"]
```

### 解説
* `stream1/*.log`はデフォルトデータソースと位置付け、何もしていない
* `stream2/*.log`を制御するため、influxdb_databaseというタグをつけ、タグ値に`stream2`をつけている
* `stream1`向けのouput設定： 「influxdb_database」というタグの付いたinputはすべてdropする
* `stream2`向けのoutput設定： 「influxdb_database」タグでタグ値「stream2」が付いたinputを取り込む。また取り込むと同時に、input時に付与したタグ「influxdb_database」を除去している

### 参考： 別のやり方
```
[[inputs.tail]]
  files = ["/var/log/metrics/stream1/*.log"]
  [inputs.tail.tags]
    influxdb_database = "stream1"

[[inputs.tail]]
  files = ["/var/log/metrics/stream2/*.log"]
  [inputs.tail.tags]
    influxdb_database = "stream2"

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "stream1"
  tagexclude = ["influxdb_database"]
  [outputs.influxdb.tagpass]
    influxdb_database = ["stream1"]

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "stream2"
  tagexclude = ["influxdb_database"]
  [outputs.influxdb.tagpass]
    influxdb_database = ["stream2"]
```

* こちらの方が、より明示的な制御となる。
* 入力時にinfluxdb_databaseタグと、出力先をタグ値にて指定。出力時にタグ値を元にtagpassにより選別している

# 方式2
* 方式2は、telegrafのプロセスを複数立て、それぞれで独立させて制御する方法を解説する

## 手順
* telegrafをインストールすると、プロセス起動ファイルが`/etc/systemd/system/multi-user.target.wants/telegraf.service`として作成されるため、これを複製する。
* telegraf2.serviceとして複製する

```
$ cd /usr/lib/systemd/system
$ sudo cp telegraf.service telegraf2.service
$ cd /etc/systemd/system/multi-user.target.wants
$ sudo ln -s /usr/lib/systemd/system/telegraf2.service
```

* telegraf2.serviceを編集し、コンフィグファイル先を変更する
* `/etc/telegraf2/`を2つ目のtelegrafのconfig置き場とする

```
$ diff telegraf.service telegraf2.service
7c7
< EnvironmentFile=-/etc/default/telegraf
---
> EnvironmentFile=-/etc/default/telegraf2
9c9
< ExecStart=/usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d $TELEGRAF_OPTS
---
> ExecStart=/usr/bin/telegraf -config /etc/telegraf2/telegraf.conf -config-directory /etc/telegraf2/telegraf.d $TELEGRAF_OPTS
```

* ここまで複製したら、あとは個別のサービスとして制御するのみ。
* `$ sudo systemctl start telegraf2`としてサービス開始できる。