# JSON形式を使用したログのインポート

Treasure Agent(td-agent)からJSON形式のログをインポートして、アクセスログをクラウドに継続的にインポートできます。

**td-agentはログローテーションを処理します**。td-agentはログの最終位置の記録を保持し、td-agentプロセスがダウンした場合でも、各行が正確に1回だけ読み取られることを保証します。ただし、情報はファイルに保存されるため、ファイルが破損すると「正確に1回」の保証が破られます。

## 前提条件

`td-agent:td-agent`には、ログを読み取る権限が必要です。

## td-agentのインストール

td-agentは[Fluentdプロジェクト](http://fluentd.org/)の下にあります。td-agentは、Treasure Data用のカスタムプラグインでFluentdを拡張します。

アプリケーションサーバーに'td-agent'をインストールする必要があります。td-agentは、あらゆる種類の時系列データのストリーミングアップロード専用のデーモンプログラムです。td-agentはTreasure Dataによって開発・維持されています。

td-agentをセットアップするには、以下の記事を参照してください。Linuxシステム用のdeb/rpmパッケージを提供しています。

| **環境** | **参照先** |
|  --- | --- |
| MacOS X | [MacOS Xへのtd-agentのインストール](https://docs.fluentd.org/installation/install-fluent-package/install-by-dmg-fluent-package) |
| Ubuntuシステム | [DebianおよびUbuntu用のtd-agentのインストール](https://docs.fluentd.org/installation/install-fluent-package/install-by-deb-fluent-package) |
| RHEL / CentOSシステム | [RedhatおよびCentOS用のtd-agentのインストール](https://docs.fluentd.org/installation/install-by-rpm) |
| AWS Elastic Beanstalk | [AWS Elastic Beanstalkへのtd-agentのインストール](https://github.com/treasure-data/elastic-beanstalk-td-agent) |


## td-agent.confの変更

`apikey`オプションを設定して、認証キーを指定します。API keyはTreasure コンソールから確認できます。

/etc/td-agent/td-agent.confにアクセスして、`apikey`オプションを設定します。

*YOUR_API_KEY*は、あなたのAPI key文字列である必要があります。


```conf
# Tailing the JSON formatted Logs
<source>
  type tail
  format json
  tag td.production.foo
  path /path/to/the/file/foo.json
  pos_file /var/log/td-agent/foo.pos
</source>

# Treasure Data Input and Output
<match td.*.*>
  type tdlog
  endpoint api.treasuredata.com
  apikey YOUR_API_KEY
  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td
  use_ssl true
</match>
```

以下の行が設定されたら、agentを再起動します。


```
$ sudo /etc/init.d/td-agent restart
```

td-agentはファイルをテーリングし、ログをバッファリングし(*var/log/td-agent/buffer/td*)、自動的にログをクラウドにアップロードします。

## データインポートの確認

以下の例は、サンプルログファイルです。ログファイルに新しい行が追加されるたびに、td-agentはその行を解析し、レコードをバッファに追加します。td-agentは5分ごとにデータをクラウドにアップロードします。データを即座にアップロードするには、SIGUSR1シグナルを送信します。


```bash
$ tail -n 5 /path/to/the/file/foo.json
{"a"=>"b", "c"=>"d"}
{"a"=>"b", "c"=>"d", "e"=>1}
{"a"=>"b", "c"=>"d", "e"=>1, "f"=>2.0}
{"a"=>"b", "c"=>"d"}
{"a"=>"b", "c"=>"d", "e"=>1}
```

すべてが正しく設定されていることを確認するには、以下のコマンドを実行します。


```bash
# append new entries
$ tail -n 3 /path/to/the/file/foo.json > sample.txt # ログの最後の3行を取得し...
$ cat sample.txt >>/path/to/the/file/foo.json       # それらをバッファファイルに追加してtailプラグインをトリガーします。

# flush the buffer
$ kill -USR1 `cat /var/run/td-agent/td-agent.pid`
```

データが正常にアップロードされたことを確認するには、次のように`td tables`コマンドを実行します。


```bash
td tables
+------------+------------+------+-----------+
| Database   | Table      | Type | Count     |
+------------+------------+------+-----------+
| production | foo        | log  | 3         |
+------------+------------+------+-----------+
```

正しく動作しない場合は、`/var/log/td-agent.log`を確認してください。`td-agent:td-agent`には、ログを読み取る権限が必要です。

## 次のステップ

従来のRDBMSよりも柔軟なスキーマメカニズムを提供しています。クエリには、Hive Query Languageを活用します。

- [Schema Management](/products/customer-data-platform/data-workbench/databases/schema-management)
- [Hive Query Language](/products/customer-data-platform/data-workbench/queries/hive/quickstart)
- [REST APIとそのバインディングによるプログラマティックアクセス](/tools/cli-and-sdks/api-references-and-tool-references)