# Logstash Import Integration

[Logstash](https://www.elastic.co/products/logstash)は、ログ管理用のオープンソースソフトウェアであり、ELKスタックの一部として広く使用されています。

Logstashには、多くのソースからデータを収集、フィルタリング、保存し、多くの宛先に送信するための多数のプラグインが存在します。Treasure Dataプラグインを作成することで、LogstashからTreasure Dataにデータを取り込むことができます。

## Treasure Data Logstashプラグインのインストールと設定

Logstash用のTreasure Dataプラグインをインストールできます。以下の例では、Logstashがすでにインストールおよび設定されていることを前提としています。


```bash
$ cd /path/of/logstash
$ bin/plugin install logstash-output-treasure_data
Validating logstash-output-treasure_data
Installing logstash-output-treasure_data
Installation successful
```

LogstashをTreasure Dataサービスで設定します。Logstashデータのインポート先となるdatabaseとtableの名前を指定する必要があります。APIキーは、Treasure コンソールのプロファイルから取得できます。write-onlyキーを使用してください。


```conf
input {
  # ...
}
output {
  treasure_data {
    apikey   => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    database => "dbname"
    table    => "tablename"
    endpoint => "api-import.treasuredata.com"
  }
}
```

設定ファイルを使用してLogstashを起動します。


```bash
$ bin/logstash -f your.conf
```

Treasure コンソールでデータの行を確認できます。ログメッセージテキストはmessageカラムに保存され、追加のカラム(例: time、host、version)が存在します。

![](/assets/logtash-td.3c9a41c1e020ed11569ac4a2873a1951219c2ac01bd125e726091791f45b9d62.8c2a6faf.png)

## パラメータ

ログはテーブルに保存されます。2つ以上のテーブルにデータを挿入する場合は、設定ファイルに2つ以上のセクションを作成してください。

Logstash設定では、以下のオプションを指定できます:

- apikey(必須)
- database(必須)
- table(必須)
- auto_create_table [true]: テーブルが存在しない場合にテーブルを作成します
- endpoint [[api.treasuredata.com](http://api.treasuredata.com)]
- use_ssl [true]
- http_proxy [none]
- connect_timeout [60s]
- read_timeout [600s]
- send_timeout [600s]


プラグインはほとんどの場合、デフォルト値で動作しますが、一部のパラメータは不安定なネットワーク環境で役立つ場合があります。

このプラグインは、データを最大5分間メモリバッファにバッファリングします。Logstashプロセスがクラッシュすると、バッファリングされたデータは失われます。インポート中のデータ損失を回避するには、Logstashプラグインと共にtd-agentを使用することをお勧めします。

## td-agentと組み合わせたLogstashプラグイン

Logstashプラグインは、バッファリング、保存されたテーブル仕様、およびパフォーマンスの面で制限されています。

より柔軟で高性能なデータ転送には、Treasure Agent([td-agent](https://docs.treasuredata.com/smart/project-product-documentation/about-treasure-data-s-server-side-agent))を使用できます。これを行うには、logstash-output-fluentdを使用します。


```
[host a]
  -> (logstash-output-fluentd) -+
[host b]                        |
  -> (logstash-output-fluentd) -+- [Treasure Agent] -> [Treasure Data]
[host c]                        |
  -> (logstash-output-fluentd) -+
```

Logstashをtd-agentノードにログを送信するように設定でき、そのtd-agentがすべてのデータをTreasure Dataに保存します。


```conf
# Configuration for Logastash
input {
  # ...
}
output {
  fluentd {
    host => "your.host.name.example.com"
    port => 24224 # default
    tag  => "td.database.tablename"
  }
}
# Configuration for Fluentd
<source>
  @type forward
  port 24224
</source>
<match td.*.*>
  type tdlog
  endpoint api-import.treasuredata.com
  apikey YOUR_API_KEY
  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td
  use_ssl true
  num_threads 8
</match>
```

Fluentd tdlogプラグインは、td.dbname.tablenameを解析することで、多くのdatabase-tableの組み合わせにデータを保存できます。Logstash設定ファイルで任意のdatabaseとtableのペアを設定できます。

## 詳細情報

- [github.com/tagomoris/logstash-output-treasure_data](https://github.com/tagomoris/logstash-output-treasure_data)
- [github.com/tagomoris/logstash-output-fluentd](https://github.com/tagomoris/logstash-output-fluentd)