ES业务监控系统的设计

ES告警有2个选择:
1:Watcher
2:elastalert 工具早与watcher
这篇文章主要介绍Elastalert
ElastAlert是Yelp公司开源的一套python2.6写的报警框架
属于后来Elastic.co公司出品的Watcher同类产品
http://elastalert.readthedocs.org
elastalert会将自己查询的历史记录存在es里面
执行:curl -s 192.168.1.1:9200/_cat/indices?v |grep elastalert
在这里插入图片描述
创建了elastalert_status索引
执行:curl -s 192.168.1.1:9200/elastalert_status/_mapping?pretty查看索引内容
config.yaml 是配置文件。yaml的表达能力和json差不多
每一个规则都是一个yaml文件。
query配置:
run_every:minutes:1 每分钟运行一次.用来设置定时向ES发请求,默认5分钟
buffer_time:minutes:15 会在自己内部缓存15分钟的值,是在alert里缓存的。可以用来做历史回顾,用来设置请求里时间字段的范围,默认45分钟
rules_folder:用来加载下一阶段的rule设置,默认是’example_rules’
timestamp_field 配置,设置‘buffer_time’是针对哪个字段。默认是:@timestamp
timestamp_type 配置,设置‘timestamp_field’的时间类型,ElastAlert内部也需要转换时间对象,默认是‘ISO8601’,也可以是‘UNIX’
rule 设置各自独立以文件方式存储在rules_folder设置的目录里。可以定义下面的参数:
-‘name’ 每个rule需要有自己独立的name,一旦重复,进程无法启动
-‘type’ 选择某一种数据验证方式
-‘index’从某类索引i读取数据,目前只支持通配符
-‘filter’ 配置,设置向ES请求的过滤条件
-‘timeframe’ 累积触发报警的时长
-‘alert’ 设置触发报警时执行哪些报警手段
内置rule类型介绍:

any: 只要有匹配就报警;
blacklist: compare_key 字段的内容匹配上 blacklist 数组里任意内容;
whitelist: compare_key 字段的内容一个都没能匹配上 whitelist 数组里内容;
change: 在相同 query_key 条件下,compare_key 字段的内容,在 timeframe 范围内发送变化;
frequency: 在相同 query_key 条件下,timeframe 范围内有 num_events 个被过滤出来的异常;
spike: 在相同 query_key 条件下,前后两个 timeframe 范围内数据量相差比例超过 spike_height。其中可以通过 spike_type 设置具体涨跌方向是up, down, both。还可以通过`threshold_ref 设置要求上一个周期数据量的下限,threshold_cur 设置要求当前周期数据量的下限,如果数据量不到下限,也不触发;
flatline: timeframe 范围内,数据量小于 threshold 阈值;
new_term: fields 字段新出现之前 terms_window_size(默认 30 天) 范围内最多的 terms_size(默认 50) 个结果以外的数据;
cardinality: 在相同 query_key 条件下,timeframe 范围内 cardinality_field 的值超过 max_cardinality 或者低于 min_cardinality。```
enhancements方式

match_enhancements配置,设置一个数组,在报警内容发送到 alert 之前修改具体数据。ElastAlert 默认不提供具体的 enhancements 实现,需要自己扩展。 不过,作为通用方式,ElastAlert 提供几个便捷选项,把 Kibana 地址加入报警:generate_kibana_link: 自动生成一个 Kibana3 的临时仪表盘附在报警内容上。use_kibana_dashboard: 采用现成的 Kibana3 仪表盘附在报警内容上。use_kibana4_dashboard`: 采用现成的 Kibana4 仪表盘附在报警内容上。

这种方式可以报警的时候附上一个kabana链接。K3仪表盘是URL拼接的,K4仪表盘是URL固定的。可能就没法实现了。
alert配置

alert 配置是一个数组,目前支持 command, email,jira,opsgenie,sns,hipchat,slack 等方式。
此外,alert 还有一系列控制报警风暴的选项,从属于 rule:
aggregation:设置一个时长,则该时长内所有报警最终合在一起发一次;
realert:设置一个时长,则该时长内,相同 query_key 的报警只发一个;
exponential_realert:设置一个时长,必须大于 realert 设置。则在 realert 到 exponential_realert 之间,每次报警后,realert 自动翻倍。

alert command方式

command 最灵活也最简单。默认会采用 %(fieldname)s 格式:
command: ["/bin/send_alert", “–username”, “%(username)s”, “–time”, “%(key_as_string)s”]
如果要用的比较多,可以开启 pipe_match_json 参数,会把整个过滤到的内容,以一整个 JSON 字符串的方式管道输入指定脚本。

alert email方式

email 方式采用 SMTP 协议,所以有一系列 smtp_* 配置,然后加上 email 参数提供收件人地址数组。
特殊的是,email 和 jira 两种方式,ElastAlert 提供了一些内容格式化模板:
比如可以这样控制邮件标题:
alert_subject: “Issue {0} occurred at {1}”
alert_subject_args:

  • issue.name
  • “@timestamp”
    而默认的邮件内容模板是:
    body = rule_name
    [alert_text]
    ruletype_text
    {top_counts}
    {field_values}
    这些内容同样可以通过 alert_text(及对应 alert_text_args)等来修改。

猜你喜欢

转载自blog.csdn.net/qq_25834767/article/details/82962274