背景

sentinl的监控&告警是通过watch实现的。

一、Watch Execution

执行开始的时候, watcher为watch创建watch执行上下文. 执行上下文提供脚本和模板, 可以访问watch元数据、payload、wathcID、执行时间和触发器.

执行过程,watcher具体执行:

  1. 将输入数据作为监视上下文中的payload加载. 这使得数据可以用于执行过程中的所有后续步骤. 此步骤由watch输入控制.
  2. 评估watch状况以确定是否继续处理watch. 如果条件满足,则处理进入下一步;如果不满足,则停止执行watch.
  3. 将转变应用与见识payload(如果需要)
  4. 执行已经满足条件且watch未受限制的监控.

二、Watch Acknowledge and Throttling

watcher支持基于时间和基于确认的限制, 可以防止对同一个事件重复执行操作.默认情况下, Watcher使用基于时间的限制. 还可以在每个操作或者在监控级别配置限制周期。

三、Scripts and Templates

定义watch的时候可以使用scripts和templates. scripts和template可以引用watch执行过程的context元素,包括 watch payload. 执行上下文定义的变量, script和template(parameter placeholders参数占位符)可以直接引用.

watcher使用Elastic search的脚本基础体系,同时支持 inline脚本(inline Templates and Scripts)和stored(stored Templates and Scripts)

Watch Execution Context

以下代码显示了Watch Execution Context的基本结构:

{
"ctx" : {
"metadata" : { ... },
"payload" : { ... },
"watch_id" : "<id>",
"execution_time" : "20150220T00:00:10Z",
"trigger" : {
"triggered_time" : "20150220T00:00:10Z",
"scheduled_time" : "20150220T00:00:00Z"
},
"vars" : { ... }
}
  • metadata : watch定义的静态metadata
  • payload: 当前watch payload
  • id
  • Execution_time: watch执行开始时间
  • trigger: 有关事件触发器的信息
    • triggered_time:实际触发时间
    • scheduled_time:计划触发时间
  • vars: 可在执行期间由不同构造设置和访问的动态变量.这些变量的范围限定为单个执行(即它们不是持久的,不能在同一个watch的不同执行之间使用)

Using Scripts

可以使用脚本定义 conditions和transforms. 默认脚本语言是painless.

Elasticsearch5.0开始内置新的脚本语言painless.

脚本可以引用监视执行上下文中的任何值或通过脚本参数显式传递的值.

Using Templates

可以使用模板为watch定义动态内容. 执行的时候, 模板从监视执行上下文中提取数据. 例如, 可以使用模板为电子邮件填充主题字段, 其中数据存储在payload中. 模板还可以访问通过模板参数显示传递的值.

可以使用 Mustache脚本语言指定模板.

Inline Templates and Scripts

要定义内联模板或者脚本, 只需要直接在字段值中指定即可.

对于脚本,只需要将内联脚本定义为脚本字段的值即可.

Stored Templates and Scripts

如果存储模板和脚本, 则可以通过id引用它们.

要使用已经存储的模板和脚本, 定义的时候需要通过id字段显示指定id. 例如,下文直接引用id=email_notification_subject 的模板.

{
...
"actions" : {
"email_notification" : {
"email" : {
"subject" : {
"id" : "email_notification_subject",
"params" : {
"color" : "red"
}
}
}
}
}
}

四、访问搜索结果

conditions、transforms、actions可以通过ctx访问搜索结果,例如:

  • 访问所有匹配结果: ctx.payload.hits
  • 引用命中总数:ctx.payload.hits.total
  • 要访问特定匹配, 请使用其从零开始的数组索引.
  • 要从特定命中获取字段值, 请使用 ctx.payload.hits.hits..fields.

五、转换Transform

转换处理并更改ctx中的有效内容,以便为监控操作做好准备. 如果在transform处理后 payload为空,则不执行任何操作.

搜索转换(Search transform)

在集群上执行搜索,并使用返回的搜索响应替换watch执行上下文中的当前有效内容.

脚本转换(Script transform)

对当前有效payload执行脚本(Javascript)并将其替换为新生成的有效payload.

支持:

  • 转换格式类型
  • 生成全新的有效payload
  • 插入数据

创建新的有效payload属性:

"transform": {
"script": {
"script": "payload.outliers = payload.aggregations.response_time_outlier.values['95.0']"
}
}

过滤聚合桶:

"transform": {
"script": {
"script": "payload.newlist=[]; payload.payload.aggregations['2'].buckets.filter(function( obj ) { return obj.key; }).forEach(function(bucket){ console.log(bucket.key); if (doc_count.length > 1){ payload.newlist.push({name: bucket.key }); }});"
}
}

链转换(Chain transform)

在链中执行已经配置转换的有序列表, 其中一个转换的输出用作链中下一个转换的输入.

"transform": {
"chain": [
{
"search": {
"request": {
"index": [
"credit_card"
],
"body": {
"size": 300,
"query": {
"bool": {
"must": [
{
"match": {
"Class": 1
}
}
]
}
}
}
}
}
},
{
script: {
script: "payload.hits.total > 100"
}
}
]
}

六、触发事件(Actions)

actions用于将Watcher获取的任何结果传递给集群中的用户,API或新文档。 可以为每个操作定义多个操作和组。

actions使用{{mustache}} logic-less模板语法,执行的时候会使用响应payload中提供的具体值迭代数组、扩展模板中的标记。

当Watcher返回超过其条件的数据时,执行“Actions”。

支持的“Actions”类型如下:

Email

通过电子邮件/ SMTP发送查询结果和消息(需要kibana中配置邮件发送)

"email" : {
"to" : "root@localhost",
"from" : "sentinl@localhost",
"subject" : "Alarm Title",
"priority" : "high",
"body" : "Series Alarm {{ payload._id}}: {{payload.hits.total}}",
"stateless" : false
}

Email HTML

使用HTML正文通过电子邮件/ SMTP发送查询结果和消息(需要kibana中配置邮件发送)

"email_html" : {
"to" : "root@localhost",
"from" : "sentinl@localhost",
"subject" : "Alarm Title",
"priority" : "high",
"body" : "Series Alarm {{ payload._id}}: {{payload.hits.total}}",
"html" : "<p>Series Alarm {{ payload._id}}: {{payload.hits.total}}</p>",
"stateless" : false
}

webHook

向远程Web API发送post消息

"webhook" : {
"method" : "POST",
"host" : "remote.server",
"port" : 9200,
"path": ":/{{payload.watcher_id}}",
"body" : "{{payload.watcher_id}}:{{payload.hits.total}}",
"create_alert" : true
}

向远程web API发送get请求:

 "webhook" : {
"method" : "GET",
"host" : "remote.server",
"port" : 9200,
"path" : "/trigger",
"params" : {
"watcher": "{{watcher.title}}",
"query_count": "{{payload.hits.total}}"
}
}

webHook via Proxy

通过代理向远程API发送消息 - 电报示例:

"webhook": {
"method": "POST",
"host": "remote.proxy",
"port": "3128",
"path": "https://api.telegram.org/bot{botId}/sendMessage",
"body": "chat_id={chatId}&text=Count+total+hits:%20{{payload.hits.total}}",
"headers": {
"Content-Type": "application/x-www-form-urlencoded"
},
"create_alert" : true
}

Slack

发送消息到 slack

"slack" : {
"channel": "#channel",
"message" : "Series Alarm {{ payload._id}}: {{payload.hits.total}}",
"stateless" : false
}

Report (BETA)

使用PhantomJS获取网站快照并通过电子邮件/ SMTP发送。

需要kibana配置中的操作设置需要Pageres / PhantomJS:

npm install -g pageres

发送报告:

"report" : {
"to" : "root@localhost",
"from" : "kaae@localhost",
"subject" : "Report Title",
"priority" : "high",
"body" : "Series Report {{ payload._id}}: {{payload.hits.total}}",
"snapshot" : {
"res" : "1280,900",
"url" : "http://127.0.0.1/app/kibana#/dashboard/Alerts",
"path" : "/tmp/",
"params" : {
"username" : "username",
"password" : "password",
"delay" : 5000,
"crop" : false
}
},
"stateless" : false
}

Console

输出查询结果和消息到控制台,方便调试

"console" : {
"priority" : "DEBUG",
"message" : "Average {{payload.aggregations.avg.value}}"
}

Storing Payload

ELK默认情况不会存储原始payload,防止重复。但是可以通过如下配置保存和修改原始payload

"save_payload":true

具体例子如下:

 "email" : {
"to" : "root@localhost",
"from" : "sentinl@localhost",
"subject" : "Alarm Title",
"priority" : "high",
"body" : "Series Alarm {{ payload._id}}: {{payload.hits.total}}",
"stateless" : false,
"save_payload" : true
}

参考:

https://sentinl.readthedocs.io/en/latest/Watcher-Anatomy/

https://sentinl.readthedocs.io/en/latest/Watcher-Actions/

ELK的sentinl告警配置详解的更多相关文章

  1. 玩转ELK之三件套安装配置详解

    ELK是啥子??? ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash 和 Kibana. 特点: 收集 ...

  2. zabbix系列(三)zabbix3.0.4微信告警配置详解

    一.准备工作 申请微信公众号,并且是可以有发送消息的接口.添加有个脚本去调用微信的api. 之后可以参考下zabbix 的搭建,然后了解下脚本报警,之后再考虑报警方式的多样化. 个人微信一个 个人邮箱 ...

  3. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  4. JSHint配置详解

    Also available on Github JSHint配置详解 增强参数(Enforcing Options) 本类参数设为true,JSHint会产生更多告警. bitwise 禁用位运算符 ...

  5. openfalcon架构及相关服务配置详解

    一:openfalcon组件 1.falcon-agent 数据采集组件 agent内置了一个http接口,会自动采集预先定义的各种采集项,每隔60秒,push到transfer. 2.transfe ...

  6. Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

    一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...

  7. openfalcon架构及相关服务配置详解(转)

    一:openfalcon组件 1.falcon-agent 数据采集组件 agent内置了一个http接口,会自动采集预先定义的各种采集项,每隔60秒,push到transfer. 2.transfe ...

  8. ELK技术栈之-Logstash详解

    ELK技术栈之-Logstash详解   前言 在第九章节中,我们已经安装好Logstash组件了,并且启动实例测试它的数据输入和输出,但是用的是最简单的控制台标准输入和标准输出,那这节我们就来深入的 ...

  9. Log4j配置详解(转)

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

随机推荐

  1. 使用 pandas 导出数据

    import pandas as pd # In[58]: df = pd.DataFrame(houselist) # In[59]: df # In[61]: df.to_csv('lianjia ...

  2. Spring系列之AOP的原理及手动实现

    目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 引入 到目前为止,我们已经完成了简易的IOC和DI的功能,虽然相比如Spring来说肯定是非常简陋的,但是毕竟我 ...

  3. 新生命团队netcore服务器免费开放计划

    为了便于大家学习测试netcore,我们计划提供1~3台公网Linux服务器(CentOS/Ubuntu),1vCPU+1G内存+100Mbps,为期1年,每周重置系统修改一次密码.对使用者要求如下: ...

  4. git版本管理规范

    一.基本开发流程: 二.分支命名 2.1主分支 ① master :随时可供在生产环境中部署的代码 ② dev: 保存当前稳定并且最新的开发分支(多人开发同一分支) 2.2辅助分支 主要用于新功能的并 ...

  5. jvm详情——7、jvm调优基本配置、方案

    堆设置 -Xmn:设置年轻代大小   (整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般 固定大小为64m,所以增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推 ...

  6. web进修之—Hibernate 类型(4)

    本片包含Hibernate的两种类型的简单介绍和集合类型的映射. Hibernate中的两种类型: Entity 自己掌控自己的生命周期,比如Person有addrss属性(关联到另外一张表).age ...

  7. nginx多tomcat负载均衡

    目的 先说说我要干什么,如题:使用nginx实现多个tomcat服务器的负载均衡. nginx 大名鼎鼎,相信很多人都听过,以前感觉很厉害,用了之后发现真的很厉害.nginx可以做以下几件事: 反向代 ...

  8. Nginx下关于缓存控制字段cache-control的配置说明 - 运维小结

    HTTP协议的Cache -Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程.请求时的缓存指令包括: no ...

  9. python闯关之路(五)前端开发

    一,HTML部分 1,XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同: XHTML 元素必须被正确地嵌套. XHTML 元素必 ...

  10. zepto 事件分析3(add函数)

    在上一篇的分析中,最后$.on方法返回了一个add方法函数的执行,在这里先看一下其代码: function add(element, events, fn, data, selector, deleg ...