一、监控架构图

二、实现思路

  1. 在 Jenkins 上安装 Metrics 插件,使 Jenkins 暴露 metrics api;
  2. 编写python代码从api抓取数据,并将数据解析为zabbix可以识别的格式;
  3. 配置 Zabbix server 及 agent 以实现监控及告警

三、具体配置

1、安装Jenkins Metrics插件

插件下载地址:http://updates.jenkins-ci.org/download/plugins/metrics/

安装 Metrics 插件,在系统配置中,会多出“Metrics”的配置,如下图:



配置项不复杂。我们需要点击“Generate...”生成一个 Access Key(生成后,记得要保存)。这个 Key 用于身份校验,后面我们会用到。

保存后,我们在浏览器中输入URL:http://jenkins.local,me/metrics/<刚生成的 Access Key> 验证 Jenkins 是否已经暴露 metrics。如果看到如下图,就说明可以进行下一步了:

1.1 Metrics 插件介绍

Metrics 插件是基于 dropwizard/metrics 实现。它通过4个接口暴露指标数据:/metrics,/ping,/threads,/healthcheck。

1.2 Metrics 插件:/metrics 接口介绍

点击上图中的metric链接(http://jenkins.local.me/metrics/<Access Key>/metrics),它暴露了以下指标数据:

{
version: "4.0.0",
gauges: {...},
counters: {...},
histograms: {...},
meters: {...},
timers: {...}
}
  • Gauges:某项指标的瞬时值,例如:当前 Jenkins executor 的总个数(jenkins.executor.count.value)
  • Counters:某项指标的总数值,例如:http 请求活动连接数(http.activeRequests)
  • Meters:一段时间内,某事件的发生概率,例如:Jenkins成功执行的任务每分钟的执行次数(jenkins.runs.success.m1_rate)
  • Histogram:统计指标的分布情况。例如:Jenkins executor 数量的分布(jenkins.executor.count.history)
  • Timer:某项指标的持续时间。例如:Jenkins 任务等待时间(jenkins.job.waiting.duration)

1.3 Metrics插件其他接口

  • /ping:接口返回 pong 代表 Jenkins 存活,如下图:

  • /threads:返回 Jenkins 的线程信息

  • /healthcheck:返回以下指标:

{
"disk-space" : {
"healthy" : true
},
"plugins" : {
"healthy" : true,
"message" : "No failed plugins"
},
"temporary-space" : {
"healthy" : true
},
"thread-deadlock" : {
"healthy" : true
}
}

2、配置 Zabbix server 与 agent 实现监控及告警

Zabbix server 通过与 Zabbix agent 进行通信实现数据的采集。而 Zabbix agent 又分为被动和主动两种模式。我们使用的是被动模式,也就是Zabbix server 向 agent 索要数据。

所以,我们需要在 Zabbix agent 所在机器放一个获取 Jenkins 指标数据的脚本。再配置 Zabbix server 定时从该 agent 获取数据,最后配置触发器(trigger)实现告警。

2.1 创建监控模板并链接至主机组



2.2 创建监控项

这里需要解释其中几个选项为什么要那样填:

  • 类型:是 Zabbix server 采集指标的类型,我们选择的是 Zabbix agent,如上文所说。
  • 键值:由于我们要监控的指标并不是 Zabbix 预定义的。所以,需要使用用户自定义参数来实现监控 Jenkins 指标。Key 填的值为:jenkins.metrics[gauges.jenkins.node.count.value.value]。jenkins.metrics是需要执行的真正的 Key 名称。而 [] 内是传给该 Key 对应的命令的参数。对于初学者,Zabbix 这部分概念非常不好理解。也许这样会更好理解:在使用用户自定义参数来实现监控的情况下,Zabbix server 会将这个 Key 发送给 agent,然后 agent 根据这个 Key 执行指定的 逻辑 以获取指标数据。这个 逻辑 通常是一段脚本(shell命令或Python脚本等)。而脚本也是可以传参的,[]中的值就是传给脚本的参数。
  • 信息类型:监控数据的数据类型,由于该监控项监控的是 Jenkins node 节点的个数,所以,使用数字整型。
  • 更新间隔:指 Zabbix server 多长时间向 agent 获取一次数据。

到此,Zabbix server 端已经配置完成。可以在监测->最新数据中查看是否有最新的数据,然后可以创建仪表盘将数据以图形的方式呈现出来。其他监控项也可以按此方法进行配置。

监控脚本代码

使用zabbix监控Jenkins的更多相关文章

  1. 使用 Zabbix 监控 Jenkins

    笔者最近的工作涉及到使用 Zabbix 监控 Jenkins.在谷歌上搜索到的文章非常少,能操作的就更少了.所以决定写一篇文章介绍如何使用 Zabbix 监控 Jenkins. 下图为整体架构图: 整 ...

  2. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  3. Zabbix监控nginx-rtmp status(json版)

    与前面的文章 zabbix监控nginx-rtmp status(html版)区别只在于取值的页面不一样 http://127.0.0.1:81/control/get/all_streams sta ...

  4. Zabbix监控mysql performance

    介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...

  5. zabbix监控Java 8080端口

    linux下端口和服务是对应的,Java进程启动时默认监听8080端口,如果服务挂掉则8080端口就没有了. lsof -i:8080 端口,如果没有任何的输出,说明该端口不在工作. 想在zabbix ...

  6. zabbix监控报错zabbix server is not running解决方法

    问题描述: 布置好zabbix监控,正常运行.但是重启了虚拟机服务器之后,页面出现如下的报错,而且设置的报信息也是失效的:

  7. Zabbix监控Tengine

    title: Zabbix监控Tengine tags: zabbix,nginx,tengine author: Chinge Yang date: 2016-12-29 --- Zabbix监控T ...

  8. zabbix 监控web网站性能

    一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...

  9. Zabbix监控disk performance

    概述 zabbix获取/sys里面的磁盘信息并分析来监控disk performance sysfs是Linux内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似(默认挂载在 ...

随机推荐

  1. 惊呆了!Spring Boot 还能开启远程调试?

    持续原创输出,点击上方蓝字关注我 目录 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启调试? transport server suspend address onthrow ...

  2. 02 HTML 常见标记 选择器 样式

    no.02今天主要学习了在web中的HTML CSS,并在其中制作了明信片,在制作明信片途中有几个知识点需要总结:1.HTML 全称hyper text markup language 超文本标记语言 ...

  3. re模块,判断某行/某字符是否存在

    import re ##判断行是否存在def get_need_line(): ## 获取有用信息行 with open('task.log',mode="r") as f: fo ...

  4. audioread.NoBackendError

    audioread.NoBackendError 起因 使用以下代码读取音频文件时: # !/usr/bin/python # -*- coding: utf-8 -*- ""&q ...

  5. VC中句柄、指针、ID之间的转换

    win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量. 从句柄到指针 CWnd* pWnd ...

  6. 错误解析:org.apache.catalina.LifecycleException: Protocol handler start failed

    以下是报错代码: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalin ...

  7. UDS诊断之0x11服务

    服务作用: ECUReset(0x11),这个服务主要是通过诊断请求使ECU重启. 服务格式: Service ID Sub-function SID=0x11 SF=01表示hardReset,模拟 ...

  8. [游记] 2020ZJOI 爆零记

    DAY 0 凌晨一点打完CF,身心俱疲,由于头痛和困意原本可做的E没做出来,懊悔地睡下,竟然又过了一个多小时才睡着? 早上醒来,感觉身体轻飘飘的,("我真的睡过觉了吗")--听说打 ...

  9. 【QT】跨线程的信号槽(connect函数)

    线程的信号槽机制需要开启线程的事件循环机制,即调用QThread::exec()函数开启线程的事件循环. Qt信号-槽连接函数原型如下: bool QObject::connect ( const Q ...

  10. C++实现管理系统

    概述 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别.年龄.联系电话.家庭住址)最多记录1000人 显示联系人:显示通讯录中所有的联系人信息 删除联系人:按照姓名进行 ...