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

推荐订阅源

N
News and Events Feed by Topic
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
N
Netflix TechBlog - Medium
Recorded Future
Recorded Future
S
Securelist
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Scott Helme
Scott Helme
C
Check Point Blog
量子位
月光博客
月光博客
Last Week in AI
Last Week in AI
C
Cisco Blogs
G
GRAHAM CLULEY
B
Blog RSS Feed
K
Kaspersky official blog
爱范儿
爱范儿
J
Java Code Geeks
I
Intezer
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs
N
News | PayPal Newsroom
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Security Latest
Security Latest
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
The Cloudflare Blog
H
Heimdal Security Blog
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
GbyAI
GbyAI
V
Visual Studio Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 聂微东
T
Tenable Blog
The Register - Security
The Register - Security
AI
AI
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
L
LangChain Blog

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 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败 windows | autohotkey 常用脚本
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

支付宝