ログ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