在实际生产环境监控体系中,由于个别任务的需要对服务器中对外数据库连接的流量进行情况。为此我使用linux操作系统的iptables结合zabbix定时对网络中特定IP的流量情况进行采集,具体操作如下:
1.配置iptables防火墙过滤规则,统计指定IP的INPUT和OUTPUT流量。 #统计INPUT源地址为192.168.1.12 IP的流量
iptables -I INPUT -s 192.168.1.12
#统计OUTPUT目的地址为192.168.1.12 IP的流量
iptables -I OUTPUT -d 192.168.1.12
使用iptables命令查看防火墙统计的流量情况,如下: root@ip-172-31-15-86:/home/bitnami# iptables -nvx -t filter -L
Chain INPUT (policy ACCEPT 9559261 packets, 1806802825 bytes)
pkts bytes target prot opt in out source destination
1684184 619432744 all -- * * 192.168.1.12 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 9229817 packets, 2342781143 bytes)
pkts bytes target prot opt in out source destination
1927409 467400209 all -- * * 0.0.0.0/0 192.168.1.12
其中:
-L : 未指定参数的情况下默认输出INPUT、OUTPUT的流量。
-x : 用于精确输出流量,单位Byte
2.创建Zabbix自定义KEY vim /etc/zabbix/zabbix_agentd.d/network.flow.conf
#Network Flow INPUT Total
UserParameter=networkflow.input.bytes.1.12,var=$(sudo /sbin/iptables -nvx -L INPUT -t filter |grep '192.168.1.12' |awk '{print $2}')&& if [ "${var}" != "" ]; then echo ${var};else echo 0;fi
#Network Flow OUTPUT Total
UserParameter=networkflow.output.bytes.1.12,var=$(sudo /sbin/iptables -nvx -L OUTPUT -t filter |grep '192.168.1.12' |awk '{print $2}')&& if [ "${var}" != "" ]; then echo ${var};else echo 0;fi
3.配置zabbix用户执行iptables权限,修改/etc/sudoers
Linux操作系统默认情况下,iptables只能是超级管理员root才能运行。zabbix用户是无权执行任何iptables命令的。在不影响操作系统安全的情况下,可以配置sudoers来让zabbix用户只能执行我们需要的指令。 zabbix ALL=(ALL) NOPASSWD: /sbin/iptables -nvx -L OUTPUT -t filter,/sbin/iptables -nvx -L INPUT -t filter
4.Zabbix Server配置监控项目
打开需要添加监控项目的主机,新增上面定义的KEY,示例如下所示:
完成后保存自定义的KEY,过一会就能够采集到数据了。