インターフェロン

インフラストラクチャまたはアプリケーションの問題についてシグナリング
227
作成者イゴール・セレビャーニー

このレポジトリにはインターフェロン gem が含まれています。この gem を使用すると、アラート構成をコードに格納できます。独自のレポジトリを作成し、interferon gem をインポートする Gemfile を作成する必要があります。そのようなレポジトリの例、構成の例、およびアラート ファイルについては、https://www.github.com/airbnb/alerts_example を参照してください。

この Gem の実行

この gem は interferon という名前の単一の実行可能ファイルを提供します。

次のように呼び出す必要があります

$ bundle exec interferon --config /path/to/config_file

追加オプション

  • -h--help -- 使用方法情報を表示します
  • -n--dry-run -- アラート宛先に何の変更も行わずにインターフェロンを実行します

構成ファイル

構成ファイルは YAML で記述されています。

次のパラメータを受け入れます

  • verbose_logging -- さらに多くの出力を表示するかどうか
  • alerts_repo_path -- インターフェロン DSL ファイルを含むアラート レポジトリの場所
  • group_sources -- アラートを送信する人のグループを返せるソースのリスト
  • host_sources -- インベントリ システムを読み取り、監視するホストのリストを返すソースのリスト
  • destinations -- アラート プロバイダのリスト。メトリクスを監視し、アラート dsl ファイルで指定されたとおりにアラートを送信できます

詳細については、このレポジトリの config.example.yaml ファイルを参照してください。

可動部分

このレポジトリは 4 種類のオブジェクトについて認識しています

  • host_sources: さまざまなインベントリ システムをクエリし、アラートするホストやエンティティのリストを返します
  • destinations: メトリクスを監視してエンジニアに警告できる metric system です
  • groups: トラブルが発生したときにアラートを送信できる実際のエンジニアのグループです
  • アラート: エンジニアとグループが宛先を使用してホストについていつどのようにアラートを送信するかを指定する ruby DSL ファイル

ホスト ソース

  • optica: optica から AWS インスタンスのリストを読み取ることができます
  • optica_services: optica から解析されたスマートスタック サービス情報を返します
  • aws_rds: RDS インスタンスをリストします
  • aws_dynamo: dynamo-db テーブルをリストします
  • aws_elasticache: elasticache ノードおよびクラスタをリストします

宛先

Datadog

現時点では Datadog が唯一のアラート宛先です。Datadog のアラート構文ルールは次のとおりです。 http://docs.datadoghq.com/api/#alerts Datadog メトリクス構文を説明するチャートを以下に示します (asciiflow で生成)

    +---------+ alert condition +-------------------------------------------------+
    |                                                                             |
    |              +-----+ metric to alert on                                     |
    |              |                                                              |
    |              |    tags to slice the metric by +------+                      |
    |              |                                       |                      |
    v              v                                       v                      v
  |----------| |-------------------------||--------------------------|          |---|
  max(last_5m):avg:haproxy_count_by_status{role:<%= role %>,status:up} by {host} > 0
  ^      ^      ^                                                          ^
  |      |      |                                                          |
  |      | +----|------------------------------+                           |
  |      | | math on the metric over all tags  |                           |
  |      | |-----------------------------------|            +------------------------------------+
  |      | | * max, min, avg, sum              |            |trigger a separate alert for each   |
  |      + +-----------------------------------+            |different value of these tags the   |
  | +----|----------------------------------------------+   |entire `by {}` clause can be ommited|
  | | the interval to look at; always starts with last_ |   +------------------------------------+
  | |---------------------------------------------------|
  | | * 5m, 10m, 15m, 30m                               |
  | | * 1h, 2h, 4h                                      |
  + +---------------------------------------------------+
 +-------------------------------------------------------------------------------------------------+
 | metric condition, can be one of:                                                                |
 |-------------------------------------------------------------------------------------------------|
 | * max: the metric gets this high at least once during the interval                              |
 | * avg: the metric is this on average during the interval                                        |
 | * min: the metric is this small at least once during the interval                               |
 | * change: the metric changes this much between a value N minutes ago and now (raw difference).  |
 | * pct_change: the metric changes this much between a value N minutes ago and now (percentage).  |
 +-------------------------------------------------------------------------------------------------+

グループ

グループは実際には group_sources によって提供されます。現在、ファイルシステムから YAML ファイルのグループを読み込むグループ ソースが 1 つだけです。ただし、LDAP ベースのものなど、追加のグループ ソースを追加する予定です。

リンク