Telegraf updates(0.1.8)


本エントリでは[InfluxDB専用のメトリックスコレクタTelegrafを使ってみた](http://qiita.com/takaidohigasi/items/fdc81db8336aa7601fc9)(2015/7/19)からのアップデート情報を記載します。

InfluxDB、Telegraf両方のアップデートに影響を受けるので関連する情報を記載します。

# InfluxDBの変更点

本記事は0.9.3-1を対象にしています。

0.9の中でも0.9.3で行われた「ラインプロトコルの変更」はクライアント側が影響を受ける可能性があるので注意してください。

* 0.9.3のリリースノート
 * [公式サイト](https://influxdb.com/blog/2015/08/26/InfluxDB-0_9_3-released-with-compression-and-improved-write-throughput.html)
 * [日本語訳](https://yakst.com/ja/posts/3012)
* [Line Protocol](https://influxdb.com/docs/v0.9/write_protocols/line.html) 

Telegraf以外のInfluxDBへデータを入れているクライアントは同様に影響を受ける可能性があるでしょう。

# Telegrafの変更点

本記載は網羅的に変更点を確認したものではなく、気がついた変更点を記載したものですのでご了承ください。

## InfluxDBとのバージョン互換

上記に述べたラインプロトコルの変更により、InfluxDBとの互換性に注意が必要です。

> Due to a breaking change to the InfluxDB integer line-protocol, there are some InfluxDB compatibility requirements:
> * InfluxDB 0.9.3+ requires Telegraf 0.1.5+
> * InfluxDB 0.9.2 and prior requires Telegraf 0.1.4

※[README.md](https://github.com/influxdb/telegraf/blob/master/README.md)より抜粋



## コンフィグ記法の変更

コンフィグの変更点について記載します。

### InfluxDBへの主要な設定を記載するセクションの変更

#### 観測するエラー

outputsセクションがなく正常なコンフィグでない旨のエラーが出力される

```
[vagrant@client-node ~]$ sudo tail -f /var/log/telegraf/telegraf.log
2015/09/16 00:38:00 Error: no outputs found, did you provide a valid config file?
```

#### 変更点

before)

```
# Configuration for influxdb server to send metrics to
[influxdb]
# The full HTTP endpoint URL for your InfluxDB instance
url = "http://{{ primary_log_server_address }}:8086" # required.
```

after)

```
# Configuration for influxdb server to send metrics to
[outputs]
[outputs.influxdb]
# The full HTTP endpoint URL for your InfluxDB instance
url = "http://{{ primary_log_server_address }}:8086" # required.
```

### プラグインオプションの追加 (0.1.5)

各プラグインで利用できるオプションについて旧来の

* pass
* drop
* interval

に加え、新たに

* tagpass
* tagdrop

が追加されました。README記載の下記サンプルが参考になるでしょう。
記載の通りtagpass条件がOR判定であることに注意しましょう。

```
# Don't collect CPU data for cpu6 & cpu7
[cpu.tagdrop]
    cpu = [ "cpu6", "cpu7" ]

[disk]
[disk.tagpass]
    # tagpass conditions are OR, not AND.
    # If the (filesystem is ext4 or xfs) OR (the path is /opt or /home)
    # then the metric passes
    fstype = [ "ext4", "xfs" ]
    path = [ "/opt", "/home" ]
```

### mysqlプラグインのサーバー指定の不具合

メトリック取得対象のホストに対してserverタグが付与されるようになりました。
この変更に伴い不具合と思われる事象を観測しています。

#### 観測するエラー

serverタグに対する値がないためエラーが発生しています。

```
2015/09/16 01:40:17 Error in output [influxdb]: unable to parse 'mysql_aborted_clients,host=client-node,server= value=0i': missing tag value
2015/09/16 01:40:17 Error encountered flushing outputs
```

#### 発生条件

mysqlプラグインでは収集対象(およびユーザー、パスワード)をserversで指定します。
※収集対象は指定がない場合はlocalhostとなります
localhostにroot/nopassでつなぎにいく従来の設定が失敗します。

```
# 失敗する例: 1
[mysql]
servers = ["localhost"]

# 失敗する例: 2　記載なし、デフォルト
[mysql]
# servers = ["localhost"]
```

#### ワークアラウンド

ちゃんとコンフィグを書いてあげます。ローカルのMySQLに対する設定例です。

```
servers = ["root:@tcp(127.0.0.1:3306)/"]
```

下記も参考にしてください。

https://github.com/influxdb/telegraf/blob/master/plugins/mysql/mysql.go#L16-L24

対応状況は[関連Issue](https://github.com/influxdb/telegraf/issues/201)をご確認ください

※2015/9/17 修正されました。

https://github.com/influxdb/telegraf/commit/66ed4f7328872b9dc86da226d1cca62418f78b5f

### cpuメトリック取得の改善

CPUコア毎の情報を取得するかどうか、システム全体の統計を取得するかどうかが簡易に指定できるようになりました。

```
[cpu]
        # Whether to report per-cpu stats or not
        percpu = true
        # Whether to report total system cpu stats or not
        totalcpu = true
```

## プラグインの追加

### pingプラグイン

指定したアドレスに対するpingのレスポンスなどを記録できます。

#### コンフィグ

サンプルコンフィグを抜粋。urlに対してタグがつきます。

```
[ping]
	# urls to ping
	urls = ["www.google.com"] # required
	# number of pings to send (ping -c <COUNT>)
	count = 1 # required
	# interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
	ping_interval = 0.0
	# ping timeout, in s. 0 == no timeout (ping -t <TIMEOUT>)
	timeout = 0.0
	# interface to send ping from (ping -I <INTERFACE>)
	interface = ""
```

#### 観測項目

統計を取ってみると結構楽しいです。

* ping_average_response_ms
* ping_packets_received
* ping_packets_transmitted
* ping_percent_packet_loss

###  その他

下記にプラグインの一覧があります。

https://github.com/influxdb/telegraf/blob/master/plugins/all/all.go

execプラグイン、httpjsonプラグインは、JSONを返す任意のコマンド/HTTPサービスを指定して観測できて面白そうです。

## 連携先(output)の追加

* datadog(0.1.6)
* Kafka(0.1.7)

# 終わりに

本変更に対してTelegrafのサンプルコードに反映しています。ご活用ください。

https://github.com/takaidohigasi/telegraf-sample

* InfluxDB 0.9.1, Telegraf 0.1.4: [v1.0](https://github.com/takaidohigasi/telegraf-sample/releases/tag/v1.0)
* InfluxDB 0.9.3, Teletgaf 0.1.8: [v1.1](https://github.com/takaidohigasi/telegraf-sample/releases/tag/v1.1) [New]