[关闭]
@tony-yin 2018-12-16T17:05:27.000000Z 字数 5765 阅读 962

ES告警详解之Sentinl

ES


上一篇文章详细讲解了ElastAlert这款告警组件,今天我们聊聊另一个ES开源告警组件Sentinl

sentinl

概述

sentinl是基于javascript开发的kibana插件,拥有告警和报表两大功能,分别作为X-PackAlertReporting的替代品,即插即用,它将前端UIwebserver和告警逻辑代码都集成在一个项目中,这一点要比上篇文章提到同为kibana插件的elastalert-kibana-plugin要强大不少,并且可以说sentinlUI无论是美观程度还是操作友好程度都完全秒杀elastalert-kibana-plugin。说了这么多是不是sentinl就很完美呢?请看下文慢慢讲述。

软件环境

  1. elasticsearch: 6.4.2
  2. kibana: 6.4.2
  3. sentinl: 6.4.2

安装

安装环节很简单,只需要进行通用的kibana安装插件的方式安装即可。

  1. $ /usr/share/kibana/bin/kibana-plugin install https://github.com/sirensolutions/sentinl/releases/download/tag-6.4.2-0/sentinl-v6.4.2.zip

安装完成以后,重启kibana服务即可在kibana页面上看到sentinl

Alert配置

告警配置环节其实也很简单,因为sentinl大部分配置都是通过UI创建告警的时候配置的,需要手动配置的地方并不多,只有告警方式相关的。

和上节一样,众多告警方式我们就选择最普遍的邮件告警进行讲解

  1. $ vim /etc/kibana/kibana.yml

在文件最下方添加以下配置:

  1. sentinl:
  2. settings:
  3. email:
  4. active: true // 开启email方式
  5. host: 'smtp.163.com' // smtp server
  6. user: 'xxx@163.com' // 发送邮箱账号
  7. password: 'xxx' //发送邮箱客户端授权码或密码
  8. timeout: 10000 // 连接smtp server的最大timeout

配置完成需要重启kibana服务才可以生效。这里需要注意的是hostuserpassword三个选项,host表示smtp主机地址,user表示发送邮箱的账号,password表示客户端授权码,如果没有授权码才是密码。

如果这样配置了,还是无法发送邮件成功,可以通过查看kibana的日志定位原因,大部分情况都是由于smtp server连接失败导致,可以通过本地邮件客户端进行测试:

  1. $ mailx -S smtp=<smtp-server-address> -r <from-address> -s <subject> -v <to-address> < body.txt

Report配置

sentinl除了提供告警功能,还提供了一个类似X-Pack Reporting的报表功能。

同样这个功能需要开启和配置,不得不说这个功能和相关文档还是存在着不少的问题,比如尽管文档声称默认enginehorseman,但是现在默认的是puppeteer

问题1

官方文档提供的配置例子是这样的:

  1. sentinl:
  2. settings:
  3. report:
  4. active: true
  5. executable_path: '/usr/bin/chromium' # path to Chrome v59+ or Chromium v59+

chromium环境中不存在的话,手动下载后同步配置中对应的路径:

  1. sentinl:
  2. settings:
  3. active: true
  4. engine: 'puppeteer'
  5. executable_path: '/usr/bin/chromium-browser'

运用上述配置会有以下报错:

  1. Option "report.executable_path" was deprecated. The path is handled automatically!

报错中显示executable_path这个选项已经被弃用,这个路径会被自动解析,一脸懵逼,文档中丝毫没提及。。。

问题2

当时笔者也很奇怪,如何自动解析?如何知晓chromium的路径呢?这个下面再讲,然后就先注释掉该选项配置:

  1. sentinl:
  2. settings:
  3. active: true
  4. engine: 'puppeteer'
  5. # executable_path: '/usr/bin/chromium-browser'

页面换了个报错:

  1. ActionError: report action: execute: run 'puppeteer' report: puppeteer work

如下图所示:

error1

这个时候笔者就通过关键字谷歌搜索,发现sentinl里面有一个issue 535,里面提到查看日志里面是否存在类似下面信息:

  1. ....
  2. server log [07:52:27.332] [info][Sentinl][init] Chrome bin found at: /media/trex/safe1/Development/siren/kibi-internal/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome
  3. ...
  4. server log [07:52:27.428] [info][Sentinl][init] PhantomJS bin found at: /media/trex/safe1/Development/siren/kibi-internal/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs
  5. ...

笔者去日志里面查了查,还真发现类似信息:

  1. {"type":"log","@timestamp":"2018-11-23T10:27:44Z","tags":["error","Sentinl","init"],"pid":8219,"message":"setting puppeteer report engine: Error: user has no permissions to make file executable: /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome"}

如下图所示

puppeteer permission

这就是为什么可以自动解析chrome路径了,因为sentinl内置了chrome,所以sentinl默认解析的是其内置chrome路径而非其他第三方下载的,所以文档中的/usr/bin/chromium也有点误导的感觉。

这一段日志提示chrome没有执行权限,于是查看权限:

  1. $ ll /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome
  2. -rw-r--r-- 1 root root 206915904 Nov 22 10:16 /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome

果然是不存在执行权限,然后手动添加权限:

  1. $ chmod +x /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome

问题3

更改之后这个报错没有了,但是又有了新的报错(真是醉了):

  1. Failed to load url

如下图所示

load url error

然后继续谷歌大法,在 issue 495 中看到了相关信息:

  1. for the error "Failed to load url" I just replaced the action's url with a valide link from a chosen dashboard

于是返回告警配置界面,发现有一个url选项,笔者也没填(因为当时也不知道这个url是干嘛的)。结合上面这哥们描述的,该url应该是kibana上面dashbord模块中某个已经存在的dashbord的链接,然后根据该dashbord生成报表。

于是手动创建了一个dashbord,然后将该dashbordurl更新至配置中的url

问题4

这次没报错了,report也发送到了指定邮箱,但是report是空的,这是因为新创建的dashbord并没有导入任何可视化图表,所以将url切换成了已经存在可视化图表的dashbordurl,这下可以发现发送的report是存在图表的。

结合之前monitoring的了解,突然想到这个url可能不是dashbord直接显示的url,而应该是通过share功能提供的link

问题5

上面engine选择puppeteer,笔者又尝试将engine切换成horseman

  1. sentinl:
  2. settings:
  3. report:
  4. active: true
  5. engine: 'horseman'

换了engine,依然报错不停:

  1. ActionError: report action: execute: run 'horseman' report: spawn EACCES

如下图所示

eacces error

其实这个问题,上文提到的 issue 535 中也给出了答案,horseman engine依赖的是phantomjs库,puppeteer依赖的是chrome库,问题2chrome缺少可执行权限,而spawn EACCES这样的关键字则表示phantomjs库无法使用,根据上文chrome的路径笔者找到phantomjs的路径并检查权限:

  1. $ ll /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs
  2. -rw-r--r-- 1 root root 1050 Nov 22 10:15 /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs

发现phantomjs也缺少可执行权限,添加权限:

  1. $ chmod +x /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs

但是UI上还是有相同的报错,只能继续查看日志,发现报错:

  1. {"type":"log","@timestamp":"2018-11-22T02:27:28Z","tags":["info","Sentinl","init"],"pid":21134,"message":"PhantomJS bin found at: /usr/share/kibana/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs"}

原来sentinl解析库不是上面node_modules目录的那个路径,而是在phantomjs这个目录下,查看权限情况:

  1. $ ls -lh /usr/share/kibana/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs
  2. -rw-r--r-- 1 root root 65M Nov 22 10:15 /usr/share/kibana/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs

果然还是缺少执行权限,添加权限:

  1. $ chmod +x /usr/share/kibana/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs

终于不报错了。。。

官方回应

这一系列问题,笔者也给sentinl提了 issue,作者也表示了这个权限问题之后会通过脚本等方式自动处理,然后表示这个文档没有同步更新,可以看最新同步文档

Sentinl & ElastAlert

elastalert相比较,就告警功能而言的话,如果要求不高,推荐使用sentinl,因为安装容易并且配置简单;但如果有复杂的告警场景或独立的告警方式,那推荐选择elastalert

整理一个对比表格,想必这样看起来更直观:

比较 Sentinl ElastAlert
安装 简单 一般复杂
配置 简单 一般复杂
UI 简单美观 不友好
告警规则数量 1个 11个
告警方式数量 6个 11个
告警方式隔离 不独立 独立
开发语言 javascript python
后端配置透明度 不透明 透明
成熟度 700+ star 5000+ start
开发者数量 28 160
commit数 1500+ 1800+
开发周期 2016/08 2015/11

根据上述表格,我们可以看出各有各的优势,sentinl更加偏向于集成进kibana的一种页面展示插件,而elastalert则是更偏向与后端告警功能的打磨。单从告警功能来看,elastalert看起来更强大一些,但是sentinl也有它的优势,UI非常地棒,其次还支持report功能,虽然现在还存在很多问题,但相信之后肯定越来越好,而且目前通过开发者数量和代码提交量可以看出有后来居上的感觉。就笔者而言,喜爱sentinlUI,喜爱elastalert的告警rule

总结

sentinl作为一个开源组件,提供了X-Pack两款收费组件:AlertReporting的替代功能,着实不错,告警功能配置简单、页面美观、操作友好;但是Report功能就显得问题较多,并且生成的报表也有很多瑕疵。希望之后可以不断优化和强大吧!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注