Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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 でのイベント処理について深堀する

quickguard
サーバ構築・移行・監視運用などインフラに関するお手伝いをするMSP事業社です。 昨今では、クラウド環境での自動化やコード化に力を入れて、お客様のサービスに 関わる運用をシンプルにすることを得意としています。
https://quickguard.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした