:::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 sys
import time
import pickle
def 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: continue
proto, 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 * 100
return retrans
if __name__ == '__main__':
print(tcp_retran())
$ cat etc/zabbix_agentd.conf.d/tcp_retrans.conf
# tcp.retrans
UserParameter = 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重传率高原因