监控目标主机延迟并发送推送通知:使用 PowerShell 脚本与 Pushbullet 集成
监控目标主机延迟并发送推送通知:使用 PowerShell 脚本与 Pushbullet 集成

监控目标主机延迟并发送推送通知:使用 PowerShell 脚本与 Pushbullet 集成

在日常网络管理中,实时监控网络延迟是保障业务连续性和服务稳定性的关键。尤其在多节点分布式系统中,及时发现网络延迟异常,能够帮助 IT 运维人员快速响应,避免系统崩溃或业务中断。在本文中,我们将展示如何使用 PowerShell 脚本实时监控目标主机的网络延迟,并当延迟超过指定阈值时,通过 Pushbullet 发送推送通知。

使用 PowerShell 监控网络延迟

PowerShell 是 Windows 环境下的强大自动化工具,通过简单的脚本就能完成许多任务。我们可以利用 PowerShell 中的 Test-Connection 命令来实现 ping 操作,获取网络延迟,并结合 Pushbullet API 发送实时通知。

脚本核心功能

  1. 监控目标主机的延迟:通过 Test-Connection 命令定期 ping 目标主机,获取网络延迟。
  2. 动态调整延迟阈值:通过读取配置文件(config.json),用户可以设置自定义的延迟阈值。
  3. 发送推送通知:当延迟超过阈值时,通过 Pushbullet API 向指定设备发送警告通知。
  4. 日志记录:每次延迟检查结果都会记录在本地日志文件中,便于后续查看。

配置文件 config.json

首先,我们需要一个配置文件 config.json 来存储目标主机的 IP 地址、延迟阈值、Pushbullet API URL 和 API Key。以下是配置文件的示例:

{
"target": "192.168.31.60",
"threshold": 15,
"api_url": "https://api.pushbullet.com/v2/pushes",
"api_key": "API KEY"
}
  • target:指定要监控的目标主机的 IP 地址。
  • threshold:延迟阈值(单位:毫秒),当延迟超过此值时,触发通知。
  • api_urlapi_key:Pushbullet 的 API URL 和 API Key,用于发送推送通知。

PowerShell 脚本代码

以下是完整的 PowerShell 脚本代码,它会定期监控目标主机的延迟并发送通知:

# 获取当前用户的桌面路径
$desktopPath = [System.Environment]::GetFolderPath('Desktop')

# 检查桌面路径是否为空
if ([string]::IsNullOrEmpty($desktopPath)) {
Write-Host "桌面路径获取失败。请检查环境设置。"
exit
}

# 获取配置文件路径(在用户桌面创建 config.json)
$configFilePath = Join-Path -Path $desktopPath -ChildPath "config.json"

# 检查配置文件是否存在
if (-Not (Test-Path $configFilePath)) {
Write-Host "配置文件 config.json 不存在!请确保文件路径正确。"
exit
}

# 读取配置文件内容
$config = Get-Content -Path $configFilePath | ConvertFrom-Json

# 获取配置中的值
$target = $config.target
$threshold = $config.threshold
$api_url = $config.api_url
$api_key = $config.api_key

# 获取日志文件路径(在用户桌面创建 logfile.txt)
$logFile = Join-Path -Path $desktopPath -ChildPath "logfile.txt"

# 检查日志文件路径是否正确
Write-Host "日志文件路径: $logFile"

# 检查和记录日志的函数
function Log-Message {
param (
[string]$message
)
$timestamp = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
Add-Content -Path $logFile -Value "$timestamp - $message"
}

# 无限循环检查延迟
while ($true) {
# 执行ping命令并获取结果
$pingResult = Test-Connection -ComputerName $target -Count 1 -ErrorAction SilentlyContinue

# 如果ping成功,获取延迟
if ($pingResult) {
$delay = $pingResult.ResponseTime

if ($delay -gt $threshold) {
# 发送通知到手机
$message = "Ping 延迟警告:目标主机 $target 的延迟为 $delay ms,超过了阈值 $threshold ms"
$body = @{
"type" = "note"
"title" = "Ping 延迟警告"
"body" = $message
}

# 将请求体转换为 JSON
$jsonBody = $body | ConvertTo-Json -Depth 3

# 确保请求体的编码为 UTF-8
$encodedBody = [System.Text.Encoding]::UTF8.GetBytes($jsonBody)

$headers = @{
"Authorization" = "Bearer $api_key"
"Content-Type" = "application/json"
}

try {
# 发送 API 请求
$response = Invoke-RestMethod -Uri $api_url -Method Post -Headers $headers -Body $encodedBody
Log-Message "通知发送成功: $message"
} catch {
Log-Message "通知发送失败: $_"
}
}
} else {
Write-Host "目标主机不可达"
Log-Message "目标主机 $target 不可达"
}

# 每隔10秒检查一次
Start-Sleep -Seconds 10
}

代码详解

  1. 配置文件读取:脚本通过 PowerShell 的 Get-Content 读取桌面上的 config.json 文件,并使用 ConvertFrom-Json 将其内容转换为 PowerShell 对象。通过读取配置中的 thresholdtargetapi_urlapi_key,可以灵活调整参数。
  2. 网络延迟检测:脚本使用 Test-Connection 命令来 ping 目标主机,获取延迟时间。当延迟超过 threshold 阈值时,发送推送通知。
  3. 推送通知:脚本通过 Pushbullet API 将通知发送到指定的设备。通知中包含目标主机的延迟信息,帮助运维人员及时了解网络状况。
  4. 日志记录:每次检测到延迟异常时,都会将相关信息记录到日志文件中,方便后续查看。

实际应用场景

这种延迟监控脚本非常适用于以下场景:

  • 网络运维:确保关键服务和服务器的网络连接稳定,及时发现异常。
  • 云服务监控:在云环境中,监控虚拟机或容器的网络延迟,确保云服务的稳定性。
  • IoT 网络监控:对于物联网设备,实时检测网络延迟有助于确保设备数据传输的可靠性。

总结

通过 PowerShell 脚本结合 Pushbullet API,我们能够轻松实现对网络延迟的实时监控,并在延迟超过阈值时及时发出警告。通过灵活的配置文件,可以动态调整监控的目标和阈值,使得该解决方案适应多种网络环境和应用需求。

希望这篇文章能帮助你理解如何使用 PowerShell 实现网络延迟监控,并结合推送通知进行自动化运维。如果你对其他运维自动化方案有兴趣,欢迎继续关注我们的博客!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Title - Artist
0:00