ES告警详解之Sentinl

原文地址: https://www.tony-yin.site/201...

sentinl

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

概述

sentinl是基于javascript开发的kibana插件,拥有告警和报表两大功能,分别做为X-PackAlertReporting的替代品,即插即用,它将前端UIwebserver和告警逻辑代码都集成在一个项目中,这一点要比上篇文章提到同为kibana插件的elastalert-kibana-plugin要强大很多,而且能够说sentinlUI不管是美观程度仍是操做友好程度都彻底秒杀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页面上看到sentinlnode

Alert配置

告警配置环节其实也很简单,由于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服务才能够生效。这里须要注意的是hostuserpassword三个选项,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

Report配置

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

一样这个功能须要开启和配置,不得不说这个功能和相关文档仍是存在着很多的问题,好比尽管文档声称默认enginehorseman,可是如今默认的是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>error1</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"}

以下图所示

puppeteer permission

这就是为何能够自动解析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

以下图所示

load url error

而后继续谷歌大法,在 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,而后将该dashbordurl更新至配置中的url

问题4

此次没报错了,report也发送到了指定邮箱,可是report是空的,这是由于新建立的dashbord并无导入任何可视化图表,因此将url切换成了已经存在可视化图表的dashbordurl,这下能够发现发送的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

以下图所示

eacces error

其实这个问题,上文提到的 issue 535 中也给出了答案,horseman engine依赖的是phantomjs库,puppeteer依赖的是chrome库,问题2chrome缺乏可执行权限,而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功能,虽然如今还存在不少问题,但相信以后确定愈来愈好,并且目前经过开发者数量和代码提交量能够看出有后来居上的感受。就笔者而言,喜好sentinlUI,喜好elastalert的告警rule

总结

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

相关文章
相关标签/搜索