Elasticsearchアラートで冷たい淹れたてのコーヒーがなくなることはありません
Elasticsearchアラートを使用して「ほぼ空」になったことを通知します
ObjectRocketでは、オフィスに冷たい淹れたてのコーヒーを用意しています。ここ8月にテキサス州オースティンは暑いです。カフェインの風邪が必要です。
一度に1つの樽しか保管しないため、注文が不足することなくスケジュールを立てるのは難しい場合があります。そのため、ObjectRocketオフィスの誰かが、「コールドブリューの使用状況に関するより良いデータがあればいいのに」と言ったとき、私はそれで終わりました。 Elastic Stackで何ができるかを示す新しい方法を常に探しているので、コールドブリューが二度と不足しないように、半自律的な監視およびアラートシステムの作成に着手しました。
最終的には、Raspberry Pi、Elasticsearch、Kibana、Sentinl / ElastAlertを組み合わせて、樽に何か重要なことが起こったときにSlackにアラートを送信しました。 SentinlとElastAlertがショーのスターだったので、後でそれらを掘り下げます。
この2部構成のシリーズの最初の部分では、ケゲレーターソリューションからキャプチャされたデータを使用してアラートシステムを作成した方法について説明します。 Elasticsearchのオープンソースアラートオプションに関するいくつかのアイデアと知識を持って立ち去ることを願っています。次の投稿のために、システムを物理的に構築した方法の詳細を保存します。
Kegからのデータ(コールドブリューだけでなく)
すでに述べたように、次のブログで樽用冷蔵庫の構築について説明し、流量監視システムを構築する代わりにスケールケグウェイトソリューションを使用することを選択した理由について説明します。
このブログで知っておく必要があるのは、以下のような形式でドキュメントの定期的なストリームをElasticsearchに送信するRaspberryPiを利用したスケールを設定したことだけです。
{
"_index": "filebeat-6.2.4-2018.05.15",
"_type": "doc",
"_source": {
"@timestamp": "2018-05-15T16:50:49.000Z",
"beat": {
"hostname": "raspberrypi",
"name": "raspberrypi",
"version": "6.2.4"
},
"weight": 58.4,
"message": "2018-05-15T16:50:49+0000 - -0.4"
}
}
Filebeatはデータを取得し、関心のある2つの主要なフィールドを含みます。
- 各ウェイト測定値の「@timestamp」
- そのタイムスタンプでの実際の「重み」の読み取り値
警告オプション
まず最初に:樽に何か問題が発生したときに行動を起こすには、キーパーソンに通知を送信する方法が必要でした。そこで、アラートパッケージが登場します。
幸い、Elasticsearchクラスターにアラートを追加するためのApache 2.0ライセンスオプションがいくつかあります:ElastAlertとSentinl。
ElastAlert
ElastAlertは、Yelpによって作成されたElasticsearchの柔軟なアラートフレームワークであり、Elasticsearchとは別に実行され、主に基本的な構成ファイルを介して構成されます。ユーザーは、すべてのアラートにわたってグローバルパラメーターを使用してメイン構成ファイルを作成し、ElastAlert固有のYAMLを含む各ルールのルールファイルを作成して、ルールと結果のアラートを構成できます。各「ルール」には次のものが含まれます。
- ルールの標準リスト(「フラットライン」、「スパイク」、「メトリック集計」など)に基づくルール構成
- 各ルールが使用するクエリヒットを制限するElasticsearchフィルター
- ルール部分がポジティブな場合に発生するアラート(メール、Jira、Slackなど)
センティン
SentinlはElastAlertよりも少し新しいです。 ObjectRocketは、Siren Solutionsによって作成されたSentinlに出くわし、ObjectRocketサービスで顧客向けの新しいアラートオプションを探していました。 Sentinlは、Elasticsearchのアラートに加えてレポートを提供するKibanaプラグインです。各ジョブを「ウォッチャー」と呼びます(同じ名前の古いプラグインと混同しないでください)。
- スケジュール(確認する頻度と時期)
- 入力クエリ(チェックするデータのElasticsearchクエリ)
- 条件(データを警告するかどうかを決定するロジック)
- 変換(アラートを出す前にデータを変更するコード)
- アクション(Slack、Eメール、Webhookなどのアラートが発生した場合の対処方法)
どのアラートオプションがあなたに適していますか?
どちらも本当に素晴らしいので、探しているアラートの種類によって異なります。これが私の発見です:
ElastAlert | Sentinl | |
長所 |
|
|
短所 |
|
|
アラートの作成
次に、作成する必要のあるアラートのタイプを定義する必要があります。私が最終的に知りたいのは、いつもっとコールドブリューを注文すべきかということでした。次のようなアラートを作成する必要がありました:
樽が空/ほぼ空
非常に簡単です:体重が特定のしきい値を下回ったかどうかを報告します。
樽は交換済み
ああ、淹れたてのコーヒーがあります。体重が急激に増加したことを検出します。
監視が壊れています
データなし、アラートなし:スケールがデータの送信を停止した時期を知る必要があります
樽が空/ほぼ空
このシナリオでは、重量が「空」と見なされる指定されたしきい値を下回った場合にアラートを設定し、重量が樽の約20%が残っていることを示している場合に警告します。
ElastAlert
ElastAlertを使用すると、メトリック集計ルールタイプを使用してこれを非常に簡単に行うことができます。指標から集計を作成し、それが特定のしきい値を上回っているか下回っているかを判断します。
# (Required)
# Rule name, must be unique
name: Empty Alarm
# (Required)
# Type of alert.
type: metric_aggregation
# (Required)
# Index to search, wildcard supported
index: filebeat-*
# How much data should we use
buffer_time:
hours: 1
# How often can we send this alert?
realert:
hours: 24
# Type of elasticsearch document to use
doc_type: doc
metric_agg_key: weight
metric_agg_type: max
min_threshold: 41
# (Required)
# The alert is use when a match is found
alert:
- "slack"
alert_subject: The cold brew keg is empty
alert_text_type: alert_text_only
alert_text: "The cold brew keg is empty. Panic."
slack:
slack_webhook_url: "https://hooks.slack.com/services/foo/bar"
slack_msg_color: danger
slack_emoji_override: ":torch-and-pitchfork:"
過去1時間(buffer_time)で最大重量が41(空の樽)未満であるかどうかを確認し、24時間に1回だけアラートを送信するように設定しました。次に、Slackのアラート、アラートで送信するデータの種類、さらには使用する色や絵文字の詳細を構成できます。
警告アラートでは少し注意が必要です。警告のしきい値内にあるときだけ知りたいです。41を超えている(空)が65を下回っています(25%のマークで、ほとんどコールドブリューがなくなったことを警告します)。 ElastAlertは単一のしきい値しか提供しないため、フィルターを使用してこれを修正します。
metric_agg_key: weight
metric_agg_type: avg
min_threshold: 65
filter:
- range:
weight:
gte: 41
41以上の重みを評価するためにフィルタリングします。これは、すべての重みが41未満の場合、このアラートをトリガーしたくないためです(「空の」アラートがトリガーされるため)。ただし、41以上の重みがある場合、「空の」アラートはトリガーされず、平均が65未満の要件を満たしているかどうかを判断できます。
センティン
Sentinlは、ウォッチャーを構成するための使いやすいGUIを提供します。
最初の画面で、ウォッチャーに名前を付けてスケジュールを設定するだけです。
入力は、必要なデータを取得するためのElasticsearchクエリです。つまり、重みを含み、重みフィールドに平均集計を作成するドキュメントです。
状態画面で、アラートをトリガーするものを決定します。少なくともいくつかのヒットを返す必要があり、平均重量は41未満である必要があります。
これは、条件が真のときにメッセージを発するコンソールアラート(ドキュメントを特別なインデックスにも保存する)です。
SentinlにはUIが付属していますが、(少し)さらにクエリを作成する必要があります。ただし、これらはほとんどがElasticsearchクエリであるため、おそらく問題はありません。
樽が補充されました
今、私は樽が補充されたという一般的なアナウンスをオフィスに送る方法が必要です。特定のしきい値を超えるレベルを探すのではなく、さまざまなサイズの樽を受け取ることがあるため、重量の急激な増加を探したかったのです。
ElastAlert
ElastAlertには、樽の重量の上方への増加を判断するための「スパイク」と呼ばれる組み込みが含まれています。
name: Refill Detector
type: spike
index: filebeat-*
field_value: weight
spike_height: 2
spike_type: 'up'
timeframe:
minutes: 10
threshold_ref: 100
threshold_cur: 100
realert:
hours: 6
このルールは、重みフィールドの値を調べて、それらを10分のウィンドウにバケット化します。いずれかのウィンドウの重みの平均が前の10分間のウィンドウの2x(spike_height)より大きい場合、アラートを発行します。また、10分間のウィンドウが「有効」であるためには、少なくとも100個のサンプル(threshold_refおよびthreshold_cur設定)が必要であり、アラートは6時間ごとよりも頻繁に発生することはできないことに注意してください。
センティン
Sentinl側では、もう少し複雑ですが、シリアル差分集計を使用して、以前のバケットよりも大幅に増加したバケットがあるかどうかを判断しました。
{
"input": {
"search": {
"request": {
"index": [
"filebeat-*"
],
"body": {
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"gt": "now-5m/m"
}
}
}
]
}
},
"aggs": {
"30s_buckets": {
"date_histogram": {
"field": "@timestamp",
"interval": "30s"
},
"aggs": {
"weight_avg": {
"avg": {
"field": "weight"
}
},
"weight_diff": {
"serial_diff": {
"buckets_path": "weight_avg",
"lag": 3
}
}
}
},
"max_weight_diff": {
"max_bucket": {
"buckets_path": "30s_buckets>weight_diff"
}
}
}
}
}
}
},
"condition": {
"script": {
"script": "payload.hits.total > 20"
},
"compare": {
"payload.aggregations.max_weight_diff.value": {
"gte": 40
}
}
}
}
この「ウォッチャー」は、過去5分間をスキャンし、30のバケットに分割して、3つのバケット間の差が少なくとも40の増加であるかどうかを確認します。これも、ElastAlertの同等のものよりも少し複雑ですが、機能します。かなり良い。
ここでは、壊れたデータフィードを探す3番目のアラートは表示していませんが、どちらの場合も非常に単純なアラートです。 ElastAlertのフラットラインはそれをうまく処理し、Sentinlはウィンドウ内のすべての重量測定値を取得してヒットをカウントするのと同じくらい簡単です。誰かがコードを見たい場合は、私たちに知らせてください。
アラートデータの使用
両方のアラートシステムの利点は、アラートのログがElasticsearchに保存され、アラートに基づいて視覚化を作成できるため、実際のアラートをクエリする機能を備えていることです。
詰め替え
Kibanaダッシュボードで補充が表示されたときに、補充アラートを使用してプロットします。重量データを見て最後の補充時間を視覚化するのではなく、視覚化のために最後の補充アラートを見ることができます。たとえば、Sentinlは、すべてのアラートを日付に基づいて「watcher_alerts-*」と呼ばれるローカルインデックスに保存します。
最後のリフィルで視覚化を作成するには、「ウォッチャー」フィールドでイベントをフィルタリングして、リフィルイベントのみを取得し、最大日付を選択します。
日報
もう1つの優れたオプションは、定期的なアラートを使用して、後でレポートできるロールアップと同様の動作を作成できることです。
例:毎日の消費量を確認したい場合は、毎日の体重の減少を調べ、(補充やその他のイベントによる)大きなスパイクを除外してから、体重をオンスに変換します。
これは、単一のKibanaビジュアライゼーションでは少し注意が必要です。 (ただし、Vegaは有望に見えます。)
そこで、代わりに、毎晩深夜までに実行され、その日の消費量の合計を作成する毎日のアラートを作成しました。次に、「watcher_alerts」インデックスからそれらの毎日の合計を読み取る簡単な視覚化を作成します。
最終結果
インストールが完了すると、Slackはコールドブリュー樽をさらに注文するタイミングを教えてくれます。また、ITや管理者、またはその他の選ばれた少数の個人に送信されるだけではありません。これで、オフィス全体が新しい樽がいつ到着するかを知ることができます。
ここでは、コールドブリューのための冷たい汗はもうありません。スタッフの幸福と生産性はこれまでになく高いです。
Elasticsearch + Sentinl / ElastAlertアラートFTW!
-
Docker でワークロードを簡素化
Docker は 2013 年にシナリオに突入し、それ以来、IT サークル全体で話題を呼んでいます。 Docker が提供するコンテナー技術に基づくソリューションは、IT 運用の実行方法を完全に変えています。 このブログでは、今日の DevOps (開発運用) パイプラインで最もホットなテクノロジの 1 つをわかりやすく説明します。 Docker が注目されている理由 開発マシンで問題なく動作するアプリケーションを構築し、それを QA マシンまたは本番マシンにデプロイすると、突然そこで動作しなくなったとします。なんで?大企業はコンテナベースのテクノロジーを使用してビジネスを運営しています。
-
これらの WhatsApp 復元ツールを使用すれば、失われたデータを心配する必要はもうありません!
世界中で 16 億人を超える月間アクティブ ユーザーを抱える WhatsApp は、Android、iPhone、さらにはデスクトップ ユーザーにとっても最も人気のあるメッセージング プラットフォームの 1 つになりました。アプリケーションは私たち全員にとって最も重要であるため、WhatsApp チャットやその他のデータを失うことは、真の悪夢になる可能性があります。どのスマートフォンを使用していても、誤って削除してしまうことは誰にでも起こりえます。削除されたテキスト、写真、ビデオ、およびその他の添付ファイルを回復するための Android および iPhone 用の最高の WhatsApp 回