Bosun快速入门
本文档是Bosun的快速安装文档。根据本文档,你可以搭建一个完整的bosun服务,可以把指定机器的各种信息聚合起来,并且实现相关信息的报警。
Bosun
这篇文档中,bosun的安装依赖docker。如果不希望使用docker,可以从 bosun.org中自行下载bosun二进制文件,但是这样就需要自己安装OpenTSDB和HBase。
Docker
安装Docker
如果系统中没有安装Docker,可以参考此处进行安装 https://docs.docker.com/installation/。 安装完毕后,不要忘记将docker守护进程起开。
安装Boson
一旦docker安装完毕,可以使用下面的命令安装bosun,可能需要sudo权限。
docker run -d -p 8070:8070 stackexchange/bosun
这条命令,告诉docker进程为bosun启动一个后台进程,端口是8070。稍等15秒,bosun服务启动完毕,这样bosun的server端就搭建并启动完毕,我们可以使用浏览器进行访问了,http://yourip:8070
向Bosun中推送数据
即使没有任何的slave,buson server自身也会产生很多的数据。下面也会讲如何启动bosun slave。
bosun检查数据
假设bosun slave已经启动,server和slave已经通过8070端口建立了连接,那么bosun server就会收到slave的各种信息。我们可以通过http://docker-server-ip:8070/items来查看当前已经连接上的slave节点。如果看到一堆的参数,那么恭喜,bosun正在收集数据。在页面的底部或者第二列展示的是当前正在产生数据的slave节点。点击某个slave,然后点击“Available Metrics”,就会看到当前slave可以被监控的数据类型,如cpu、内存等等。
新建Alert
现在我们的server已经在收集各种信息了,但监控系统的关键作用在于当异常情况发生时,系统会给出报警。报警也是bosun重点支持的。
Bosun提供一套工作流,它使设计、测试、推送一条报警更简单。我们看到bosun首页的导航条,包括"Items", "Graph", "Expression", "Rule"和"Test Config",其实这也是我们新建一条Alert的步骤。一般情况下,我们需要先选择一条item(metric),这是Alert的基础。然后,我们观察这条item绘制的曲线,了解它的动态。之后,我们将这个曲线转化成表达式,再次这个表达式整理成规则。之后,我们可以测试这条规则,无误后,将其推送到bosun server中。
下面是一个新建Alert的例子,我们监控cpu的使用情况,如果cpu idle过低,就报警。这里我们使用的metric是“os.cpu”。当某台机器的cpu idle持续一小时过低时,我们就发送一条报警。打开bosun首页,下面开始配置。
Items
点击“Items”标签页。会看到bosun当前监控的所有的项。点击“os.cpu”,页面跳转到“Graph”页面。
Graph
在Graph页面,我们能看到bosun预加载了所有slave的图表。我们想看单台slave的信息,在host输入框中,输入我们的机器名,点击蓝色的"Query"按钮,buson就会将指定机器的最近一个小时的cpu使用情况画出来。
现在,我们看到了cpu利用率的曲线。在页面的底部,有个“Queries”区域。它表示的是生成当前曲线所用的表达式。
在Queries区域,还有“Expression”和“Rule”超链接,这两个链接直接链接到本页面曲线的表达式和规则页面。在本教程中,我们点击“Expression” 链接。
Expression
在表达式页面,我们可以通过我们的query条件,来调整结果集的大小。本页面的查询表达式应该类似"q("sum":rate...)" 通过这条语句,bosun就会去查询过去一个小时内的指定机器的cpu使用情况。我们点击“show”按钮,可以看到这条语句的结果集。每条结果都是 timestamp和value的形式。
新建Alert,我们不太关心结果集的大小,我们对于结果集的平均值更感兴趣。为了得到结果集的平均值,可以使用avg()方法,如下:
q("sum:rate{counter,,1}:os.cpu{host=your-system-here}", "1h", "")
avg(q("sum:rate{counter,,1}:os.cpu{host=your-system-here}", "1h", ""))
我们点击蓝色的“Test”按钮,我们就会看到结果变成单个数字,这个数字就是cpu在这段时间的平均利用率。现在我们得到了cpu平均值,可以根据这个值的大小,来监控cpu idle过低了。点击“rule”按钮。
Rule
在规则页面,有两个输入框,Alert框和Template框。Alert框展示的就是刚才我们新建的报警规则。Template框展示的是触发报警后的动作,如发送邮件等。当前Alert框,我们的这条规则,bosun会永远识别成“critical”,原因是 crit和warn是boolean类型的,我们把cpu的平均值赋给它,永远是非0值,非0值就是true。我们需要增加一些逻辑判断,如下:
alert cpu.is.too.high {
template = test
$metric = q("sum:rate{counter,,1}:os.cpu{host=your-system-here}", "1h", "")
$avgcpu = avg($metric)
crit = $avgcpu > 80
warn = $avgcpu > 60
}
如果机器的cpu利用率高于80%,就会触发critical报警;如果高于60%,触发warning报警。到现在为止,我们的这个Alert其实也没多大用处,因为它只监控了一台机器,我们可以通过修改host的值来监控其他机器,或者将host的值设成*,来监控所有机器。如果不想监控某台机器,还可以在Alert body中填写排除语句,但在本教程中不详细讲解了。
点击“Test”按钮,下方会列出所有的crit报警,warn报警和normal情况。点击“Email”按钮,会看到报警邮件的发送情况。默认的报警邮件模板,不太直观,可以改成下面的:
template test {
subject = {{.Last.Status}}: {{.Alert.Name}} on {{.Group.host}} body = `<p>Alert: {{.Alert.Name}} triggered on {{.Group.host}} <hr> <p><strong>Computation</strong> <table> {{range .Computations}} <tr><td><a href="{{$.Expr .Text}}">{{.Text}}</a></td><td>{{.Value}}</td></tr> {{end}} </table> <hr> {{ .Graph .Alert.Vars.metric }} <hr> <p><strong>Relevant Tags</strong> <table> {{range $k, $v := .Group}} <tr><td>{{$k}}</td><td>{{$v}}</td></tr> {{end}} </table>` }