监控平台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>`
    }

当点击“Test”按钮后,在页面底部的template tab页,会显示出报警的详细信息。

报警持久化

目前为止,我们新建了报警规则,但是bosun还不会触发报警,因为还没有将规则加到bosun的配置文件中。我们可以在“Test Config”tab页面中,校验我们的规则有无语法错误,如果没有语法错误,将规则加到bosun.conf中即可。bosun.conf这个文件在docker容器路径下面的/data/bosun.conf中,具体路径可以使用shell命令查一下sudo find / -name "bosun.conf",添加完之后,重启bosun服务,sudo docker ps查看启动的docker容器,拿到bosun的id后,sudo docker restart ${id}即可。

scollector

bosun平台依赖于其他程序推送的数据,它就是scollector。scollector是运行在各个节点机器上的程序,它不断抓取节点机器的信息,推送给bosun master机器。master机器本身已经集成了scollector。

目前有windows,mac和linux版本,下载地址http://bosun.org/scollector/

配置scollector

默认情况下,scollector会将数据发送到bosun master机器的80端口,当然我们也可以自定义:

    $ scollector -h docker-server-ip:8070

或者在scollector同路径下,创建一个scollector.conf文件:

host=docker-server-ip:8070 

更多参考:http://godoc.org/bosun.org/cmd/scollector

发表评论

电子邮件地址不会被公开。 必填项已用*标注

(Spamcheck Enabled)