-
Notifications
You must be signed in to change notification settings - Fork 3
/
prtg2pd.ps1
105 lines (90 loc) · 2.84 KB
/
prtg2pd.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Powershell script to trigger and resolve PRTG alerts in PagerDuty using the events v2 API
# Notes
# Copy the line below (exluding the hash) into the parameters field in the PRTG notification template
# '%probe' '%device' '%deviceid' '%sensor' '%sensorid' '%group' '%groupid' '%home' '%host' '%status' '%colorofstate' '%down' '%priority' '%message' '%comments' '%datetime'
# Ingest the alert payload from PRTG
Param(
[string]$probe,
[string]$device,
[string]$deviceid,
[string]$sensor,
[string]$sensorid,
[string]$group,
[string]$groupid,
[string]$prtg_home,
[string]$prtg_host,
[string]$status,
[string]$colorofstate,
[string]$down,
[string]$priority,
[string]$message,
[string]$comments,
[string]$datetime
)
# Determine the Event Action
$regex = [regex] "\((.*)\)"
$action = $regex::match($status, $regex).groups[1]
switch ($action) {
"now: Up" { $PDevent = "resolve" }
default { $PDevent = "trigger" }
}
# Determine the Severity
switch ($colorofstate) {
"#b4cc38" { $Severity = "info" }
"#ffcb05" { $Severity = "warning" }
# "Error" {$Severity="error"}
"#d71920" { $Severity = "critical" }
default { $Severity = "critical" }
}
$RoutingKey = "<INSERT ROUTING KEY HERE>"
$Url = "https://events.pagerduty.com/v2/enqueue"
$Description = "$device $sensor $status $down"
# $Severity = "critical"
$Timestamp = Get-Date -UFormat "%Y-%m-%dT%T%Z"
$AlertPayload = @{
routing_key = $RoutingKey
event_action = $PDevent
dedup_key = $sensor
client = "PRTG Network Monitor"
client_url = $prtg_home
payload = @{
summary = $Description
timestamp = $Timestamp
source = $device
severity = $Severity
component = $group
class = $sensor
custom_details = @{
prtg_server = $prtg_home
probe = $probe
group = $group, $groupid
device = $device, $deviceid
sensor = $sensor, $sensorid
url = $prtg_host
colorofstate = $colorofstate
down = $down
downtime = $downtime
priority = $priority
message = $message
datetime = $datetime
comments = $comments
status = $status
}
}
}
# Convert Events Payload to JSON
$json = ConvertTo-Json -InputObject $AlertPayload
$logEvents = "C:\pagerduty\logs\prtg2pd_log.txt"
# Send to PagerDuty and Log Results
$LogMtx = New-Object System.Threading.Mutex($False, "LogMtx")
$LogMtx.WaitOne() | Out-Null
try {
Invoke-RestMethod -Method Post `
-ContentType "application/json" `
-Body $json `
-Uri $Url `
| Out-File $logEvents -Append
}
finally {
$LogMtx.ReleaseMutex() | Out-Null
}