:::tips TCP重传率是网络质量的体现,特别是我所在的跨境电商行业,可以说跨境网络是一个比较头痛的问题。通过这类监控能够让我们很好的感知整体网络质量的变化,并在可能的情况下,提前做好规避。关于跨境网络我们有针对性的进行过优化,监控图我上传了二张截图,第一张网络是经过优化后的,而第二张直接访问海外的服务,可以看出网络质量差别挺大。如何进行优化,后续会写文章进行分享,前期会先完善监控这块。 :::
性能指标
| 指标 | 具体含义 |
|---|---|
| tcp.retransmit.rate | tcp重传率 |
监控脚本
数据来源于/proc/net/snmp。用到tcp项中的outsegs和retranssegs,分别表示:发出的tcp报文数量;重传的报文数量。计算公式为(retranssegs-last retranssegs) / (outsegs-last outsegs) * 100%
#!/usr/bin/env python# -*- coding: utf-8 -*"""计算TCP重传率"""import sysimport timeimport pickledef tcp_retran():timestamp = int(time.time())path = '/proc/net/snmp'result_file = '/tmp/.zbx_result_tcp_retran.txt'with open(path, 'r') as tcp_file:for line in tcp_file:line = line.strip()if 'Tcp' not in line: continueproto, values = line.split(': ', 1)values = values.split()if 'RetransSegs' in values:headers = map(str.lower, values)data = dict(zip(headers, map(float, values)))data.update({'timestamp': timestamp})try:latest = pickle.load(open(result_file, 'rb'))except:pickle.dump(data, open(result_file, 'w'))sys.exit(0)pickle.dump(data, open(result_file, 'w'))interval = timestamp - latest['timestamp']if interval > 100:pickle.dump(data, open(result_file, 'w'))sys.exit(0)outsegs = data['outsegs'] - latest['outsegs']retranssegs = data['retranssegs'] - latest['retranssegs']retrans = retranssegs / outsegs * 100return retransif __name__ == '__main__':print(tcp_retran())
$ cat etc/zabbix_agentd.conf.d/tcp_retrans.conf# tcp.retransUserParameter = tcp.retransmit.rate, python /usr/local/services/zabbix-3.0.0/scripts/tcp_retrans.py
监控模板
模板中定义了{$PER},值为1,也就默认超过1%,就会进行告警,当然可以根据实际情况进行调整。
模板:https://github.com/arwei/Zabbix。
监控图
优化后
推荐阅读
Zabbix 监控系列 - TCP重传率
【tcp】如何计算、监控TCP重传率?_HunterMichaelG的博客-CSDN博客_tcp重传率高原因
