出典について
この記事はInfluxDB BlogのCameron Sparr氏によるUsing Telegraf to send metrics to InfluxDB and Kafka(2015/09/17)を翻訳したものです。
はじめに
Telegrafはどんなサーバー上でも動作し、様々なメトリクスをシステム(CPU、メモリ、スワップなど)、共通のサービス(MySQL, Redis, PostgreSQLなど)、サードパーティーのAPI(近日公開予定)から収集できるデーモンである。データの収集および、データの出力の両方でプラグインアーキテクチャを採用しているため、拡張が容易である。Go言語で書かれており、これは外部依存性なしにどんなシステム上でも実行可能なコンパイルされたスタンドアロンバイナリであることを意味する(npm, pip, gemあるいは他の必要となるパッケージ管理システムが不要)。
Telegrafは元々はInfluxDBのメトリック収集エージェントとして開発されたが、最近ではKafka、Datadog、そしてOpenTSDBのような他のデータ格納媒体にもメトリックを出力できるように発展をとげた。これによりユーザーはInfluxDBを既存のモニタリングおよびロギングスタックに容易に組込み、また、KafkaまたはDatadogのデータを利用する既存のツールを使い続けることが可能となった。
このガイドでは、次のことを取扱う
- TelegrafのインストールおよびCPUのデータを収集する為の設定方法
- Telegrafの起動
- KafkaでTelegrafのデータをみる
- InfluxDBの管理インターフェースとChronografからTelegrafのデータをみる
このガイドのKafkaの部分は完全にオプションとして利用するものである。InfluxDBにデータを出力したいだけなら、Kafkaに関する全てのステップを飛ばして、outputs.kafka
の部分をサンプルのコンフィグから削除すれば良い。
前提条件
始める前に次の事項が必要である
- InfluxDBサーバー
- まだなければ、dockerコンテナからデータベースを起動することができる。私はinfluxdbレポジトリ内の
build-docker.sh
スクリプトから、自分のInfluxDBのdockerイメージを作った。
- まだなければ、dockerコンテナからデータベースを起動することができる。私はinfluxdbレポジトリ内の
- Kafkaブローカ
- このデモではKafkaブローカをdockerコンテナでspotify/kafkaディストリビューションを使って起動している。dockerがインストール済みであると仮定すれば、次のようにすれば良い
docker run -d -p 2181:2181 -p 9092:9092 \
--env ADVERTISED_HOST=localhost \
--env ADVERTISED_PORT=9092 spotify/kafka
注: このガイドはOSXでも実行できる。localhost
をboot2docker ip
またはdocker-machine ip <name>
で置き換え、Telegrafをhomebrewでインストールすればよい。
ステップ1: Telegrafのインストール
Telegrafはgithub page .deb または .rpm パッケージからインストールすることができるが、今回のシンプル化したデモの為にスタンドアロンバイナリのみを利用する
wget http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.1.8.tar.gz
tar -xvf telegraf_linux_amd64_0.1.8.tar.gz
mv ./telegraf_linux_amd64 /usr/local/bin/telegraf
ステップ2: Telegrafの設定
Telegrafは全てのプラグインと出力先のコンフィグを含んだコンフィグのサンプルを生成する機能を提供している。telegraf -sample-config
である。このガイドではよりシンプルなコンフィグを利用するので、下記の設定を~/telegraf.toml
として保存して欲しい。必要に応じて、環境に合わせて# EDIT THIS LINE
で示された2行を編集すれば良い。
# OUTPUTS
[outputs]
[outputs.influxdb]
# The full HTTP endpoint URL for your InfluxDB instance
url = "http://localhost:8086" # EDIT THIS LINE
# The target database for metrics. This database must already exist
database = "telegraf" # required.
[outputs.kafka]
# URLs of kafka brokers
brokers = ["localhost:9092"] # EDIT THIS LINE
# Kafka topic for producer messages
topic = "telegraf"
# PLUGINS
# Read metrics about cpu usage
[cpu]
# Whether to report per-cpu stats or not
percpu = false
# Whether to report total system cpu stats or not
totalcpu = true
ステップ3: Telegrafの起動
Telegrafは-test
オプションをつけて起動すると、cpu
プラグインの1セットのメトリクスが標準出力に出力される。1つ気をつけて欲しいのはCPU利用率が含まれていないことで、これは2つの計測データを必要とする為である。
$ telegraf -config ~/telegraf.toml -test
* Plugin: cpu
> [cpu="cpu-total"] cpu_user value=5.75
> [cpu="cpu-total"] cpu_system value=4.59
> [cpu="cpu-total"] cpu_idle value=11226.01
[...]
> [cpu="cpu-total"] cpu_busy value=12.15
これでTelegrafを起動する準備が整い、自動的に付与されるhost
タグおよび、tomlファイルで設定された全てのタグを利用して、設定されたInfluxDBサーバーおよびKafkaブローカに計測値を送り始める。
$ telegraf -config telegraf.toml
2015/09/01 22:01:41 Starting Telegraf (version 0.1.8)
2015/09/01 22:01:41 Loaded outputs: influxdb kafka
2015/09/01 22:01:41 Loaded plugins: cpu
2015/09/01 22:01:41 Tags enabled: dc=us-east-1 host=myserver
上記で分かるように、influxdb
およびkafka
が出力先として設定され、cpu
プラグインがロードされたことをTelegrafが示している。
ステップ4: Kafkaのデータをみる
Kafka コンソール コンシューマを使ってKafkaブローカがTelegrafから送信されたInfluxDBのラインプロトコルのメッセージを受取っているかを確認する。
コンソール コンシューマを起動する為には、Kafkaのソースをダウンロードする
wget http://apache.arvixe.com//kafka/0.8.2.0/kafka_2.10-0.8.2.0.tgz
tar -zxf kafka_2.10-0.8.2.0.tgz
cd kafka_2.10-0.8.2.0/
それから起動する(必要に応じてlocalhost
をご利用のKafkaブローカのアドレスに置き換えること)
$ ./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic telegraf --from-beginning
[...]
cpu_percentageUser,cpu=cpu-total,dc=us-east-1,host=myserver value=0.4024144869214442
cpu_percentageSystem,cpu=cpu-total,dc=us-east-1,host=myserver value=0.8048289738428706
cpu_percentageIdle,cpu=cpu-total,dc=us-east-1,host=myserver value=98.6921529174951
cpu_percentageNice,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageIowait,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageIrq,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageSoftirq,cpu=cpu-total,dc=us-east-1,host=myserver value=0.10060362173035882
cpu_percentageSteal,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageGuest,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageGuestNice,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageStolen,cpu=cpu-total,dc=us-east-1,host=myserver value=0.0
cpu_percentageBusy,cpu=cpu-total,dc=us-east-1,host=myserver value=1.3078470824946893
上記のように、それぞれのTelegrafがデータベースに送信しているInfluxDBのラインプロトコルのメッセージはKafkaブローカにも記録されており、これにより我々はラインプロトコルのデータを処理しKafkaと連携する任意のツールで扱えるようになる。
ステップ5: InfluxDBのデータをWebUIとChronograf経由でみる
http://localhost:8083/のInfluxDBのウェブインターフェースがみつけられれば、cpu_percentageBusy
データに関するクエリを発行し、Telegrafが適切な計測値を出力しているかどうかを確認できる。
SELECT * FROM cpu_percentageBusy WHERE host='myserver' AND dc='us-east-1'
[画像]InfluxDB管理コンソールのユーザーインターフェース ※元記事へのリンク
標準のInfluxDBの管理インターフェースは極めて簡易なものであるが、InfluxDB社はChronografと呼ばれる時系列データの可視化ツールも開発しており、次に示すような外見のグラフを作ることができる。
[画像]Chronografのユーザーインターフェース ※元記事へのリンク
これは次のCPU busyのパーセンテージのクエリをグラフ化しているもので、このクエリはChronografの組込みのクエリビルダでも作成できる。
SELECT "value" FROM "telegraf".."cpu_percentageBusy" WHERE time > now() - 1h AND "cpu"='cpu-total'
次のステップ
Telegrafには既に利用可能なプラグインがたくさんあり、出力オプションもいくつかある。全てのプラグインおよび出力先をどのように設定するかに関するドキュメントはtelegraf -sample-config
を実行するか、それぞれのプラグインに対してtelegraf -usage プラグイン名
を実行するかでえられる。
Cameron Sparr氏はInfluxDB社に所属しており、Telegrafのコアコントリビュータである。