环境
- 两台虚拟机,一台server(公网IP),一台proxy(内网IP)。
- Docker环境, 使用 docker compose启动。
- 内网里有一台华为网络设备
目的
通过内网下的proxy接收内网一台网络设备,改网络设备通过SNMP trap发送数据给proxy。proxy把数据发给zabbix server。
使用的方式是通过snmptrapd + bash 方式完成此功能。
官方文档
部署
- zabbix server+agent+web套装 和之前文章环境类似
- proxy+agnet+snmp
version: '3.5'
services:
agent:
container_name: magnet
image: zabbix/zabbix-agent
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
privileged: true
pid: 'host'
env_file:
- ./menvs/.env_magent
restart: 'unless-stopped'
stop_grace_period: '5s'
networks:
- monitor
proxy:
container_name: mproxy
image: zabbix/mproxy-sqlite3:alpine-6.0
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./snmptraps:/var/lib/zabbix/snmptraps:rw
env_file:
- ./envs/.env_mprx
depends_on:
- magent
privileged: true
restart: 'unless-stopped'
stop_grace_period: '30s'
networks:
- monitor
zabbix-snmptraps:
image: zabbix/zabbix-snmptraps:6.0-alpine-latest
volumes:
- /etc/localtime:/etc/localtime
- ./snmptraps:/var/lib/zabbix/snmptraps:rw
restart: always
privileged: true
ports:
- "162:1162/udp"
networks:
- monitor
networks:
monitor:
挂在文件、目录:
- docker-compose.yaml 同级创建目录
snmptraps
赋予读写权限,为简单可以chmod -R 777 snmptraps
。 - 挂在
env_file
,此处需要配置正常,具体是.env_mprx
与zabbix server的通信配置。
.env_magent
与proxy的通信配置。
# env_magent
ZBX_SERVER_HOST=proxy
ZBX_PASSIVESERVERS='0.0.0.0/0'
ZBX_ACTIVE_ALLOW=0 #主动
ZBX_HOSTNAME=agnet001
# .env_mprx
ZBX_SERVER_HOST=xx.xx.xx.xx #zabbix server地址
ZBX_SERVER_PORT=10051
ZBX_HOSTNAME=Ed3oBNt2EP111 #zabbix添加proxy的name
ZBX_CONFIGFREQUENCY=30
ZBX_ENABLE_SNMP_TRAPS=true #开启snmptrapers
配置好后,docker-compose up -d
.
配置host&item
上面启动后,还需要网络设备配置snmp trape到指定的IP。 也就是当前跑服务设备的IP。
然后开始配置zabbix了。登陆zabbix web后,添加host。
团体名可以直接写,也可以在宏里面去配置。
在proxy那里选择在zabbix 添加后的proxy设备。例子里就是 Ed3oBNt2EP111。
item添加监控项:
注意时间,我开始看错了时间,使用description里面的格式不行。那个是其他方式使用的格式。bash的时间格式是这样的 yyyyMMdd.hhmmss
。
这里面Key 是snmptrap.fallback 。他的意思trap该接口的任何nmptrap[]项未trap的所有数据。
配置好后就得带数据来了。
程序通过接收数据保存到snmptraps目录,形成一个log文件。zabbix server 读取此文件进行获取数据。
文件内容如下:
其中在 ZBXTRAP 的右侧 有一个IP。 此IP和你在host上配置的SNMP interface 上面的IP应该是一样的。他读取log内容也是按照此IP来识别的。
因为log里面有数据,我们可以在host上看到zabbixserver展示的数据:
最后一条与上面的log文件最后一条是一样的内容。
证明这个获取数据是ok的。后面需要根据此log获取数据进行告警等动作。
今完结
后待续~