新增一个报警器(渠道)

报警器是Alerter的子类,可以在elastalert/alerts.py中找到.它们提供匹配(matches)并且据此执行一些动作.你的个人报警器必须实现两个成员功能,并且看到如下的内容:

class AwesomeNewAlerter(Alerter):
    required_options=set(['some_config_option'])
    def alert(self,matches):
        ...
    def get_info(self):
        ...

你可以使用module.file.AlertName引用警报类型,其中module是python的模块名称,file是包含名为AlertNameAlerter子类的文件名.

基本方法

alerter类将会在ElastAlert开始时启动,并且通过alert函数定期的通过匹配.ElastAlert 也会通过get_info取得alert的信息写入到Elasticsearch当中.下面是几个重要的成员属性:

self.required_options: 这是一个包含必须存在的配置选项名称的集合.如何遗失任何配置 ElastAlert 将不会实例化.

self.rule: 包含规则配置的字典. 所有针对警报的配置必须包含在警报配置文件(rule configuration)中,并且可以在这里访问.

self.pipeline: 这是一个提供在警报之间传输信息的一个字典对象.当警报触发,一个空的pipeline对象将被创建,每一个警报都可以在其中添加或者接收信息.注意警报器将会按照文件中定义的顺序依次被调用.例如,JIRA报警器将添加它的ticket号给到pipeline,然后email报警器将添加该链接,如果它正在运行的话.

alert(self, match):

ElastAlert 将调用这个函数发送警报.matches是包含了匹配信息的字典对象列表.你可以通过调用self.rule['type'].get_match_str(match,self.rule)来得到一个好的字符串表示.如果函数发生异常,将会被ElastAlert捕捉,并且警报将会被标记上未发送后保存供以后使用.

get_info(self):

这个函数的作用是获取警报的信息并存储回Elasticsearch当中.它需要返回一个字典,并直接上传到Elasticsearch当中,其中需要包含type,recipients,parameters等等重要的信息.

教程

让我们创建将警报写到本地文件的新的警报器,创建一个模板文件夹在ElastAlert的根目录当中:

$
 mkdir elastalert_modules

$cd elastalert_modules

$ touch __init__.py

现在,在名称为my_alerts.py文件当中,新增如下内容:

from elastalert.alerts import Alerter,BasicMatchString

class AwesomeNewAlerter ( Alerter ):
    #通过设置 required_options 的字符串你可以确定规则配置文件中需要包含的选项.
    #否则Elastalert将会在加载规则时抛出异常.
    # By setting required_options to a set of strings
    # You can ensure that the rule config file specifies all
    # of the options. Otherwise, ElastAlert will throw an exception
    # when trying to load the rule.
    required_options = set(['output_file_path']) # Alert is called
    def alert(self,matches):
        # Matches 是一个匹配字典的列表,当配置了aggregation选项时,它将包含多个结果.
        # Matches is a list of match dictionaries.
        # It contains more than one match when the alert has
        # the aggregation option set
        for match in matches :
            # 配置选项可以通过self.rule进行访问.
            # Config options can be accessed with self.rule
            with open ( self.rule['output_file_path'],"a" ) as output_file :
                # basic_match_string 将将匹配(match)默认转换为可以阅读的字符串.
                # basic_match_string will transform the match into the default
                # human readable string format
                match_string = str(BasicMatchString(self.rule,match))
                output_file.write(match_string)
    # get_info 当警报发送后去获取之前写入到Elasticsearch当中的字段`alert_info`,它将会返回一个警报行为的相关信息的字典.
    # get_info is called after an alert is sent to get data that is written back
    # to Elasticsearch in the field "alert_info"
    # It should return a dict of information relevant to what the alert does
    def get_info( self ):
        return { 'type':'Awesome Alerter' , 'output_file':self.rule['output_file_path']}

在规则配置文件当中,我们将按照如下的方式引用报警器:

alert:"elastalert_modules.my_alerts.AwesomeNewAlerter"
output_file_path:"/tmp/alerts.log"

ElastiAlert 将试图通过from elastalert_modules.my_alerts import AwesomeNewAlerter导入(import)警报模块.这意味着文件夹必须在可以被导入为python模块的位置.

results matching ""

    No results matching ""