Telegrafでサバーリソースを取得してInfluxDBに格納する
このブログ記事は移転しました。10秒後に自動でリダイレクトします。
----------------------
Telegraf は、InfluxDBと相性のよいメトリクスの収集ツールです。
Telegraf is an agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB
GitHub - influxdata/telegraf: The plugin-driven server agent for collecting & reporting metrics.
これまではZabbixとGrafana、(および、一部InfluxDB)を利用してサーバーリソース等のメトリクス表示をしていました。Zabbix Agent から取得したデータでもきちんとGrafanaにて表示できるので不自由はないのですが、ZabbixのDatabase (MySQL) から長期間・複数の情報を取得しようとすると、RDBMSの特性かどうしてもレスポンスが悪くなってしまっていました。
それならば、サーバーリソース系の情報もInfluxDBに格納してみようではないかと思ったのが動機です。
前提
- InfluxDB を利用できる環境が整っていること
環境がない場合、Dockerを利用するのが手軽です。Docker Hub - influxdb official repoxitory - Database は
create database telegraf
として作れているものとします - 本記事では Ubuntu 14.04 としています。16.04やRedHat系の場合、rcスクリプトが同じように操作できるかはわかりません(systemdでの操作になるので、できないと思います)
Telegraf エージェントのインストール
curl -LO https://dl.influxdata.com/telegraf/releases/telegraf_1.0.1_amd64.deb sudo dpkg -i telegraf_1.0.1_amd64.deb (Reading database ... 143760 files and directories currently installed.) Preparing to unpack telegraf_1.0.1_amd64.deb ... Unpacking telegraf (1.0.1-1) ... Setting up telegraf (1.0.1-1) ... Adding system startup for /etc/init.d/telegraf ... /etc/rc0.d/K20telegraf -> ../init.d/telegraf /etc/rc1.d/K20telegraf -> ../init.d/telegraf /etc/rc6.d/K20telegraf -> ../init.d/telegraf /etc/rc2.d/S20telegraf -> ../init.d/telegraf /etc/rc3.d/S20telegraf -> ../init.d/telegraf /etc/rc4.d/S20telegraf -> ../init.d/telegraf /etc/rc5.d/S20telegraf -> ../init.d/telegraf telegraf process is not running [ FAILED ] Starting the process telegraf [ OK ] telegraf process was started [ OK ]
FAILED となっている部分が若干気になりますが、起動はしているようなので問題無さそうです。
ps -ef | grep tele telegraf ..中略.. /usr/bin/telegraf -pidfile /var/run/telegraf/telegraf.pid -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d
標準の設定(2016/10/23時点)は以下コンフィグ /etc/telegraf/telegraf.conf
の状態で起動されました。
[global_tags] [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "" debug = false quiet = false hostname = "" omit_hostname = false [[outputs.influxdb]] urls = ["http://localhost:8086"] # required database = "telegraf" # required retention_policy = "" write_consistency = "any" timeout = "5s" [[inputs.cpu]] percpu = true totalcpu = true fielddrop = ["time_*"] [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs"] [[inputs.diskio]] [[inputs.kernel]] [[inputs.mem]] [[inputs.processes]] [[inputs.swap]] [[inputs.system]]
一旦終了しておきます。
sudo /etc/init.d/telegraf stop --> telegraf process was stopped [ OK ]
コンフィグ例
コンフィグにあたってはいくつかのサイトを参考にしたところ、バージョンによる理由か(?)記載方法が古かったりして情報が錯綜していたので、素直に本家プロジェクトサイトのコンフィグ例を参照するのがよさそうです。
telegraf/CONFIGURATION.md at master · influxdata/telegraf · GitHub
まず今回は、上記標準コンフィグのうち InfluxDB のURLのみ書き換えてそのまま利用しました。
[[outputs.influxdb]] urls = ["http://yuor-url:your-port"] # ここ。ローカル起動なら localhost で良いはず database = "telegraf" # required
起動テストが可能です。間違っていなければ、現在の値っぽい情報が表示されます。
telegraf -config /etc/telegraf/telegraf.conf -test
Telegraf の起動
RCスクリプトを利用して起動します。
sudo /etc/init.d/telegraf start sudo /etc/init.d/telegraf status
なお、
sudo telegraf -config telegraf.conf
このようにも起動可能です。
(RCスクリプトのstart
ではこのように実行されています。もっとたくさんの設定がありますが)
取得されたデータ
cpu,cpu=cpu-total,host=xxxhostxxx cpu,cpu=cpu0,host=xxxhostxxx cpu,cpu=cpu1,host=xxxhostxxx disk,fstype=ext2,host=xxxhostxxx,path=/boot disk,fstype=ext4,host=xxxhostxxx,path=/ diskio,host=xxxhostxxx,name=dm-0 diskio,host=xxxhostxxx,name=dm-1 diskio,host=xxxhostxxx,name=vda diskio,host=xxxhostxxx,name=vda1 diskio,host=xxxhostxxx,name=vda2 diskio,host=xxxhostxxx,name=vda5 kernel,host=xxxhostxxx mem,host=xxxhostxxx processes,host=xxxhostxxx swap,host=xxxhostxxx system,host=xxxhostxxx
host
の文字列は置き換えてあります。
例えば、cpu-total
からは以下の数値を取得可能です。
cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user
詳細は telegraf/CPU_README.md at master · influxdata/telegraf · GitHub より。
同様に、
Supported Input Plugins · influxdata/telegraf · GitHub
セクションに記載されているリンクから各種詳細を取得することができるようです。
ここまでくれば、あとは普段の使い方でGrafanaから数値を取得できるはずです。