29
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TICK stack でモニタリング環境を構築 (Telegraf + InfluxDB + Chronograf + Kapacitor)

Posted at

#概要
TICK stack とやらを最低限の設定で構築する

TICK は以下の Influxdb 改め influxdata ツール群で構成される stack らしい

  • T - Telegraf – Data collection
  • I - InfluxDB – Data storage
  • C - Chronograf – Data visualization
  • K - Kapacitor – Data processing

構成は以下の通り
00.png
※公式サイトより

#環境
AWS にサーバを2台用意

  • ip-172-31-17-95 : Influxdb, Kapacitor, Chronograf
  • ip-172-31-17-94 : Telegraf

バージョンは以下の通り

  • CentOS release 6.7 (Final)
  • InfluxDB v0.10.0 (Beta)
  • Telegraf v0.10.0
  • Kapacitor v0.2.4
  • Chronograf v0.4

#各種インストール

InfluxDB インストール

$ wget https://influxdb.s3.amazonaws.com/influxdb-0.10.0-0.beta1.x86_64.rpm
$ sudo yum localinstall influxdb-0.10.0-0.beta1.x86_64.rpm

Telegraf インストール

$ wget http://get.influxdb.org/telegraf/telegraf-0.10.0-1.x86_64.rpm
$ sudo yum localinstall telegraf-0.10.0-1.x86_64.rpm

Kapacitor インストール

$ wget https://s3.amazonaws.com/influxdb/kapacitor-0.2.4-1.x86_64.rpm
$ sudo yum localinstall kapacitor-0.2.4-1.x86_64.rpm

Chronograf インストール

$ wget https://s3.amazonaws.com/get.influxdb.org/chronograf/chronograf-0.4.0-1.x86_64.rpm
$ sudo yum localinstall chronograf-0.4.0-1.x86_64.rpm

#InfluxDB セットアップ

とりあえずデフォルトのまま起動

$ sudo /etc/init.d/influxdb start

#Telegraf セットアップ

  • InfluxDB サーバを指定する
  • per cpu は無効にする
$ sudo vi /etc/telegraf/telegraf.conf

urls = ["http://172.31.17.95:8086"]

[[inputs.cpu]]
  percpu = false

Telegraf起動

$ sudo /etc/init.d/telegraf start

デフォルトで入る監視設定は以下

measurement field
cpu time_guest, time_guest_nice time_idle, time_iowait, time_irq, time_nice, time_softirq, time_steal, time_system, time_user, usage_guest, usage_guest_nice, usage_idle, usage_iowait, usage_irq, usage_nice, usage_softirq, usage_steal, usage_system, usage_user
disk free, fstype, inodes_free, inodes_total, inodes_used, path, total, used
diskio io_time name, read_bytes, read_time, reads, serial, write_bytes, write_time, writes
mem available, available_percent, buffered, cached, free, total, used, used_percent
swap free, in, out, total, used, used_percent
system load1, load15, load5

※10秒毎に上記メトリクスを InfluxDB に output する

#Kapacitor セットアップ

email 通知を有効化

$ sudo vi /etc/kapacitor/kapacitor.conf
/etc/kapacitor/kapacitor.conf
[smtp]
  enabled = true                   #有効化
  host = "127.0.0.1"
  port = 25
  username = ""
  password = ""
  from = "test@quickguard.net"     #送信元アドレス
  to = ["****@*************"]      #アラートメール通知先
  no-verify = false
  idle-timeout = "30s"

Kapacitor 起動

$ sudo /etc/init.d/kapacitor start

アラート設定

tick スクリプトを作成

cpu_alert.tick
stream
    .from().measurement('cpu')
    .alert()
                .warn(lambda: "usage_idle" < 30)  #idle 30%以下で warning
                .crit(lambda: "usage_idle" < 10)  #idle 30%以下で critical
        .email()                                  #email 通知

task を投入

$ kapacitor define -name cpu_alert -type stream -dbrp telegraf.default -tick cpu_alert.tick

task の有効化

$ kapacitor enable cpu_alert

監視対象のスペックが低いこともあり、軽く負荷かけると大量にメールが飛んできた

01.png

メールの件名でホスト名部分が nil になっているので修正する
flapping もうざいので何とかする

アラート調整

  • TagKey を group 化 (host, cpu)
  • window の定義を追加 (60秒毎に60秒間のデータを取得)
  • warn, crit 60秒間のデータの何れかが条件に一致した場合、alert に投げる
  • stateChangesOnly 追加 (ステータスが変化したときのみ)
  • ID 追加 (メールの件名に使用される message が {{ .ID }} is {{ .Level }} のため)
cpu_alert.tick
stream
  .from().measurement('cpu')
    .groupBy('host','cpu')
    .window()
      .period(60s)
      .every(60s)
    .alert()
      .id('{{ index .Tags "host" }}/{{ index .Tags "cpu" }}')
      .warn(lambda: "usage_idle" < 30)
      .crit(lambda: "usage_idle" < 10)
      .stateChangesOnly()
      .email()

task 再投入

$ kapacitor define -name cpu_alert -type stream -dbrp telegraf.default -tick cpu_alert.tick

確認

$ kapacitor show cpu_alert
Name: cpu_alert
Error:
Type: stream
Enabled: true
Executing: true
Databases Retention Policies: ["telegraf"."default"]
TICKscript:
stream
  .from().measurement('cpu')
    .groupBy('host','cpu')
    .window()
      .period(60s)
      .every(60s)
    .alert()
      .id('{{ index .Tags "host" }}/{{ index .Tags "cpu" }}')
      .warn(lambda: "usage_idle" < 30)
      .crit(lambda: "usage_idle" < 10)
      .stateChangesOnly()
      .email()

DOT:
digraph cpu_alert {
stream0 -> stream1 [label="12"];
stream1 -> window2 [label="1"];
window2 -> alert3 [label="0"];
}

task 一覧取得

$ kapacitor list tasks
Name                          Type      Enabled   Executing Databases and Retention Policies
cpu_alert                     stream    true      true      ["telegraf"."default"]

アラートメール確認
mail.png

注意事項

tick スクリプトの構文エラーは define 時にチェックされてエラーになる、ランタイムエラーが出るような task を突っ込むと panic になって落ちた後、起動不可になった

こんなの(groupBy を下に持ってくる)

cpu_alert.tick
stream
  .from().measurement('cpu')
    .window()
      .period(30s)
      .every(30s)
    .groupBy('host','cpu')
    .alert()
      .warn(lambda: "usage_idle" < 30)
      .crit(lambda: "usage_idle" < 10)
      .log('/tmp/cpu_alert.log'

対応 : task db を削除して初期化した

$ sudo rm /var/lib/kapacitor/tasks/task.db

#Chronograf セットアップ

外からアクセスできるようにする

$ sudo vi /opt/chronograf/config.toml

Bind = "0.0.0.0:10000"

Chronograf 起動

$ sudo /etc/init.d/chronograf start

http://{サーバIPアドレス}:10000 にアクセス

02.png

「Add new server」より「NICKNAME」を適当に入力して「Save」

「New Graph」にてグラフ名を設定して「BUILDER」でクエリ作成

telegraf で取得した cpu メトリクスのグラフ
04.png

次回は telegraf によるメトリクス取得と kapacitor でのイベント処理について深堀する

29
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?