ElasticSearch/Lucene

如何向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'}
  1. required_options: 这里表示KafkaAlerter需要在配置文件中读取的字段,这里设置为集群的IP cluster ips 和 要存储告警信息的topic topic name
  2. init:定义KafkaAlerter中需要的变量
  3. alert: 进行告警的主题方法,这里我生成包含告警信息的json串,并将其存入kafka
  4. create_default_title/create_alert_body:这里直接复用EmailAlerter的方法
  5. get_info: 返回alerter的关键信息,这里我返回了topic name

2. config.py

在 alert_mapping 中需要指明告警方式与执行类的对应关系:


3. config.yaml

添加kafka的配置项目,如cluster地址,待写入的topic name

4. 测试

新建一个告警执行文件,将其告警方式设置为 alert: ‘kafka’,启动elastalert执行此告警文件,即可看到效果。

上一篇下一篇

猜你喜欢

热点阅读