ELK監視ツールElastalertアラーム機能拡張

ログELK Elastalertによるキー情報監視しながらELK nginxの要求が、出力を記録するために、ほとんどの標準的なサイズのインターネット企業であり、(例えばHTTP 500+エラー状態などを、長い時間が要求の閾値数、等に到達かかります)。

サポートコールに変えもののElastalertは、アラームモードが付属していますが、また、非常にこれらの指標を懸念し、このようなR&Dスタッフとしてアラーム情報パケットの送信に応じて達成することができない、アラームは、アラームを必要とするすべてのプロジェクトのこのプロジェクト、運用、保守を受け入れる必要があり、アラームモード音声、テキストメッセージ、電子メール、釘打ちグループ。これらを達成するために、ラインだけ、スクリプト自身。

YAMLプロファイル1. [スタート]

yunwei:
  member:
    zhangshan:
      phone: 15895820001
      mail: [email protected]
    lisi:
      phone: 15895820002
      mail: [email protected]
  dingtoken:
    e802cb4b5791bb08e1bc79cfd62c0a6bae4b77e8758b4b52522d5119478f1234
project1:
  member:
    zhouwu:
      phone: 15895820003
      mail: [email protected]
    wangliu:
      phone: 15895820004
      mail: [email protected]
  dingtoken:
    0a30c27cbb9bb17e5dbcb721578b7a6a490810c2fc237e1af5a1289557d31234
project2:
  member:
    liudehua:
      phone: 15895820005
      mail: [email protected]

説明:

  • グループを代表してyunwei運用・保守、様々な研究グループ、研究開発グループ名のProject1の\ porject2代表は(一貫elastalertでドメイン名に関連付けられている各企業の具体的な状況で、私たちの会社が持っているn個のプラットフォーム、それぞれ1つを持っている必要がありますか複数のステージ1つのドメイン)
  • グループの各メンバーは、一1-nのユーザを有していてもよいです。
  • 各グループには、爪のグループを持っています。
  • 電話\メール\ dingtokenは、このようなグループを釘付けないのProject2、無毛の爪の通知として、必要ありません。
  • 災害レベルを知らせるために、通知するために電話でレベルアラーム、送信テキストメッセージを警告するために、アラームのすべてのレベルにより、電話による音声通知は、dingtokenが送ら\郵送されます。

2.Elastalertルール設定

例示的な構成のステータスを監視する500

es_host: 10.10.10.1
es_port: 9200
name: freq-status-500
type: frequency
index: nginx-*
num_events: 30
timeframe:
  minutes: 1
filter:
- bool:
    must:
    - terms: 
        status: ["500","501","502","503","504"]
use_terms_query: true
doc_type: doc
terms_size: 10
query_key:
- domain
- status
realert:
  minutes: 60
alert:
- command
new_style_string_format: true
command: ["/root/elastalert-0.1.38/myalert/elastalert-alarm/alarm.py","--level=warning","--domain={domain,status}","--rulename=freq-status-500","--type=frequency","--num_events=30","--timeframe=1min"]

説明:

  • 公式には、(次のセクションを参照)は、複数のquery_keyをサポートしていますが、ルール、マルチquery_key失敗した生と死の周波数タイプのためのテスト中に発見されたが、その後のリハビリテーションの必要性で、マルチキーをサポートしていない周波数のタイプで見つけることができました
  • その普通のElastalert警報が主な違いで、アラームグループによってされた達成、コマンドは多くのカスタムパラメータの出力の組み合わせであることを、送信された送信スクリプトを決定し、これらのパラメータは、特定の意味スクリプトalarm.pyを参照してください
parser.add_argument('--level',dest='level',help='warning, distater')
parser.add_argument('--domain',dest='domain',help='for instance: sina_www, if rule_name start with freq-500,then sina_www-500')
parser.add_argument('--rulename', dest='rulename', help='rulename')
parser.add_argument('--type', dest='type', help='frequence, flatline')
parser.add_argument('--num_events', dest='num_events', help='num_events')
parser.add_argument('--timeframe', dest='timeframe', help='timeframe')
parser.add_argument('--reqtime_gt', dest='reqtime_gt', help='request time greater than')

マルチフィールドquery_keyをサポートするためのルールの3.frequencyタイプ

マルチquery_keyは、上述したように、私は各HTTP 500ステータスの各ドメイン名の要求の数を監視する、非常に便利です、ルールを達成することができます。残念ながら、著者は良いをサポートしていない、我々は、変換の下で少しを必要としています。

設定例(use_terms_queryの必須の設定します):

use_terms_query: true
query_key:
- domain
- status

修正方法のget_terms_queryのelastalert.pyで:

修改前:
else:
    aggs_query = query
    aggs_query['aggs'] = {'counts': {'terms': {'field': field, 'size': size}}}
return aggs_query
修改后(暂且只支持2个字段):
else:
    aggs_query = query
    field_list = field.split(",")
    if  len(field_list) == 1:
        aggs_query['aggs'] = {'counts': {'terms': {'field': field, 'size': size}}}
    elif  len(field_list) == 2:
        source= "doc['" + field_list[0] + "'].value + '-' + doc['" + field_list[1] + "'].value"
        aggs_query['aggs'] = {'counts': {'terms': {'script': {'source': source}, 'size': size}}}
    else:
        elastalert_logger.inof("Not support more than 2 fields in query_key")
return aggs_query

アラートのステータスと、次のように特定のドメインを取得します:

command: ["/tmp/alert_log.sh", "warning - freq 500 exceed, domain: {domain,status}"]

4.詳細コード

ファイルの説明:

alarm.py                --程序入口,参数解析
alert_channel.py        --报警发送通道(短信、语音、邮件、钉钉群)
alert.py                --构造发送对象和消息内容
aliyunsdk_SingleCallByTtsRequest.py   --阿里电话语音第三方库
config-contact.yaml     --报警对象配置文件
config.py               --加载配置文件
requirements.txt        --依赖
util.py                 --工具方法

コード住所:https://github.com/meishd/elastalert-alarm

5.効果

ドメイン名www.sina.com分あたり30以上の502個の要求は、アラームは次のように:

注:私たちは、ELKドメインは、「ドメイン名_セカンドレベルドメイン」形式のストレージに変更されます

warning: sina_www status of 502 exceed 30 per 1min

 

公開された24元の記事 ウォン称賛25 ビュー20000 +

おすすめ

転載: blog.csdn.net/sdmei/article/details/89928964