概要

前回 TICK stack を構築した際に telegraf の Docker input と CloudWatch output の plugin が気になったのでセットアップしてみる。

環境

AWS にインスタンスを2台用意

  • ip-172-31-17-95 : docker, Telegraf
  • ip-172-31-17-94 : docker, Telegraf

バージョンは以下の通り

  • CentOS release 6.7 (Final)
  • Docker version 1.7.1
  • Telegraf Version v0.10.0-52-g5349a3b

各種インストール

Docker インストール

$ sudo yum -y install epel-release
$ sudo yum -y install docker-io

Telegraf インストール

2016/01/25 時点のリリース版(v0.10.0)では CloudWatch output に対応していないため、ビルドする必要がある

$ sudo yum -y install golang
$ export GOPATH=`pwd`
$ go get github.com/influxdata/telegraf
$ cd $GOPATH/src/github.com/influxdata/telegraf
$ make

前回 のインスタンスの使いまわしのため、telegraf は rpm でインストール済みなので、出来たバイナリを /usr/bin/telegraf に上書きする

version 確認

$ telegraf -version
Telegraf - Version v0.10.0-52-g5349a3b

make 時に固まる場合

CentOS 6.X の BasePepo で入る git-1.7.1 だと go get gopkg.in/**** で固まったので、git-2.7.0 にアップデートしたら直った

原因

git のバグらしい

Telegraf セットアップ

  • AWS 側での事前準備
    • IAM Role 設定
    • Credential 取得

docker input, cloudwatch output の設定

/etc/telegraf/telegraf.conf

[agent]
  interval = "10s"
  round_interval = true
  flush_interval = "10s"
  flush_jitter = "0s"
  debug = false
  hostname = ""

[[outputs.cloudwatch]]
  region = 'ap-northeast-1'
  namespace = 'InfluxData/Telegraf'          #cloudwatch 側に表示される NameSpace

[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  container_names = []

Credential を環境変数にセットする

export AWS_ACCESS_KEY_ID="AKXXXXXXXXXXXXXXXXXX"
export AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

各インスタンスで telegraf 起動

$ sudo /etc/init.d/telegraf start

Docker コンテナ起動

2台のインスタンスで適当にコンテナ起動

1台目

$ sudo docker run --name nginx-1 -d -p 8080:80 nginx
$ sudo docker run --name redis-1 -d redis

2台目

$ sudo docker run --name nginx-2 -d -p 8080:80 nginx
$ sudo docker run --name redis-2 -d redis

ClowdWatch で確認

AWSコンソールの Custom Metrics に InfluxData/Telegraf が追加される

グラフ作成

以下のタグが作成される

  • cont_id (container ID)
  • cont_image (container イメージ)
  • cont_name (container 名)

上記タグを使って、特定のコンテナグループのメトリクスをグラフ化できる

グラフを作成してダッシュボードに登録

telegraf の docker input plugin で取得できるメトリクスは以下の通り

  • mem

    • total_pgmafault
    • cache
    • mapped_file
    • total_inactive_file
    • pgpgout
    • rss
    • total_mapped_file
    • writeback
    • unevictable
    • pgpgin
    • total_unevictable
    • pgmajfault
    • total_rss
    • total_rss_huge
    • total_writeback
    • total_inactive_anon
    • rss_huge
    • hierarchical_memory_limit
    • total_pgfault
    • total_active_file
    • active_anon
    • total_active_anon
    • total_pgpgout
    • total_cache
    • inactive_anon
    • active_file
    • pgfault
    • inactive_file
    • total_pgpgin
    • max_usage
    • usage
    • failcnt
    • limit
  • cpu

    • throttling_periods
    • throttling_throttled_periods
    • throttling_throttled_time
    • usage_in_kernelmode
    • usage_in_usermode
    • usage_system
    • usage_total
  • net

    • rx_dropped
    • rx_bytes
    • rx_errors
    • tx_packets
    • tx_dropped
    • rx_packets
    • tx_errors
    • tx_bytes
  • blkio

    • io_service_bytes_recursive_async
    • io_service_bytes_recursive_read
    • io_service_bytes_recursive_sync
    • io_service_bytes_recursive_total
    • io_service_bytes_recursive_write
    • io_serviced_recursive_async
    • io_serviced_recursive_read
    • io_serviced_recursive_sync
    • io_serviced_recursive_total
    • io_serviced_recursive_write

※Docker version 1.7.1 では net のメトリクス取得不可

Docker 1.9.1 では取得できた

$ telegraf -config telegraf.conf -input-filter docker -test | grep docker_net
> docker_net,cont_id=52c817ad4cf8be1294bf1c0c089a9d2b60d5753c84359d0957047b8fd361e803,cont_image=redis,cont_name=redis-3,network=eth0 rx_bytes=648i,rx_dropped=0i,rx_errors=0i,rx_packets=8i,tx_bytes=648i,tx_dropped=0i,tx_errors=0i,tx_packets=8i 1453696361692103488