ラベル influxdb の投稿を表示しています。 すべての投稿を表示
ラベル influxdb の投稿を表示しています。 すべての投稿を表示

2017年8月14日月曜日

kapacitor を使って Slack に通知を送ってみた

概要

前回 までに InfluxDB, telegraf, Chronograf と試してきました
今回はアラートを送るための kapacitor を使って見ました
デフォルトで Slack に通知できる機能があったのでアラート情報を Slack に送るところまでやってみました

環境

  • macOS X 10.12.6
  • influxdb 1.3.1
  • telegraf 1.3.5
  • chronograf 1.3.3.4
  • kapacitor 1.3.1

インストール

  • brew install kapacitor
  • kapacitor version
Kapacitor v1.3.1

Slack 情報の設定

事前に Incomming Webhooks を作成しておきます

  • vim /usr/local/etc/kapacitor.conf
[slack]
  enabled = true
  url = "https://hooks.slack.com/services/Txxxxxxxx/Bxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx"
  channel = "#general"
  global = false
  state-changes-only = false

[slack] の部分だけ抜粋しています
また不要なコメントも削除しています

enabled は true にしましょう
url, channel に関しては取得した Incomming Webhook の URL を指定し channel には通知したい Slack のチャネルを指定してください

global は true に設定するとすべてのチャネルに通知が行くようで、チャネルを制御したい場合は後述する TICKscript 内で制御するようです

state-changes-only はアラートの状態が変化したときにだけ通知をするかしないかのフラグです
今回はテストのなのでアラートの条件に合うたびに通知するため false に設定します

起動

  • kapacitord -config /usr/local/etc/kapacitor.conf

設定ファイルを指定して起動します

TICKscript の作成

プロセスを起動したらアラート情報を定義し追加していきます
kapacitor は DSL を使ってアラート情報を定義します
DSL なので結構覚えるのも大変なので今回は CPU を監視する簡単なサンプルを作成しました
また、公式でいくつかサンプルも用意しているみたいなので独自の作成する tick ファイルを作成する際に参考にしてください

  • vim cpu_alert_slack.tick
stream
    // Select just the cpu measurement from our example database.
    |from()
        .measurement('cpu')
        .where(lambda: "cpu" == 'cpu-total')
    |alert()
        .id('{{ index .Tags "host"}}/usage_idel')
        .crit(lambda: "usage_idle" < 99)
        // Whenever we get an alert write it to a file.
        .slack()

かなり簡単な tick ファイルにしました
telegraf が自動で作成したcpu という measurement に対してアラートをかけます
アラート情報として取得するレコードを where で絞込します
今回は cpu というフィールドがありそれの cpu-total というレコードだけ取得します
ここでポイントですが lambda 式の右辺の 'cpu-total' はシングルクオートでなければなりません
どうやら内部的にダブルクオートとシングルクオートは明確な違いがあり文字列のフィールドを比較する場合には値側はシングルクオートでなければなりませんでした

あとは alert() ノードで実際のアラート情報を定義しています
id はアラートを通知した際にどのホストなのかなど識別できる情報を設定します
今回は .Tags という slice に送られてくる host の情報を設定しています
アラートの条件は usage_idle が 99% 以下のときに Slack に通知するので (ほぼ) 確実にアラートが発砲するようにしました
あくまでもテストとして設定しているので実際にはもっと低い数値を設定しましょう

そして最後に .slack() を呼ぶことで kapacitor.conf に指定した Incomming Webhook の URL に対して通知を行います

アラートを定義する

作成した TICKscript を追加します
追加するには kapacitor define コマンドを使います

  • kapacitor define cpu_alert -type stream -dbrp telegraf.default -tick ./cpu_alert_stream.tick

名前、タイプ、使用する DB と .tick ファイルを指定しましょう
定義が追加できたら確認してみましょう

  • kapacitor list tasks
ID        Type      Status    Executing Databases and Retention Policies
cpu_alert stream    disabled  false     ["telegraf"."default"]

動作確認

アラートの定義ははじめは無効になっています
いきなり有効にしてもいいのですが、kapacitor ではアラートをテストする record という機能があります

  • kapacitor record stream -task cpu_alert -duration 20s

これで InfluxDB に入ってくるデータを 20 秒間監視することができます
監視したデータには ID が振られます
list recordings コマンドを使って監視したデータを確認することができます

  • rid=cd158f21-02e6-405c-8527-261ae6f26153
  • kapacitor list recordings $rid

そしてこの ID を指定することで監視したデータを再生することができます

  • kapacitor replay -recording $rid -task cpu_alert

こうすることで監視したデータを使ってアラートのテストを行うことができます
実際に監視したデータ内にアラートに引っかかる情報があると Slack に通知されます

もし問題なく通知が来るようであれば監視を有効にすれば OK です

  • kapacitor enable cpu_alert

.tick ファイルなどに構文エラーがある場合 kapacitor のログファイルにエラーログなども吐いてくれるので、実際にアラートを追加するときはちゃんと record 機能を使ったほうが良いかと思います

最後に

kapacitor を使って InfluxDB 内にあるデータを監視し Slack に通知するところまでやってみました
DSL で監視情報を定義する必要があるので、少し学習コストが必要になりそうです

大変だったのは本当にちゃんと監視できているか確認することでしたが、record の機能に気づいてからは結構簡単にできました

Tips

ログの位置は kapacitor.conf 内で定義されています
Mac のデフォルトのログ保存場所は以下でした

  • tail -f /usr/local/var/log/kapacitor.log

またログレベルが最初は INFO になっているので debug に変更したい場合はコマンドで可能です

  • kapacitor level debug

アラートを削除する場合は delete コマンドを使用すれば OK です

  • kapacitor delete cpu_alert

参考サイト

2017年8月13日日曜日

Chronograf を使ってみる

概要

前回 までに InfluxDB と telegraf を試しました
データがいろいろと入ってくると UI で見たくなるのは当然です
InfluxDB には Chronograf という専用の UI がありこれを使うことで InfluxDB に貯まったデータを簡単に閲覧することができます
今回はインストールと簡単な操作を試してみました

環境

  • macOS X 10.12.6
  • influxdb 1.3.1
  • telegraf 1.3.5
  • chronograf 1.3.3.4

インストール

  • brew install chronograf
  • chronograf --version
2017/08/07 10:09:03 Chronograf 1.3.3.4

起動

  • chronograf

http://localhost:8888 で起動します
ブラウザでアクセスしてみましょう

触ってみる

まずアクセスするとソースを作成する画面になります
最低限必要な情報は「Connection String」と「Name」になります
Connection String は InfluxDB の URL になります
アドレスやポートがデフォルトとは異なる場合は別のものを入力してください
Name は何でも OK です、今回は「Influx 1」というソース名にしました
chronograf1.png

ソースを作成すると左メニューに

  • Status・・・アラートの状態を確認することができます、他にニュースフィードと Getting Started へのリンクがあります
  • Host List・・・telegraf がインストールされているホストの一覧が表示されます、ホストを選択するとメトリックの情報を確認することができます
  • Data Explorer・・・自分でカスタムしたクエリを発行することができます、すぐにその場でグラフがすることも可能です
  • Dashboards・・・様々なグラフを 1 つのビューで確認することができるダッシュボードを作成することができます
  • Alert History・・・アラートの履歴を確認できます
  • Admin・・・存在するデータベースやユーザの一覧を確認することができます
  • Configuration・・・作成したソースの一覧を確認することができます

があります

例えば前回 telegraf をインストールしたホストのメトリックを確認するには Host List からホストを選択することで確認できます
chronograf2.png

エージェントをインストールして Chronograf を起動するだけでこれだけのメトリック情報を確認することができます

ただ、ここにはすべての情報はありません
なので別の情報を確認したい場合には Data Explorer を使って自分でカスタムクエリを使ってグラフを作成します
chronograf3.png

クエリを作成するのが面倒くさいという場合であれば「Query Templates」からサンプルクエリを取得することができます
また、measurements の一覧からフィールドをポチポチするだけでもクエリを自動で作成してくれるので簡単です

最後に

Chronograf をインストールして使ってみました
基本的には InfluxDB に貯まったデータに対してクエリを発行することで簡単にグラフを作成して可視化することができるツールです

Kibana や Grafana と比較すると操作感はかなりシンプルかなと思います
ただ、執筆時点では Chronograf にはグラフの種類が少し不足している感があります
Geolocation を使った地図グラフや棒グラフ、円グラフなどの基本的なグラフもないようです
なので、そういったグラフを使いたい場合には Kibana や Grafana を使わざるを得ないのが現状かなと思います

Chronograf は InfluxDB などと比べて最近開発が始まったプロダクトなので、まだまだ開発も進むと思います
なので今後そういったグラフなどが追加されることは十分にありえると思います

参考サイト

2017年8月12日土曜日

telegraf を使ってみる

概要

前回 Mac 上に InfluxDB をインストールして簡単な SQL 操作をしてみました
大抵こういったツールはログやメトリックと連携してデータを蓄積していくのですが調べてみたところ InfluxDB 専用のエージェントツールで telegraf というものがありました
今回は telegraf のインストールと簡単な設定を行い実際に InfluxDB にデータを投入するところまで試してみました
また、今回も前回に引き続き Mac 上で試していきます

環境

  • macOS X 10.12.6
  • influxdb 1.3.1
  • telegraf 1.3.5

インストール

  • brew install telegraf
  • telegraf --version
Telegraf v1.3.5

設定

  • telegraf config > telegraf.conf
  • vim telegraf.con

で 94行目あたりにある [[outputs.influxdb]] の項目に urls = ["http://localhost:8086"] という設定があるので InfluxDB の URL を設定します
InfluxDB もローカルで動作していて特に設定を変更していない場合は conf ファイルは何もしないで OK です

起動

  • telegraf --config telegraf.conf

で起動します
起動すると 10秒おきに InfluxDB にメトリック情報が格納されていきます

うまくデータが入っていない場合は influxd プロセスが起動しているか確認してください

動作確認

influx コマンドを使って SQL を発行してデータを確認してみましょう

  • influx

ここでインタラクティブモードになります

  • show databases

telegraf という measurement が作成されていることを確認します

  • use telegraf
  • show measurements

で measurement (テーブル) の一覧を確認すると以下のメトリック情報が送信されていることが確認できます

name: measurements
name
----
cpu
disk
diskio
mem
processes
swap
system
  • precision rfc3339
  • select * from cpu
time                 cpu       host         usage_guest usage_guest_nice usage_idle        usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system       usage_user
----                 ---       ----         ----------- ---------------- ----------        ------------ --------- ---------- ------------- ----------- ------------       ----------
2017-08-07T00:24:30Z cpu-total host1.local 0           0                85.7              0            0         0          0             0           3.65               10.65
2017-08-07T00:24:30Z cpu3      host1.local 0           0                94.5              0            0         0          0             0           2                  3.5
2017-08-07T00:24:30Z cpu1      host1.local 0           0                94.6              0            0         0          0             0           1.7                3.7
2017-08-07T00:24:30Z cpu0      host1.local 0           0                74.2              0            0         0          0             0           6.7                19.1
2017-08-07T00:24:30Z cpu2      host1.local 0           0                79.5              0            0         0          0             0           4.2                16.3

自分の Mac は 4 コアの CPU を使っているのですが各 CPU ごとにデータを送信してくれるようです
あとは全コアの平均値も出してくれます

こんな感じで他にもメモリやディスク使用量などの情報も格納してくれます

最後に

InfluxDB 専用のエージェントツール telegraf を使ってみました
ログパーサも使えるためログから情報を送信することも可能なようです

td-agent にも InfluxDB 用のプラグインがあるようでログなどはそっちで代用することもできそうです

余裕があったらカスタムメトリックの取得方法やログのパースなどもやってみたいと思います

参考サイト

2017年8月11日金曜日

macOS X で InfluxDB 1.3 に入門してみた

概要

InfluxDB は時系列データを格納し専用の SQL でデータを取得したり専用の UI でグラフを表示したりすることができるツールです
ElasticSearch みたいなツールです
golang でかかれており Github でオープンソースとして公開されています
今回は macOS 上に influxdb をインストールし簡単なデータの登録や取得を行ってみました

環境

  • macOS X 10.12.6
  • influxdb 1.3.1

インストール

Mac の場合 Homebrew で簡単にインストールすることができます

  • brew install influxdb

インストールできたら以下のコマンドでバージョンが確認できれば OK です

  • influx -version
InfluxDB shell version: v1.3.1

influxQL で遊んでみる

influxdb には influxQL と呼ばれる独自のクエリ言語を発行することでデータを操作することができます

まずは influxQL が発行できるモードに変更します

  • influx -precision rfc3339

「-precision rfc3339」オプションを指定することでタイムスタンプのフォーマットを「YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ」にすることができます

データベース作成

まずはデータベースを作成しましょう
この辺は MySQL などと同じ操作かなと思います

  • CREATE DATABASE mydb

コマンドの部分は大文字でも小文字でもどっちでも OK です
データベースが作成されたか確認して問題なければデータベースを使用します

  • SHOW databases
  • USE mydb

データ投入

そしたら早速データを追加してみます

  • INSERT cpu,host=server1,region=us_west value=0.64

ここが少しクセのあるコマンドになります
フォーマットは

INSERT measurement,tag_key1=tag_value1,tag_key2=tag_value2 value=n

になります
measurement は所謂テーブルになります
そしてその次にある tag_key と tag_value はカラムとそのカラムに設定する値になります
意味合いとしてタグになるので基本的には文字列情報を設定します

そして 1 つスペースを開けて value=n で数値情報を設定します
この部分は必ず数値である必要があります
今回は value は 1 つしか指定していませんが、value もカンマ区切りで複数していすることができます

  • INSERT temperature,machine=unit42,type=assembly external=25,internal=37

結構フォーマットがシビアで measurement のあとのカンマの後にスペースなどは含められません
タグ情報が複数ある場合のカンマの後にもスペースを含めることはできません

データ取得

データが格納できたら取得してみましょう

  • SELECT * from cpu

ですべてのタグ情報と値の情報が取得できます

name: cpu
time                           host    region  value
----                           ----    ------  -----
2017-08-03T06:44:04.126616931Z server1 us_west 0.64
2017-08-03T07:22:28.122064267Z server2 us_west 0.99

もちろん表示するタグ情報を絞り込むこともできます

  • SELECT region, value FROM cpu
name: cpu
time                           region  value
----                           ------  -----
2017-08-03T06:44:04.126616931Z us_west 0.64
2017-08-03T07:22:28.122064267Z us_west 0.99

データの削除と更新

ついでにデータの削除もやってみましょう

  • DELETE FROM cpu WHERE host='server1'

という感じで消せます
更新 (UPDATE) に関してはコマンドがないようで INSERT を使うことで上書きすることができるようです

  • INSERT cpu,host=server2,region=us_west value=0.99 1501746397569246614

フォーマットは普通の INSERT コマンドの最後にスペースで区切って time を指定します
time の指定方法はデフォルトのタイムスタンプ方式なので「-precision rfc3339」を指定しないで influx コマンドを使うことで確認できます
もしくはインタラクティブモードで

  • precision ns

とすることでタイムスタンプのフォーマットをデフォルトに変更することができるのでこれで SELECT し直しても良いと思います
再度フォーマットを rfc3339 にしたい場合は

  • precision rfc3339

へ戻すことができます

クエリ中で正規表現を使う

またクエリ中に golang の正規表現を使用することができます

  • SELECT * FROM /.*/

上記の場合すべての measurement に対して SELECT 文を発行することができます

管理 UI について

どうやら InfluxDB 1.3 からはデフォルトで付属していた管理 UI がなくなったようです

代わりに Chronograf という InfluxDB 専用の UI プロジェクトができたのでそれを別途インストールする必要があります

最後に

Mac 上で InfluxDB を試してみました
ダウンロードページを見るとわかりますが、さまざまなプラットフォームで簡単にインストールすることができます
Docker 環境がある人は Docker コンテナとしても動作させられるので更に簡単に動かせると思います

次回は Chronograf と連携して UI から InfluxDB の情報を見てみたいと思います

参考サイト