zabbix
1.zabbix监控的模式
主动和被动模式都是对于客户端而言
-
主动模式
客户端主动将数据发送给server或者是代理服务器
-
被动模式
服务端或者proxy(代理服务器)主动找客户端索要数据------------>默认方式
被动模式在成规模的集群(成百上千台的),都是由服务端主动去找,那么服务端的压力会很大。
可视化界面创建模板时,可以选择主动还是被动模式。
2.zabbix之自动发现
自动发现:服务端可以自动发现客户端,并且把客户端添加到监控组当中去。
实现方法:通过zabbix官网提供的API内部的接口
API和端口之间的区别
应用和应用之间的通信:端口对端口 ---- 端到端
应用内部的组件进行通信:API
方法一:API
获取内部的通信密钥(token密钥)
#在服务端执行,获取token密钥
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"username": "Admin",
"password": "zabbix"
},
"id": 1
}' http://192.168.206.60/zabbix/api_jsonrpc.php#post: 服务器的后台发送数据
#Content-Type:application/json:发送的应用数据格式是json
#api_jsonrpc.php后台的动态请求的文件
{"jsonrpc":"2.0","result":"b5a3a34f9e1a1ceac70f3c0c557e5155","id":1}root@nginx1:~#
#b5a3a34f9e1a1ceac70f3c0c557e5155就是密钥
向API发送POST请求,添加新的主机
nignx1:192.168.206.60 zabbix server
nignx2:192.168.206.70 zabbix-agent
nginx3:192.168.206.80 zabbix-agent
#在服务端执行
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "nginx3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.206.80",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10343"
}
]
},
"auth": "b5a3a34f9e1a1ceac70f3c0c557e5155",
"id": 1
}' http://192.168.206.60/zabbix/api_jsonrpc.php | python3 -m json.tool解释如下-------------------------------------------------------------------------------------------------------------
"method": "host.create" #定义请求的方法,方法有很多,创建主机。
"host": "test2" 定义客户端的主机名
"interfaces": #定义监控的类型和客户端的信息
"type": 1 #1 agent;2 snmp;3 umpi;4 JMX
"useip": 1 #1表示使用ip地址;0表示使用DNS解析主机名
"ip": "192.168.206.80" #客户端的ip地址
"port": "10050" #客户端的端口
"groups": #主机群组 主机组id
"templates": #模板 模板id
方法二:页面的自动发现
#有bug,不推荐
用nginx2实验,在数据采集的主机里删除nginx2
数据采集-->自动发现-->创建发现规则
告警--动作--发现动作
nginx1:
zabbix_get -s 192.168.206.70 -p 10050 -k 'system.hostname'
3.zabbix之代理服务器
安装相关软件
test1:192.168.206.30 做代理服务器
cd /opt
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
apt-get update
apt install -y zabbix-proxy-mysql zabbix-get zabbix-sql-scripts
apt install -y mariadb-server
mysql_secure_installation
mysql -u root -p123456
CREATE DATABASE zabbix_proxy character set utf8 collate utf8_bin;
GRANT all ON zabbix_proxy.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql -u root -p123456 zabbix_proxy
修改proxy配置文件
vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.206.60 #指向服务端
Hostname=test1 #主机名对应本机
#194行
DBpassword=zabbix
systemctl restart zabbix-proxy.service
修改客户端配置文件
vim /etc/zabbix/zabbix_agent2.conf
两个Server指向192.168.206.30(代理服务器的ip)
systemctl restart zabbix-agent2.service
向API发送POST请求,添加新的主机
可视化界面:管理-->proxy-->创建proxy
创建完成后按F12获取proxy_id
数据采集-->主机-->删除nginx3
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "nginx3",
"proxy_hostid": "10636",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.206.80",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "b5a3a34f9e1a1ceac70f3c0c557e5155",
"id": 1
}' http://192.168.206.60/zabbix/api_jsonrpc.php | python3 -m json.tool
test1:tail -f /var/log/zabbix/zabbix_proxy.log
nginx1:tail -f /var/log/zabbix/zabbix_server.log
4.批量添加主机
方法一:通过脚本调用API
服务端nginx1: 添加shell脚本
#以添加70,80服务端为例
cd /opt
vim plzc.sh
#!/bin/bash
IP="
192.168.206.70
192.168.206.80
"
for i in ${IP}
do
#获取主机名
hostname=$(nslookup ${i} | awk '{ print $4 }' | sed 's/\.//')
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'${hostname}'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'${i}'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "b5a3a34f9e1a1ceac70f3c0c557e5155",
"id": 1
}' http://192.168.206.60/zabbix/api_jsonrpc.php | python3 -m json.tool
done#外部传参(hostname和i)要用单引号引起来
#也可以用反向代理服务器
#添加字段 "proxy_hostid": "10636", 即可
bash plzc.sh
方法二:通过postman批量添加
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'${hostname}'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'${i}'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "b5a3a34f9e1a1ceac70f3c0c557e5155",
"id": 1
}
5.zabbix-snmp监控
概述
snmp(simple network managerment protocol)简单网络管理协议,用来监控和管理网络设备(路由器,交换机等等)的标准协议。
实验
60服务器端口
apt -y install snmp snmpd
在ens上模拟路由器和cloud
路由器网关 192.168.206.100
snmp-agent
snmp-agent sys-info version all
#snmp1 snmp2 snmp3 all 开启协议之后,支持以上的所有版本
snmp-agent community write public
#路由器设备可以被哪些团体进行读写,public:公共组,所有设备都可以读写路由器的配置信息
snmp-agent target-host trap-hostname zabbix address 192.168.206.60 udp-port 161 trap-paramsname zabbix
#声明监控的zabbix的server端的ip地址,和snmp的监听端口
snmp-agent trap enable
#检测连通性
ping 192.168.206.60
nginx1: ping 192.168.206.100
vim /etc/snmp/snmpd.conf
#63行添加
view systemonly include .1
#数字是设备的oid信息,一般都是从设备厂商直接获取
1 表示设备名,查询设备的所有信息
数字越短能看到的信息越多
systemctl restart snmpd
snmpwalk -c public -v 2c 192.168.206.100
web端:
添加主机
route
Huawei vrp by snmp
virtual machines
192.168.206.100 161