原文地址:https://www.tony-yin.site/201...
上一篇文章详细讲解了ElastAlert
这款告警组件,今天我们聊聊另一个ES
开源告警组件Sentinl
。
概述
sentinl
是基于javascript
开发的kibana
插件,拥有告警和报表两大功能,分别作为X-Pack
的Alert
和Reporting
的替代品,即插即用,它将前端UI
、webserver
和告警逻辑代码都集成在一个项目中,这一点要比上篇文章提到同为kibana
插件的elastalert-kibana-plugin
要强大不少,并且可以说sentinl
的UI
无论是美观程度还是操作友好程度都完全秒杀elastalert-kibana-plugin
。说了这么多是不是sentinl
就很完美呢?请看下文慢慢讲述。
软件环境
elasticsearch: 6.4.2
kibana: 6.4.2
sentinl: 6.4.2
安装
安装环节很简单,只需要进行通用的kibana
安装插件的方式安装即可。
$ /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
创建告警的时候配置的,需要手动配置的地方并不多,只有告警方式相关的。
和上节一样,众多告警方式我们就选择最普遍的邮件告警进行讲解
$ vim /etc/kibana/kibana.yml
在文件最下方添加以下配置:
sentinl:
settings:
email:
active: true // 开启email方式
host: 'smtp.163.com' // smtp server
user: 'xxx@163.com' // 发送邮箱账号
password: 'xxx' //发送邮箱客户端授权码或密码
timeout: 10000 // 连接smtp server的最大timeout
配置完成需要重启kibana
服务才可以生效。这里需要注意的是host
、user
和password
三个选项,host
表示smtp
主机地址,user
表示发送邮箱的账号,password
表示客户端授权码,如果没有授权码才是密码。
如果这样配置了,还是无法发送邮件成功,可以通过查看kibana
的日志定位原因,大部分情况都是由于smtp server
连接失败导致,可以通过本地邮件客户端进行测试:
$ mailx -S smtp=<smtp-server-address> -r <from-address> -s <subject> -v <to-address> < body.txt
Report配置
sentinl
除了提供告警功能,还提供了一个类似X-Pack Reporting
的报表功能。
同样这个功能需要开启和配置,不得不说这个功能和相关文档还是存在着不少的问题,比如尽管文档声称默认engine
是horseman
,但是现在默认的是puppeteer
。
问题1
官方文档提供的配置例子是这样的:
sentinl:
settings:
report:
active: true
executable_path: '/usr/bin/chromium' # path to Chrome v59+ or Chromium v59+
chromium
环境中不存在的话,手动下载后同步配置中对应的路径:
sentinl:
settings:
active: true
engine: 'puppeteer'
executable_path: '/usr/bin/chromium-browser'
运用上述配置会有以下报错:
Option "report.executable_path" was deprecated. The path is handled automatically!
报错中显示executable_path
这个选项已经被弃用,这个路径会被自动解析,一脸懵逼,文档中丝毫没提及。。。
问题2
当时笔者也很奇怪,如何自动解析?如何知晓chromium
的路径呢?这个下面再讲,然后就先注释掉该选项配置:
sentinl:
settings:
active: true
engine: 'puppeteer'
# executable_path: '/usr/bin/chromium-browser'
页面换了个报错:
ActionError: report action: execute: run 'puppeteer' report: puppeteer work
如下图所示:
<center></center>
这个时候笔者就通过关键字谷歌搜索,发现sentinl
里面有一个issue 535,里面提到查看日志里面是否存在类似下面信息:
....
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
...
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
...
笔者去日志里面查了查,还真发现类似信息:
{"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"}
如下图所示
这就是为什么可以自动解析chrome
路径了,因为sentinl
内置了chrome
,所以sentinl
默认解析的是其内置chrome
路径而非其他第三方下载的,所以文档中的/usr/bin/chromium
也有点误导的感觉。
这一段日志提示chrome
没有执行权限,于是查看权限:
$ ll /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome
-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
果然是不存在执行权限,然后手动添加权限:
$ chmod +x /usr/share/kibana/plugins/sentinl/node_modules/puppeteer/.local-chromium/linux-564778/chrome-linux/chrome
问题3
更改之后这个报错没有了,但是又有了新的报错(真是醉了):
Failed to load url
如下图所示
然后继续谷歌大法,在 issue 495 中看到了相关信息:
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
,然后将该dashbord
的url
更新至配置中的url
。
问题4
这次没报错了,report
也发送到了指定邮箱,但是report
是空的,这是因为新创建的dashbord
并没有导入任何可视化图表,所以将url
切换成了已经存在可视化图表的dashbord
的url
,这下可以发现发送的report
是存在图表的。
结合之前monitoring
的了解,突然想到这个url
可能不是dashbord
直接显示的url
,而应该是通过share
功能提供的link
。
问题5
上面engine
选择puppeteer
,笔者又尝试将engine
切换成horseman
:
sentinl:
settings:
report:
active: true
engine: 'horseman'
换了engine
,依然报错不停:
ActionError: report action: execute: run 'horseman' report: spawn EACCES
如下图所示
其实这个问题,上文提到的 issue 535 中也给出了答案,horseman engine
依赖的是phantomjs
库,puppeteer
依赖的是chrome
库,问题2
是chrome
缺少可执行权限,而spawn EACCES
这样的关键字则表示phantomjs
库无法使用,根据上文chrome
的路径笔者找到phantomjs
的路径并检查权限:
$ ll /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs
-rw-r--r-- 1 root root 1050 Nov 22 10:15 /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs
发现phantomjs
也缺少可执行权限,添加权限:
$ chmod +x /usr/share/kibana/plugins/sentinl/node_modules/phantomjs-prebuilt/bin/phantomjs
但是UI
上还是有相同的报错,只能继续查看日志,发现报错:
{"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
这个目录下,查看权限情况:
$ ls -lh /usr/share/kibana/plugins/sentinl/phantomjs/phantomjs-2.1.1-linux-x86_64/bin/phantomjs
-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
果然还是缺少执行权限,添加权限:
$ 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
功能,虽然现在还存在很多问题,但相信之后肯定越来越好,而且目前通过开发者数量和代码提交量可以看出有后来居上的感觉。就笔者而言,喜爱sentinl
的UI
,喜爱elastalert
的告警rule
。
总结
sentinl
作为一个开源组件,提供了X-Pack
两款收费组件:Alert
和Reporting
的替代功能,着实不错,告警功能配置简单、页面美观、操作友好;但是Report
功能就显得问题较多,并且生成的报表也有很多瑕疵。希望之后可以不断优化和强大吧!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。