原文地址: https://www.tony-yin.site/201...
上一篇文章详细讲解了ElastAlert
这款告警组件,今天咱们聊聊另外一个ES
开源告警组件Sentinl
。javascript
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
安装插件的方式安装便可。java
$ /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
。node
告警配置环节其实也很简单,由于sentinl
大部分配置都是经过UI
建立告警的时候配置的,须要手动配置的地方并很少,只有告警方式相关的。python
和上节同样,众多告警方式咱们就选择最广泛的邮件告警进行讲解linux
$ vim /etc/kibana/kibana.yml
在文件最下方添加如下配置:git
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
表示客户端受权码,若是没有受权码才是密码。github
若是这样配置了,仍是没法发送邮件成功,能够经过查看kibana
的日志定位缘由,大部分状况都是因为smtp server
链接失败致使,能够经过本地邮件客户端进行测试:web
$ mailx -S smtp=<smtp-server-address> -r <from-address> -s <subject> -v <to-address> < body.txt
sentinl
除了提供告警功能,还提供了一个相似X-Pack Reporting
的报表功能。chrome
一样这个功能须要开启和配置,不得不说这个功能和相关文档仍是存在着很多的问题,好比尽管文档声称默认engine
是horseman
,可是如今默认的是puppeteer
。
官方文档提供的配置例子是这样的:
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
这个选项已经被弃用,这个路径会被自动解析,一脸懵逼,文档中丝毫没说起。。。
当时笔者也很奇怪,如何自动解析?如何知晓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
更改以后这个报错没有了,可是又有了新的报错(真是醉了):
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
。
此次没报错了,report
也发送到了指定邮箱,可是report
是空的,这是由于新建立的dashbord
并无导入任何可视化图表,因此将url
切换成了已经存在可视化图表的dashbord
的url
,这下能够发现发送的report
是存在图表的。
结合以前monitoring
的了解,忽然想到这个url
可能不是dashbord
直接显示的url
,而应该是经过share
功能提供的link
。
上面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,做者也表示了这个权限问题以后会经过脚本等方式自动处理,而后表示这个文档没有同步更新,能够看最新同步文档。
与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
功能就显得问题较多,而且生成的报表也有不少瑕疵。但愿以后能够不断优化和强大吧!