Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Kapacitorでネットワークにおける リアルタイムイベント検出

1 943 vues

Publié le

ネットワークプログラマビリティ勉強会#16
https://network-programmability.connpass.com/event/88418/

Publié dans : Ingénierie
  • Login to see the comments

  • Soyez le premier à aimer ceci

Kapacitorでネットワークにおける リアルタイムイベント検出

  1. 1. Kapacitorでネットワークにおける リアルタイムイベント検出 Tetsuhiro Sato
  2. 2. TICKスタック • 時系列データを蓄積、分析、 および動作させるための サービスと機能を提供する オープンソース時系列プ ラットフォーム
  3. 3. Kapacitor • アラートの作成、ETLジョブの実行、異常の検出を容易にする オープンソースのデータ処理フレームワーク • ストリーミングデータとバッチデータの両方を処理 • 独自DSLであるTICKscriptでタスクを定義 • HipChat、OpsGenie、Alerta、Sensu、PagerDuty、Slackなどと統 合 • ユーザー定義関数によりTICKscriptの機能を拡張可能
  4. 4. TICKscript • ノード • データ処理ユニット • データをバッチまたはストリームとして受 け取り、 • データを変更したり、 • データを格納したり、 • 条件に基づいてアクションをトリガー • チェーンメソッド(|) • 次のノードに該当するData Point(s)を渡す • プロパティメソッド(.) • ノードのプロパティにアクセス dbrp "telegraf"."autogen" stream |from() .measurement('cpu') |alert() .warn(lambda: "usage_idle" < 20) .crit(lambda: "usage_idle" < 10) .message('Hey, check your CPU') .slack()
  5. 5. ストリーム vs. バッチ batch |query('SELECT mean(usage_idle) FROM "telegraf"."autogen"."cpu"') .period(5m) .every(5m) .groupBy(*) |alert() .crit(lambda: "mean" < 70) .log('/tmp/batch_alerts.log') stream |from() .measurement('cpu') |alert() .crit(lambda: int("usage_idle") < 70) .log('/tmp/alerts.log') ストリーム バッチ • InfluxDBのサポートするラインプロトコ ル形式でデータを受信 • メモリにウィンドウ期間のデータをバッ ファ • 短い間隔で小規模なデータ処理向き • より早いイベント検出 • InfluxDBへクエリー • より少ないメモリで動作 • 長めの間隔で大規模なデータ処理向き
  6. 6. プリプロセスETL vs. ポストプロセスETL プリプロセス ETL ポストプロセス ETL Telegraf InfluxDBKapacitor InfluxDBKapacitor
  7. 7. プリプロセスETLの例 … [[outputs.influxdb]] urls = ["http://127.0.0.1:8086","http://127.0.0.1:9092"] database = “telegraf" retention_policy = "autogen" [[inputs.ping]] urls = ["www.google.com","www.cisco.com"] count = 5 dbrp "telegraf"."autogen" stream |from() .measurement('ping') .groupBy('url') |window() .period(5m) .every(5m) |percentile('maximum_response_ms', 95.0) |eval(lambda: "percentile") .as('maximum_response_ms_95th_percentile') |influxDBOut() .database('kapacitor_augmented') .retentionPolicy('autogen') Telegrafの設定 TICKscriptの例
  8. 8. プリプロセスETLの例(つづき) > select host,maximum_response_ms,url from ping limit 5 name: ping time host maximum_response_ms url ---- ---- ------------------- --- 1528358574000000000 vagrant 162.695 www.google.com 1528358594000000000 vagrant 231.922 www.cisco.com 1528358594000000000 vagrant 290.83 www.google.com 1528358604000000000 vagrant 152.834 www.cisco.com 1528358604000000000 vagrant 156.293 www.google.com > select * from ping limit 5 name: ping time host maximum_response_ms_95th_percentile url ---- ---- ----------------------------------- --- 1528358244000000000 vagrant 228.432 www.cisco.com 1528358244000000000 vagrant 231.754 www.google.com 1528358544000000000 vagrant 246.63 www.cisco.com 1528358544000000000 vagrant 253.66 www.google.com 1528358844000000000 vagrant 231.922 www.cisco.com Telegrafからの 入力 InfluxDBへ の出力 maximum_response_ms の95パーセンタイル を算出
  9. 9. デモ Pipeline * InfluxDB Kapacitor Grafana * Cisco Telemetry のためのコレクタ シナリオ: CPU使用率が閾値を超えると、Slackに通知
  10. 10. (参考)Kapacitorサービスの設定 ... [slack] enabled = true url = "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX" channel = "#demo" username = "" icon-emoji = "" global = false state-changes-only = false ssl-ca = "" ssl-cert = "" ssl-key = "" insecure-skip-verify = false ...
  11. 11. (参考)TICKscript dbrp "telemetry"."autogen" stream | from() .measurement('Cisco-IOS-XR-wdsysmon-fd-oper:system-monitoring/cpu-utilization') .where(lambda: "node-name" == '0/RP0/CPU0') | alert() .info(lambda: "total-cpu-one-minute" > 5) .warn(lambda: "total-cpu-one-minute" > 10) .crit(lambda: "total-cpu-one-minute" > 15) .stateChangesOnly() .message('{{ .Level }}: CPU utilization is {{ index .Fields "total-cpu-one-minute" }}%') .log('/tmp/alerts.log') .slack()
  12. 12. おいまい

×