惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
C
Check Point Blog
D
Docker
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
量子位
有赞技术团队
有赞技术团队
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
B
Blog
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
月光博客
月光博客

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化
Zabbix | 监控端口连通性并自动追踪 TCP 路由
lvbibir · 2023-12-07 · via lvbibir's Blog

0 前言

本文实现被检测主机到特定 ip 的特定端口的连通性, 通过 nc 命令测试端口可用性, 当 nc 超时时自动执行 traceroute 追踪路由定位网络故障点, 本文的案例是监控我们生产的短信业务服务器到运营商提供的短信接口之间的连通性.

环境信息:

  • CentOS 7.6
  • Zabbix 3.4

确保需要检测端口连通性的服务器安装了 nctraceroute

1 服务器配置

每个需要检测的服务器都要做如下操作

修改 traceroute 权限

chmod u+s /usr/bin/traceroute

创建检测脚本, 脚本传入三个参数: nc 命令的超时时间, 要检测的 ip 以及端口, traceroute 日志保存到 /var/log/smslink_monitor 目录

vim /etc/zabbix/zabbix_agentd.d/smslink.sh

#!/bin/bash

start_time=$(date +"%Y%m%d-%H%M%S")

timeout=$1
ip=$2
port=$3

LOG_DIRECTORY=/var/log/smslink_monitor
[ -d "${LOG_DIRECTORY}" ] || mkdir -p "${LOG_DIRECTORY}"

# 开始 nc 测试连通性
nc_result=$(/bin/nc -z -w ${timeout} ${ip} ${port}; echo $?)
echo ${nc_result}

# 如果 nc 测试失败则执行 traceroute
if [ ${nc_result} -ne 0 ]; then
    log_file="${LOG_DIRECTORY}/${start_time}-${ip}-${port}.log"
    /bin/nohup /usr/bin/traceroute -n -T -p ${port} ${ip} > ${log_file} 2>&1 &
fi

exit 0

此步可以略过, 如果用 root 用户执行过脚本进行测试, 需要执行一下, 因为 root 用户执行过脚本后, 这个目录的属主将是 root, 而 zabbix 执行脚本使用的是 zabbix 用户, 会导致没有权限写入

chown zabbix:zabbix /var/log/smslink_monitor

新增 zabbix agent 配置文件, 通过调用我们刚才创建的脚本实现

vim /etc/zabbix/zabbix_agentd.d/smslink.conf

# $1: timeout
# $2: ip
# $3: port
UserParameter=get_smslink_status[*],/bin/sh /etc/zabbix/zabbix_agentd.d/smslink.sh $1 $2 $3

重启 zabbix agent

systemctl restart zabbix-agent

zabbix server 端测试监控项, * 为占位符, 改成自己的实际 ip, 返回值 0 为正常, 其他值为异常

[root@klmy-kfyy-jxwh-0003 ~]# zabbix_get -s 192.168.4.72 -p 10050 -k get_smslink_status[3,10.**.**.22,7001]
0
[root@klmy-kfyy-jxwh-0003 ~]# zabbix_get -s 192.168.4.73 -p 10050 -k get_smslink_status[3,10.**.**.22,7001]
0
[root@klmy-kfyy-jxwh-0003 ~]# zabbix_get -s 192.168.4.74 -p 10050 -k get_smslink_status[3,10.**.**.22,7001]
0

改成一个错误的端口, 可以看到返回值变成了 1

[root@klmy-kfyy-jxwh-0003 ~]# zabbix_get -s 192.168.4.72 -p 10050 -k get_smslink_status[3,10.**.**.22,7002]
1

4.72 上看下 traceroute 日志输出

[root@klmy-kfyy-dxpt-0003 ~]# ls -ltr  /var/log/smslink_monitor/
-rw-rw-r-- 1 zabbix zabbix 595 Dec  7 11:21 20231207-112058-10.**.**.22-7002.log
[root@klmy-kfyy-dxpt-0003 ~]# cat /var/log/smslink_monitor/20231207-112058-10.**.**.22-7002.log
traceroute to 10.**.**.22 (10.**.**.22), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  100.32.34.2  5.202 ms  5.198 ms  5.187 ms
 4  * * *
 5  11.54.13.201  6.103 ms  6.076 ms  6.074 ms
 6  11.54.13.1  6.873 ms  2.104 ms  1.598 ms
 7  * * *
 8  10.33.253.129  2.086 ms  3.160 ms  3.110 ms
 9  10.11.1.153  71.703 ms  70.821 ms  69.009 ms
10  10.33.0.82  77.203 ms  69.230 ms  69.315 ms
11  * * *
12  * * *
13  * * *

可以看到中断的点, 这里中断是因为我们集团广域网没开 7002 端口的策略, 所以到广域网直接断掉了

2.1 创建模板

选择链接的主机或者主机群组

image-20231019161050562

2.2 创建应用集

image-20231019165227390

2.3 创建监控项

image-20231207151703881

八条链路都创建一下

image-20231207151818203

在最新数据处看下键值获取是否正常

image-20231207151953485

2.4 创建触发器

这里的表达式代表如果连续的两个值的最小值不为 0 则触发告警, 即连续两次值都不为 0 触发告警, 这是考虑到整体网络比较复杂, 网络波动可能会导致误报

image-20231207152335550

八条链路分别添加一下触发器

image-20231207152847941

2.5 配置告警动作

image-20231207152936737

2.6 测试验证

我这里是找网络侧的同事中断了一下链路进行测试的, 各位可以自行选择适合自己的方法

image-20231207153129294

2.7 添加聚合图形

最后可以添加一个聚合图形, 方便后续查看

在模板处添加图形

image-20231207153341550

监测中 -> 聚合图形 处添加聚合图形, 三台主机, 选择一行显示出来

image-20231207153748336

进入刚才创建的聚合图形, 选择右上角的编辑聚合图形, 然后点击 更改 添加图形

image-20231207154620691

把三个节点都添加一下

image-20231207154840761

最后将此聚合图形通过右上角的按钮添加到常用, 就可以在首页直接点击进来了

以上

wechat_pay

微信

alipay

支付宝