zabbix监控项目接口

##

背景

国庆期间出现项目访问异常,zabbix也没报警。通过线上日志排查,初步判断是由于内存溢出导致,在项目接口方面由于没做监控,导致不能及时发现和响应问题。急需监控处理

解决方案

考虑到后续域名动态更新及维护效率,把所有域名放置gitlab中,每次监控程序自动刷新配置,有问题则直接报警,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@support zabbix]# cat checkDomainApi.py 
# -*- coding: UTF-8 -*-
# @File : checkDomainApi.py
# @Time : 2019/10/10
# @Author : Duan.rj


'''
说明;
git中获取最新接口文件(domainApiList),判断文件内所有接口是否异常(正常为True,其他都为异常) \
如有异常则发送异常api
'''

import urllib2


domainFileDir = '/opt/Script'
domainFile = domainFileDir + '/domainApiList'

domainErrorList = []

# 获取最新文件
with open(domainFile) as f:
domainUrls = f.readlines()
# readlines读取时会带 "\n"换行符,需要二次过滤
domainUrlsList = ''.join(domainUrls).strip('\n').splitlines()

for domainUrl in domainUrlsList:
try:
getValue = urllib2.urlopen('http://' + domainUrl + '/monit/heartbeat')
if getValue.read() != 'true':
domainErrorList.append(domainUrl)
except Exception:
domainErrorList.append(domainUrl)


if domainErrorList != []:
for domainUrl in domainErrorList:
print('GET "' + domainUrl + '" API Error!')
else:
print(0)

要想避免脚本或者监控的域名文件(这里是domainApiList)每次不能实时更新,推荐使用crontab定时更新:

1
2
3
[root@support zabbix]# crontab -l
# check domain script and domain file
00 */1 * * * cd /opt/Script/ops/zabbix;git pull 2>&1 >> /var/log/messages

这样,本地有任何改动,当push到git server后,服务端就会定期更新。

zabbix配置

新建模板,并定义监控项和触发器,由于异常返回为字符串,注意在监控项中信息类型要配置正确

触发器配置

当域名有问题时,收到报警如下:

完。