zabbix-agent客户端在Linux服务器安装之后,服务器端配置上Template OS Linux这个模板 ,就会自动搜索该服务器上的所有网卡,然后实时记录income流量和outcome流量,并绘制成图标显示,如下。

有这个粗略的统计可以帮助运维人员了解服务器的健康情况,但是有时候我们需要更加精细的监控,监控粒度要精细到某个端口和IP,比如统计80端口,443端口以时间为轴的流量变动情况。或者统计来自192.168.1.*和192.168.2.*流量的变化情况,甚至更进一步,统计192.168.1.1访问本机80端口产生的流量。这种需求使用基于网卡的监控已经不足以实现,必须使用新方法。

好在Linux网络流量都会经过iptables内核模块,iptables能够以极高的效率进行IP协议数据包和流量的统计,在记录和统计时几乎不影响系统性能,而且查询计数器和清零计数器也以毫秒为单位。通过iptables灵活的过滤命令,我们可以像配置防火墙一样配置我们需要监控的流量,然后配合zabbix自定义轮训取值功能,将客户机iptables统计的结果收集到zabbix server当中,并绘制图形,就可以直观准确的分析流量了。

首先我们要补充一些iptables知识,这里我就不赘述了,可以看下面这篇文章

https://www.cnblogs.com/pangguoping/p/5715539.html

大体来说,就是通过在Filter表中添加相关端口和IP的监控条目,然后定时使用iptables -v命令查看数据包的数量和流量大小,并定期使用iptables -Z命令清空计数器。最后就得到每分钟或每小时某端口的流量了。

我目前设计了两个场景,一个是统计某Linux服务器22端口的流量变化情况,另一个是统计192.168.1.1访问某LInux服务器9080端口的流量情况,zabbix服务器每30秒收集一次数据,并清空iptables计数器,然后把收集到的数据除以30,就是平均每秒的流量。

首先我们设置iptables规则

iptables -I INPUT -p tcp --dport 22
iptables -I INPUT -p tcp -s 192.168.1.1 --dport 9080

然后写一个脚本,用来调用iptables,获取当前一段时间统计的流量

#!/bin/bash
#echo $(sudo /sbin/iptables -vxn -L)
output=$(sudo /sbin/iptables -vxn -L | awk -v nr=$1 'NR==nr {print $2}')
sudo /sbin/iptables -Z > /dev/null
output=$(($output / $2))
if [ -z $output ]
then echo "0"
else echo $output

这个脚本传入了两个参数,$1是取iptables -v结果的第几行,一般从第三行开始就是具体规则统计的信息了,通过上面-I命令,观察后得出是第三行和第四行

$2是zabbix server来取值的间隔,单位是秒,通过某段时间的流量除以这段时间的长度就得出每秒的流量,返回给zabbix server。

由于iptables只能由root用户进行调用,zabbix客户端的用户为zabbix,没有权限使用iptables,如果不加sudo,调用时就会报错:

所以要添加sudo,可是Linux用户并不是想用sudo就可以用sudo的,根据我另一篇关于zabbix权限的博客经验 《 Zabbix远程命令权限不足问题解决方法》,通过修改/etc/sudoers文件来使zabbix用户可以使用sudo命令。方法就是在/etc/sudoers文件中添加下面一行

zabbix ALL=NOPASSWD: /sbin/iptables

另外centos7以上不要忘了把selinux也一并关闭

setenforce 0

此时我们就可以在客户机上测试这个脚本是不是可以正常取到流量值了,单位为Byte

sudo -u zabbix /usr/local/bin/trafic_status 3 1

上面就是以zabbix用户运行脚本文件,取iptables -v结果的第四行中流量值的大小,结果应为正整数,如下图

然后需要为zabbix server设置一个key,用于取值,此时我们需要在zabbix-agent的配置文件夹中增加一个文件,配置自定义监控键,我的配置文件夹为/etc/zabbix/zabbix_agentd.d/,我在里面新建了一个文件名为userparameter_trafic.conf,内容如下

UserParameter=custom.trafic[*],/usr/local/bin/trafic_status $1 2>/dev/null

然后我们客户端的工作就已经做好了,此时需要重启zabbix-agent以生效

service zabbix-agent restart

然后我们登录zabbix-server服务器,先使用zabbix-get命令查看一下能否成功取到监控值

zabbix_get -s 192.168.2.1 -k "custom.trafic[3,30]"

上面192.168.2.1就是zabbix客户机的地址,custom.trafic是我们上面客户机配置文件中配置的UserParameter,3是iptables -v输出结果的第三行,对应着Filter表第一条INPUT条目监控的流量。30是把获得流量除以30,因为我设置30秒收集一次并清空计数器,所以每秒的平均流量就除以30,你也可以设置10秒或15秒,不过太频繁也没有必要。

如果能取到正整数,那么我们客户机配置的没有问题,如果取不到,可以逐行屏蔽上面的脚本进行调试。一般问题容易出在iptables的权限上面。

然后我们就可以到zabbix-server的控制台增加监控项和图表了,如下图,主要就是设置更新间隔和第几行,保证更新间隔(秒)和第二个参数一致

配置图表,如下

主要就是将刚才设置的监控项放进去,然后调整一下坐标Y轴和线的颜色

配置完成后等待几分钟,就可以看到图了,如下

如果没有线出现,那么就到zabbix的”检测中“-“最新数据” 里查看报错内容,如下

小彩蛋:

很多人在监控的时候还需要同时监控TCP连接情况,尤其是ESTABLISHED和FIN_WAIT状态的TCP连接数量,和上面一样,可以通过脚本并授权root用户获取

/etc/zabbix/zabbix_agentd.d/userparameter_sstcp.conf

UserParameter=custom.sstcp[*],/usr/local/bin/tcp_status $1 2>/dev/null

可执行脚本文件:/usr/local/bin/tcp_status,第一个参数为TCP状态,如ESTAB

#monitor tcp
UserParameter=custom.sstcp[*],/usr/local/bin/tcp_status $1 2>/dev/null
[root@emessage zabbix_agentd.d]# cat /usr/local/bin/tcp_status
#!/bin/bash
#xiaoluo
#scripts for tcp status
function SYNRECV {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'SYN-RECV' | awk '{print $2}'
}
function ESTAB {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
}
function FINWAIT1 {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-1' | awk '{print $2}'
}
function FINWAIT2 {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-2' | awk '{print $2}'
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
}
function LASTACK {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LAST-ACK' | awk '{print $2}'
}
function LISTEN {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
}
output=$($1)
if [ -z $output ]
then echo "0"
else echo "$output"
fi

zabbix-server的监控项配置如下

图形配置如下

然后就可以查看TCP连接状态的效果图了

可以明显的看到,白天时候的TCP连接数比晚上的多。而且通过这种方式,可以直观的看出有没有TCP连接泄露(open之后不close)的连接

zabbix 监控Linux TCP/UDP端口流量相关推荐

  1. linux监控http连接数,zabbix监控linux tcp连接数

    linux: 在linux上手动获得tcp连接数的命令为:netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' #ESTABL ...

  2. linux udp 端口测试,RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明

    RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明2020-06-11 在 Linux 系统中,有时需要在系统中测试端口的连通性,以便确认系统的TCP.UDP协议栈是否可以正常运行. ...

  3. Linux服务器上测试TCP/UDP端口的连通性

    目录 说明 测试tcp端口的连通性: 使用nc命令来测试udp端口的连通性: 使用nc命令来测试tcp端口的连通性: 使用案例如下: 说明 翻译自: How to Test Port[TCP/UDP] ...

  4. linux 开通udp 端口号,Linux 下 TCP/UDP 端口测试及验证方法说明

    Linux 下 TCP/UDP 端口测试及验证方法说明 在云服务器 ECS Linux 系统中,有时需要在系统中测试端口的连通性,以便确认系统的TCP.UDP协议栈是否可以正常运行.本文对此进行简要说 ...

  5. linux系统怎么测试udp端口通不通,怎么在Linux服务器上测试TCP/UDP端口的连通性?...

    翻译自: How to Test Port[TCP/UDP] Connectivity from a Linux Server (文档 ID 2212626.1) 适用于: Linux OS - Ve ...

  6. Zabbix监控Linux主机设置

    Zabbix监控Linux主机设置 说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对Linux主机进行监控. 具体操作: 以下操作在被监控的Linux主机进行,这里以CentOS ...

  7. python测试udp端口_zabbix上使用外部检查的方式监测公网tcp/udp端口开放情况

    1.使用nmap程序可以监测公网tcp/udp开放情况,比较准确 2.zabbix服务器支持使用外部检查的方式定义监控项,需要自己编写脚本 3.脚本的思路使用nmap监测公网指定tcp/udp端口,使 ...

  8. TCP/UDP端口连接测试

    TCP/UDP端口连接测试 TCP端口连接测试 测试主机与目标端口的网络是否通畅 telnet ip port UDP端口连接测试 1.测试目标端口是否正常(前提是目标主机上启动了服务端口,且本机与服 ...

  9. zabbix监控linux文件目录,zabbix监控linux磁盘性能

    原标题:zabbix监控linux磁盘性能 前提环境 perl和python,以及zabbix-agent已是可用状态. 需要主要监控的指标 1:每秒IO数,即iops或tps 2:吞吐率 3:平均I ...

最新文章

  1. JSON Web Tokens测试工具
  2. 什么?强化学习竟然来源于心理学?
  3. mysql str_to_date 字符串转换为日期
  4. google map Api接口整理
  5. sizzle分析记录:getAttribute和getAttributeNode
  6. 深度学习进行目标识别的资源列表
  7. shell grep sed awk 练习
  8. 怎么做手机的上下滑动_手机视频恢复怎么做?删除时间较久的找回方法
  9. 51单片机按键控制数码管0~9_7种常见的51单片机时钟电路图
  10. HTML5获取地理位置定位信息
  11. 和push的区别_RocketMQ的消息订阅push和pull的区别
  12. 在内容也中寻找母板页中的控件
  13. 虚拟机 网卡模式配置
  14. 阿里云Centos6.6安装配置docker
  15. excel2latex表格竖线截断不连续不连贯问题一键解决
  16. xbox 360手柄驱动程序_魔派PRO手柄常见问题解决方法一览
  17. 太阳能无线充电系统设计
  18. 虚拟服务器和vdi,VDI虚拟化平台搭建 01--VDI基本环境准备
  19. 开卷有益,学习无止境
  20. 《那些年啊,那些事——一个程序员的奋斗史》——47

热门文章

  1. marlin源码分析 一
  2. u盘中毒文件夹数据丢失怎么恢复?这里有4个恢复方案
  3. Qt小项目之串口助手控制LED
  4. 应收账款(保理)融资模式解读
  5. Oracle11.2.0.4静默安装响应文件db_install.rsp
  6. 派克斯全部错误代码解析
  7. 电脑春促抓住了谁的胃口?
  8. 【MyBatis学习8】MyBatis中的二级缓存
  9. postgresql数据库varchar、char、text的比较
  10. 【工业大数据】 昆仑数据首席科学家田春华:人工智能降低了工业大数据分析的门槛