监控利器Zabbix之自动化监控的三种方式
一:zabbix自动化监控3种方法:
1、Zabbix agent自动去server端注册
2、server端自动发现
3、Zabbix API,server端主动
二: Zabbix agent的自动注册
1.客户端设置
修改zabbix-agent配置。 [root@zabbix_master zabbix-server-mysql-3.2.7]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.64,127.0.0.1 StartAgents=0 ServerActive=10.0.0.64 HostnameItem=system.hostname HostMetadataItem=system.uname Include=/etc/zabbix/zabbix_agentd.d/*.conf
2.web端设置
自动发现必须要设置ServerActive让客户端启动主动去寻找服务端 ,所以需要在web端操作:
Configuration--》Actions--》Event source:Auto registration--》Create action--》
Name:Agent自动注册--》Conditions:Host metadata like Linux--》
Operations:Operation type:Add host--Add --》Operations type:Add to host group --Linux servers --Add,,--》Operations type:Link to template--Template OS Linux Active --Add----》Update
重启zabbix-agent
systemctl restart zabbix-agent.service
然后等会就可以看到hosts linux-node1被添加进来了
Zabbix agent的自动注册实验成功。
三、discovery网络自动发现
1.先把agent端改为被动模式:
[root@zabbix_client zabbix-proxy-mysql-3.2.7]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.64 StartAgents=3 Hostname=zabbix_client HostMetadataItem=system.uname Include=/etc/zabbix/zabbix_agentd.d/*.conf
2.重启zabbix-agent
systemctl restart zabbix-agent
3.web端操作
Configuration--》Discovery--》Local network--》
创建Action:
Configuration--》Actions--》Event source:discovery
匹配规则:
添加主机,添加主机组,添加模板:
查看自动发现结果:
discovery网络自动发现实验成功。
四:Zabbix API,server端主动添加
1.使用zabbix API加监控
zabbix API主要有两个功能:
1、远程管理zabbix
2、远程查询一些数,比如写一个API,写成脚本,每次报警时把报警的图形一块发邮件
2.zabbix API位置
[root@zabbix_master zabbix-server-mysql-3.2.7]# ll /usr/share/zabbix/api_jsonrpc.php
-rw-r--r-- 1 root root 2327 7月 18 18:41 /usr/share/zabbix/api_jsonrpc.php
##所有的请求要发到这个php文件上面,api,传输模式是rpc的,传输格式是json。
3.zabbix api的使用
首先获取验证,不能谁都可以请求,我先给这个api发送一个用户名,密码,然后他给我返回一个token之类的东西,后面我拿着这个token就可以继续请求了,和openstack是一样的。
zabbix api是这样的,首先你给这个api_jsonrpc.php文件发送POST语句,里面附带上你的用户名,密码,然后他会给你返回一个session id,后面在请求别的时候你带上这个session id就OK了
4.验证用户
参考官方文档;
zabbix官方api文档
[root@zabbix_master zabbix-server-mysql-3.2.7]# curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1 }' http://10.0.0.64/zabbix/api_jsonrpc.php | python -m json.tool 返回值: { "id": 1, "jsonrpc": "2.0", "result": "cfabb2f89d43145424e327421d908a56" }
-H 类型
id 名字,类似一个标识
user 默认Admin
password 默认是zabbix
5.通过session id获取监控的所有hosts
[root@zabbix_master zabbix-server-mysql-3.2.7]# curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc": "2.0", > "method": "host.get", > "params": { > "output": ["host"] > }, > "auth": "cfabb2f89d43145424e327421d908a56", > "id": 1 > }' http://10.0.0.64/zabbix/api_jsonrpc.php| python -m json.tool 结果如下: { "id": 1, "jsonrpc": "2.0", "result": [ { "host": "zabbix_client", "hostid": "10122" }, { "host": "zabbix_master", "hostid": "10123" } ] }
6.获取模板
[root@zabbix_master zabbix-server-mysql-3.2.7]# curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc": "2.0", > "method": "template.get", > "params": { > "output": "extend" > }, > "auth": "cfabb2f89d43145424e327421d908a56", > "id": 1 > }' http://10.0.0.64/zabbix/api_jsonrpc.php | python -m json.tool
注:模板太多,此处不展示了。
7.过滤我们需要的主机模板
[root@zabbix_master zabbix-server-mysql-3.2.7]# curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc": "2.0", > "method": "template.get", > "params": { > "output": "extend", > "filter": { > "host": [ > "Template OS Linux" > ] > } > }, > "auth": "cfabb2f89d43145424e327421d908a56", > "id": 1 > }' http://10.0.0.64/zabbix/api_jsonrpc.php | python -m json.tool { "id": 1, "jsonrpc": "2.0", "result": [ { "available": "0", "description": "", "disable_until": "0", "error": "", "errors_from": "0", "flags": "0", "host": "Template OS Linux", "ipmi_authtype": "0", "ipmi_available": "0", "ipmi_disable_until": "0", "ipmi_error": "", "ipmi_errors_from": "0", "ipmi_password": "", "ipmi_privilege": "2", "ipmi_username": "", "jmx_available": "0", "jmx_disable_until": "0", "jmx_error": "", "jmx_errors_from": "0", "lastaccess": "0", "maintenance_from": "0", "maintenance_status": "0", "maintenance_type": "0", "maintenanceid": "0", "name": "Template OS Linux", "proxy_hostid": "0", "snmp_available": "0", "snmp_disable_until": "0", "snmp_error": "", "snmp_errors_from": "0", "status": "3", "templateid": "10001", "tls_accept": "1", "tls_connect": "1", "tls_issuer": "", "tls_psk": "", "tls_psk_identity": "", "tls_subject": "" } ] }
8.使用API来实现自动添加监控主机
方法参考官网
我们先创建一个用户组,zabbix_api,id为12,模板id为10001,查看方法如下:
加入一个host到zabbix-web
[root@zabbix_client zabbix-proxy-mysql-3.2.7]# curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc": "2.0", > "method": "host.create", > "params": { > "host": "zabbix_master", ##对应zabbix-agent的hostname,这里监控zabbix-server > "interfaces": [ > { > "type": 1, > "main": 1, > "useip": 1, > "ip": "10.0.0.64", ##对应zabbix的ip. > "dns": "", > "port": "10050" > } > ], > "groups": [ > { > "groupid": "12" ##hosts的组别 > } > ], > "templates": [ > { > "templateid": "10001" ##对应的模板 > } > ] > }, > "auth": "cfabb2f89d43145424e327421d908a56", > "id": 1 > }' http://10.0.0.64/zabbix/api_jsonrpc.php | python -m json.tool 结果创建成功。 { "id": 1, "jsonrpc": "2.0", "result": { "hostids": [ "10124" ] } }
如图:
如上图,通过zabbix提供的api,我们完成了host的加入监控系统。
五:zabbix api
zabbix官网文档提供zabbix api完全使用文档,供我们调用,通过对zabbix api的调用,我们可以完成zabbix上几乎所有的操作。发散思维,我们可以通过zabbix完全的api去做运维自动化的cmdb系统。
从而达到运维自动化的目的。
下面附上网上参考的python写的脚本,验证zabbix用户之用。
1.安装python环境
yum install python-pip -y pip install requests
2.执行脚本:
[root@zabbix_client zabbix-proxy-mysql-3.2.7]# python zabbix_api_user.py cfabb2f89d43145424e327421d908a56
3.脚本内容
[root@zabbix_client zabbix-proxy-mysql-3.2.7]# cat zabbix_api_user.py #!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json url = 'http://10.0.0.64/zabbix/api_jsonrpc.php' post_data = { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1 } post_header = {'Content-Type': 'application/json'} ret = requests.post(url, data=json.dumps(post_data), headers=post_header) zabbix_ret = json.loads(ret.text) if not zabbix_ret.has_key('result'): print 'login error' else: print zabbix_ret.get('result')
嗨、骚年、快来消灭0回复。