add .gitignore and 2 scripts
This commit is contained in:
commit
497de68a6f
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.DS_Store
|
101
scripts/check_soa.sh
Normal file
101
scripts/check_soa.sh
Normal file
@ -0,0 +1,101 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variables
|
||||
MINNS=1
|
||||
declare -a AUTHNS
|
||||
|
||||
# Functions
|
||||
|
||||
# Name: usage
|
||||
# Description: shows how the script should be used and exists
|
||||
usage() {
|
||||
echo "Usage: $0 -z <zone> (-h <hidden_ns>)"
|
||||
exit 2
|
||||
}
|
||||
|
||||
# Name: getns
|
||||
# Description: add hidden nameserver to an array if declared;
|
||||
# then retrives authoritative nameservers for the zone to add them to the same array
|
||||
getns() {
|
||||
[[ -n "$HIDDENNS" ]] && AUTHNS+=("$HIDDENNS")
|
||||
for PUBNS in $(/usr/bin/retry -t 5 -d 1,2,3 -- /usr/bin/dig -4 "$ZONE" NS +short +tcp +tries=1 +timeout=1); do
|
||||
AUTHNS+=("$PUBNS")
|
||||
done
|
||||
}
|
||||
|
||||
# Name: getsoa
|
||||
# Description: retrieve zone serial from all discovered authoritative nameservers
|
||||
getsoa() {
|
||||
local i=0
|
||||
for NS in "${AUTHNS[@]}"; do
|
||||
SOA[i]=$(/usr/bin/retry -t 5 -d 1,2,3 -- /usr/bin/dig -4 @"$NS" "$ZONE" SOA +short +tcp +tries=1 +timeout=1 | /usr/bin/awk '{print $3}')
|
||||
i=$(( i + 1 ))
|
||||
done
|
||||
}
|
||||
|
||||
# Name: soaoutput
|
||||
# Description: generates script output
|
||||
soaoutput() {
|
||||
local i=0
|
||||
for OUTPUT in "${AUTHNS[@]}"; do
|
||||
echo "$OUTPUT: ${SOA[i]}"
|
||||
i=$(( i + 1 ))
|
||||
done
|
||||
}
|
||||
|
||||
# Main
|
||||
while getopts ":z:h:" o; do
|
||||
case "${o}" in
|
||||
z)
|
||||
ZONE="${OPTARG}"
|
||||
;;
|
||||
h)
|
||||
HIDDENNS="${OPTARG}"
|
||||
;;
|
||||
:)
|
||||
echo "ERROR: Option -${OPTARG} requires an argument"
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: Invalid option -${OPTARG}"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# -z is required
|
||||
[[ -z "$ZONE" ]] && usage
|
||||
# If the user declares a hidden, we expect at least 2 nameservers
|
||||
[[ -n "$HIDDENNS" ]] && MINNS=2
|
||||
|
||||
getns
|
||||
|
||||
# Error out if we failed to retrive nameservers for the zone
|
||||
if [[ ${#AUTHNS[@]} -lt $MINNS ]]; then
|
||||
echo "CRITICAL: Could not retrive authoritative NS for zone $ZONE"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
getsoa
|
||||
|
||||
for ALLSOA in "${SOA[@]}"; do
|
||||
# Error out if we failed to retrive one or more serials for the zone
|
||||
if ! [[ $ALLSOA =~ [[:digit:]]+ ]]; then
|
||||
echo "CRITICAL: Could not fetch SOA on at least one DNS server for zone $ZONE"
|
||||
exit 2
|
||||
fi
|
||||
# Compare all serials to the first one we retrived
|
||||
if [[ $ALLSOA != "${SOA[0]}" ]]; then
|
||||
INCONSISTENTSERIAL="true"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -n $INCONSISTENTSERIAL ]]; then
|
||||
echo "WARNING: Serials are inconsistent for zone $ZONE"
|
||||
soaoutput
|
||||
exit 1
|
||||
else
|
||||
echo "OK: Serials are consistent for zone $ZONE"
|
||||
soaoutput
|
||||
exit 0
|
||||
fi
|
37
scripts/mmonit-discord-webhook.sh
Normal file
37
scripts/mmonit-discord-webhook.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
if echo "$MONIT_EVENT" | grep -q "succeeded$"; then
|
||||
DISCORD_TITLE="[M/Monit] OK Alert"
|
||||
DISCORD_COLOR="5763719"
|
||||
elif echo "$MONIT_EVENT" | grep -q "failed$"; then
|
||||
DISCORD_TITLE="[M/Monit] Critical Alert"
|
||||
DISCORD_COLOR="15548997"
|
||||
elif echo "$MONIT_EVENT" | grep -Eq "changed$|matched$"; then
|
||||
DISCORD_TITLE="[M/Monit] Warning Alert"
|
||||
DISCORD_COLOR="16776960"
|
||||
else
|
||||
DISCORD_TITLE="[M/Monit] Generic Alert"
|
||||
DISCORD_COLOR="5793266"
|
||||
fi
|
||||
|
||||
# Generate the Discord message payload
|
||||
generate_payload() {
|
||||
printf '{
|
||||
"embeds": [{
|
||||
"title": "%s",
|
||||
"color": "%s",
|
||||
"fields": [
|
||||
{ "name": "Date", "value": "%s", "inline": true },
|
||||
{ "name": "Host", "value": "%s", "inline": true },
|
||||
{ "name": "Service", "value": "%s", "inline": true },
|
||||
{ "name": "Action", "value": "%s", "inline": true },
|
||||
{ "name": "Event", "value": "%s", "inline": false },
|
||||
{ "name": "Description", "value": "%s", "inline": false }
|
||||
]
|
||||
}]
|
||||
}' "$DISCORD_TITLE" "$DISCORD_COLOR" "$MONIT_DATE" "$MONIT_HOST" "$MONIT_SERVICE" "$MONIT_ACTION" "$MONIT_EVENT" "$MONIT_DESCRIPTION"
|
||||
}
|
||||
|
||||
# Generate and send the payload
|
||||
payload=$(generate_payload)
|
||||
curl -H "Content-Type: application/json" -d "$payload" "$ENDPOINT"
|
Loading…
x
Reference in New Issue
Block a user