Docker下实战zabbix三部曲之三:自定义监控项

为什么要自定义监控项通过上一章Docker下实战zabbix三部曲之二:监控其他机器的实战 , 我们知道了对机器的监控是通过在机器上安装zabbix agent来完成的 , zabbix agent连上zabbix server后 , 将自己所在机器的信息定时给到zabbix server , 这样就实现了机器的监控;
但是我们能监控到的只有cpu , 磁盘这些基础信息 , 对于一些业务信息例如访问量 , 某个逻辑的执行成功失败次数等信息 , 我们也想进行监控 , 这就需要我们去制作自定义监控项了 , 本章我们一起来实战自定义监控项 。
前文链接:

  1. Docker下实战zabbix三部曲之一:极速体验
  2. Docker下实战zabbix三部曲之二:监控其他机器
机器部署情况一览总的来说 , 有四台机器 , 各自的功能如下:
a. 假设有个机器在运行web应用 , 容器是Tomcat , 这个应用有个接口http://localhost:8080/zabbixcustomitemdemo/count , 可以返回最近一分钟的某个业务量(例如网站访问次数);
b. 有一台机器安装了zabbix agent , 作为自定义监控项的载体;
c. 有一台机器安装了zabbix server;
d. 有一台机器安装了MySQL , 作为zabbix系统的数据库;
整体部署如下图所示:
Docker下实战zabbix三部曲之三:自定义监控项

文章插图
 
运行web应用的server这是个基于maven的JAVA web应用 , 里面有个spring mvc的controller , 提供一个http服务 , 范围某个业务每分钟的业务量 , 代码如下图所示:
@Controllerpublic class CountController { @RequestMApping("/count") @ResponseBody public int count(String model, String type) { int base; int max; int min; if("a".equals(model)){ base = 50000; }else{ base =10000; } if("0".equals(type)){ max = 9000; min = 1000; }else{ max = 1000; min = 0; } return base + new Random().nextInt(max)%(max-min+1); }}从以上代码我们可以看出 , http服务会返回随机数 , 此服务接受两个参数model和type , 当model等于”a”时返回的随机数从50000开始 , model不等于”a”时返回的随机数从10000开始 , 当type等于”0”时 , 在base的基础上增加的值是1000到9000之间 , 当type不等于”0”时 , 在base的基础上增加的值是0到1000之间;
整个工程的代码已经上传到git上 , 地址是git@github.com:zq2599/blog_demos.git , 这个目录下由多个工程 , 本次实战的工程是zabbixcustomitemdemo , 如下图:
Docker下实战zabbix三部曲之三:自定义监控项

文章插图
 
docker-compose.yml文件上面我们已经把四台机器的功能和关系梳理清楚了 , 现在就来制定docker-compose.yml文件吧:
version: '2'services: zabbix-mysql-service:image: daocloud.io/library/mysql:8 container_name: zabbix-mysql-service environment: - MYSQL_ROOT_PASSword=888888 restart: always zabbix-server-service: image: monitoringartist/zabbix-xxl:3.2.6 links:- zabbix-mysql-service:mysqlhost container_name: zabbix-server-service restart: always depends_on: - zabbix-mysql-service ports: - "8888:80" environment: - ZS_DBHost=mysqlhost - ZS_DBUser=root - ZS_DBPassword=888888 zabbix-agent-a: image: zabbix/zabbix-agent:ubuntu-3.2.6 links:- zabbix-server-service:zabbixserverhost container_name: zabbix-agent-a restart: always depends_on: - zabbix-server-service environment: - ZBX_HOSTNAME=zabbix-agent-service-a - ZBX_SERVER_HOST=zabbixserverhost tomcat-server-service: image: bolingcavalry/bolingcavalrytomcat:0.0.1 container_name: tomcat-server restart: always ports: - "8080:8080"yml文件的内容如上所示 , 其中mysql、zabbix server , zabbix agent的配置和上一章Docker下实战zabbix三部曲之二:监控其他机器是一样的 , 新增的是一个tomcat的镜像 , 这个镜像是我在tomcat官方镜像的基础上做了点小改动 , 使得这个tomcat支持在线部署web应用(关于tomcat在线部署应用 , 请看文章http://blog.csdn.net/boling_cavalry/article/details/70184605)
准备好yml文件之后 , 打开终端 , 在yml文件所在目录下执行docker-compose up -d可以将yml文件中所有的容器都启动;
注意 , 如果您的电脑之前已经运行过上一章Docker下实战zabbix三部曲之二:监控其他机器中的docker-compose.yml文件 , 那么本次执行docker-compose up -d会提示启动失败 , 已有同样名称的容器存在 , 这时候可以去上一章的docker-compose.yml文件所在目录执行docker-compose down , 也可以通过docker ps -a将所有容器列出 , 再通过docker stop命令依次停止所有容器 , 再执行docker-compose rm命令依次删除;


推荐阅读