zabbix自定义监控及告警

————————这里使用的是zabbix3.4版本——————————

zabbix可以根据需要自定义监控项,通过编写脚本来实现对某些数据或功能的监控告警

自定义监控

1. 安装agent并修改配置文件

  (这里脚本已经写好了,“D:\zabbix\script\get_process_info.py”,后面的是跟的脚本参数)

    在监控主机安装好zabbix_agent后,需要修改其中的配置文件。

LogFile=D:\zabbix\log\zabbix_agentd.log
Server=172.17.62.108  # server IP
ServerActive=172.17.62.108  # 主动模式的server IP地址
Hostname=   # 主机名
UnsafeUserParameters=1
UserParameter=get.monitor.info[*],D:\zabbix\script\get_process_info.py "$1" "$2" "$3" "$4" "$5"  # 自定义监控脚本

注:这里是windows环境下,安装服务:

安装服务  D:\zabbix\bin\zabbix_agentd.exe   -c   D:\zabbix\conf\zabbix_agentd.conf   -i
卸载服务  D:\zabbix\bin\zabbix_agentd.exe   -c   D:\zabbix\conf\zabbix_agentd.conf   -d
启动服务  D:\zabbix\bin\zabbix_agentd.exe   -c   D:\zabbix\conf\zabbix_agentd.conf   -s
停止服务  D:\zabbix\bin\zabbix_agentd.exe   -c   D:\zabbix\conf\zabbix_agentd.conf   -x

2. 配置监控主机

    登录zabbix前端web界面,配置——主机——创建主机

    zabbix自定义监控及告警_第1张图片

    选择主机,并填写以下红框部分。主机名称:与agent配置文件中Hostname保持一致,可见名称:自定义,群组:选择一个或者新建一个,ip地址:一般为内网ip,如果需要走公网监控则填写公网ip

    zabbix自定义监控及告警_第2张图片

3.添加监控项

    配置——主机——监控项——创建监控项(右上角)  或者通过 配置——模板——创建模板  在模板上添加监控项并应用到主机

    zabbix自定义监控及告警_第3张图片

    现在开始配置监控项,名称、键值、信息类型、单位、间隔、应用集等。名称可以根据目的自定义即可;键值,前面部分为agent配置文件中 UserParameter 值定义的名称,必须一致,"[]"中为脚本参数,以逗号隔开,具体根据编写的脚本来填;应用集可以对监控项进行分类;其余几项根据实际情况配置修改

zabbix自定义监控及告警_第4张图片

 

4.测试监控效果(这里默认网络没有问题)

    连接zabbix_server,进入安装目录的bin下,运行zabbix_get(‘192.168.1.10’是被监控主机的IP地址),可以看到我们成功获取了主机的VMS提交值,单位B

$ cd /usr/local/zabbix/bin/
$ ls
zabbix_get  zabbix_sender
$ ./zabbix_get -s 192.168.1.10 -k get.monitor.info[sswap_used,os]
11242897408

    回到web页面,检测中——最新数据,选择主机,过滤,选择刚才的监控项,我们也可以查看一段时间的数据图形,自定义监控项就添加完成了

    zabbix自定义监控及告警_第5张图片

告警

1.建立触发器

    配置——主机——触发器——创建触发器,可以为某一个主机建立,也可以在模板中建立触发器后应用到主机

    zabbix自定义监控及告警_第6张图片

    选择添加表达式,选择需要配置触发器的监控项,当监控项最新值大于N时,触发器生效

    zabbix自定义监控及告警_第7张图片

2.报警媒介

    管理——报警媒介类型——创建媒体类型(右上角),这里先介绍最常用的邮件报警

    zabbix自定义监控及告警_第8张图片

    1).QQ邮箱媒介

    直接采用qq邮箱,可以省却许多麻烦,如搭建邮件服务器等。采用465端口(云主机25端口一般默认被封,且安全性不高)。接着到qq邮箱主页中,QQ邮箱——设置——账户——开启IMAP/SMTP服务,并生成授权码,用户密码即授权码

    zabbix自定义监控及告警_第9张图片

    zabbix自定义监控及告警_第10张图片

    邮箱报警媒介类型就配置完成了,这里不会介绍报错处理,有遇到问题不能发送邮件报错的,可以查看我的另一篇文章,其中有部分详细介绍。

    2).电话、钉钉等报警媒介

    zabbix自定义监控及告警_第11张图片

    利用脚本类型的媒介可以实现电话、短信、钉钉、微信等方式告警,这里的脚本参数是传递的报警信息变量,配置在动作中,稍后会介绍。根据安装目录,脚本放在zabbix_server服务器下,/usr/local/zabbix/share/zabbix/alertscripts/,需要有执行权限。当触发器触发,执行动作,调用报警媒介,传递报警信息,执行脚本,我们就可以通过各种方式受到告警。具体的脚本需要根据接口来写,如购买阿里的电话、短信通知,利用钉钉机器人接口发送信息。文章末尾会给出一些脚本,包括调用钉钉接口。

    3).绑定媒介到用户

    zabbix自定义监控及告警_第12张图片

    只有绑定了媒介,当动作触发了该媒介并传到该用户,且示警度达到上面配置的严灾级别,才会触发动作中的操作。在用户处也可以配置主机权限。

3.配置动作

    配置——动作——创建动作

    动作触发可以设置条件,如非维护状态,示警度大于严重等

    zabbix自定义监控及告警_第13张图片

    之后配置触发动作后的具体的操作,消息内容,框中的内容即是配置的媒介类型中的脚本参数{ALERT.MESSAGE}的值

    zabbix自定义监控及告警_第14张图片

    之后编辑或新的,配置发动对象等,可以发送到某个用户或组,再配置发送到的媒介。注意,用户必须有该媒介,并且有触发动作的主机的权限,否则不会收到消息。同样的我们可以配置恢复和确认操作,也可以不配置。

    zabbix自定义监控及告警_第15张图片

附录

1.钉钉机器人接口脚本

钉钉群——群设置——群机器人——添加机器人

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: wyx
import requests
import json
import sys


headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8b8d62184"


def msg(text):
    json_text = {
        "msgtype": "text",
        "at": {
            "atMobiles": [],
            "isAtAll": False
        },
        "text": {
            "content": text
        }
    }
    print(requests.post(api_url, json.dumps(json_text), headers=headers).content)


if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)

    运行脚本,钉钉受到消息

./send_msg_dingding.py "hello everyone"

    

2.电话告警一般需要购买固定电话号码,并提交审核通过,如阿里云、华为云,之后根据sdk调用接口

3.短信服务也需要购买并通过审核,但相比电话审核方便快捷得多,费用也较低

4.这是python写的监控脚本,可以获取系统信息

# -*- coding:utf-8 -*-
import psutil
import sys

def getpid(processName,number):
	pids=psutil.pids()
	i=1
	for pid in pids:
		
		p = psutil.Process(pid)
		if p.name() == processName:
			if i==int(number):
				return pid
				i+=1
			else :
				i+=1
				continue
	
if  __name__ =="__main__":

	if "rss"==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])		
		p = psutil.Process(pid)
		a= p.memory_info()
		print a.rss
	elif "vms"==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])		
		p = psutil.Process(pid)
		a= p.memory_info()
		print a.vms
	elif "vms_used" == sys.argv[1]:
		vms_used = psutil.swap_memory().used
		print vms_used
	elif "percent"==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])		
		p = psutil.Process(pid)
		percent=p.memory_percent()
		print percent
	elif "cpu_user"==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])		
		p = psutil.Process(pid)
		cpu=p.cpu_times()
		print cpu.user
	elif "cpu_system"==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])		
		p = psutil.Process(pid)
		cpu=p.cpu_times()
		print cpu.system
		
	elif "cpu_percent" ==sys.argv[1]:
		pid=getpid(sys.argv[2],sys.argv[3])
		p = psutil.Process(pid)
		#print pid
		cpu=p.cpu_percent(interval=1)
		#/psutil.cpu_count()
		#print psutil.cpu_count()
		print cpu
	elif "mem_usd" == sys.argv[1]:
		mem = psutil.virtual_memory()
		print mem.percent
	else:
		print "pless chanshu"

 

你可能感兴趣的:(zabbix,zabbix自定义监控,邮件告警,自定义脚本告警)