如何向ElastAlert添加告警方式
2019-01-22 本文已影响1人
囧雪啥都不知道
截止v0.1.31版本,Elastalert本身提供了多达20中告警方式。
然而由于业务需要,国内用户往往需要定制更多告警方式,如微信(聊天、群聊天、订阅号),短信,钉钉等新的告警途径,或者一些不能被elastalert直接满足的告警需求。
我的需求是需要针对query_key的不同值来对不同用户进行告警,同时,需要通过邮件,短信等多种途径进行告警。而query_key的取值与用户的对应关系存放在我的业务系统中;而短信、邮件发送系统也是现成的。
于是我选择添加一个告警方式,将告警文本和Query_key等信息存入Kafka,而我的业务系统去Kafka中消费告警,并执行发送操作。
1. alerts.py
告警类型都在此这里维护。我们仿照EmailAlerter,在其下方添加一个类 KafkaAlerter。
class KafkaAlerter(Alerter):
""" Sends alert into kafka """
required_options = frozenset(['balabala...'])
def __init__(self, *args):
super(KafkaAlerter, self).__init__(*agrs)
print('init')
def alert(self, matches):
print('alert')
def create_default_title(self, matches):
print('create title')
def create_alert_body(self, matches):
print('create alert body')
def get_info(self):
return {'type': 'kafka'}
- required_options: 这里表示KafkaAlerter需要在配置文件中读取的字段,这里设置为集群的IP
cluster ips
和 要存储告警信息的topictopic name
- init:定义KafkaAlerter中需要的变量
- alert: 进行告警的主题方法,这里我生成包含告警信息的json串,并将其存入kafka
- create_default_title/create_alert_body:这里直接复用EmailAlerter的方法
- get_info: 返回alerter的关键信息,这里我返回了
topic name
2. config.py
在 alert_mapping 中需要指明告警方式与执行类的对应关系:
3. config.yaml
添加kafka的配置项目,如cluster地址,待写入的topic name
4. 测试
新建一个告警执行文件,将其告警方式设置为 alert: ‘kafka’,启动elastalert执行此告警文件,即可看到效果。