76 lines
2.7 KiB
Django/Jinja
76 lines
2.7 KiB
Django/Jinja
#!/usr/bin/env bash
|
|||
|
|
set -uo pipefail
|
||
|
|
source '{{ healthcheck_install_root }}/health-common.sh'
|
||
|
|
|
||
|
|
require_command docker
|
||
|
|
require_command curl
|
||
|
|
require_command dig
|
||
|
|
require_command ss
|
||
|
|
require_command df
|
||
|
|
check_compose
|
||
|
|
|
||
|
|
container='adguardhome'
|
||
|
|
if ! docker inspect "$container" >/dev/null 2>&1; then
|
||
|
|
record critical 'adguardhome_container_missing'
|
||
|
|
else
|
||
|
|
running="$(docker inspect "$container" --format '{{ '{{' }}.State.Running{{ '}}' }}' 2>/dev/null)"
|
||
|
|
[[ "$running" == true ]] || record critical 'adguardhome_container_not_running'
|
||
|
|
fi
|
||
|
|
|
||
|
|
config_check="$(docker exec "$container" /opt/adguardhome/AdGuardHome --check-config \
|
||
|
|
-c /opt/adguardhome/conf/AdGuardHome.yaml 2>&1 || true)"
|
||
|
|
if grep -qiE 'error|invalid|fatal' <<<"$config_check"; then
|
||
|
|
record critical 'adguardhome_config_invalid'
|
||
|
|
else
|
||
|
|
record ok 'adguardhome_config_valid'
|
||
|
|
fi
|
||
|
|
|
||
|
|
if ss -H -ltn 2>/dev/null | awk '{print $4}' | grep -Eq '(^|:)53$'; then
|
||
|
|
record ok 'dns_tcp_53_listening'
|
||
|
|
else
|
||
|
|
record critical 'dns_tcp_53_missing'
|
||
|
|
fi
|
||
|
|
if ss -H -uln 2>/dev/null | awk '{print $4}' | grep -Eq '(^|:)53$'; then
|
||
|
|
record ok 'dns_udp_53_listening'
|
||
|
|
else
|
||
|
|
record critical 'dns_udp_53_missing'
|
||
|
|
fi
|
||
|
|
if ss -H -ltn 2>/dev/null | awk '{print $4}' | grep -Eq '(^|:)80$'; then
|
||
|
|
record ok 'ui_http_80_listening'
|
||
|
|
else
|
||
|
|
record critical 'ui_http_80_missing'
|
||
|
|
fi
|
||
|
|
|
||
|
|
dns_a="$(dig +time=5 +tries=1 @192.168.66.36 example.com A +noall +answer 2>/dev/null)"
|
||
|
|
[[ -n "$dns_a" ]] && record ok 'dns_example_a' || record critical 'dns_example_a_failed'
|
||
|
|
dns_aaaa="$(dig +time=5 +tries=1 @192.168.66.36 example.com AAAA +noall +answer 2>/dev/null)"
|
||
|
|
[[ -n "$dns_aaaa" ]] && record ok 'dns_example_aaaa' || record warning 'dns_example_aaaa_none'
|
||
|
|
dns_local="$(dig +time=5 +tries=1 @192.168.66.36 hass.windy.lan A +noall +answer 2>/dev/null)"
|
||
|
|
[[ -n "$dns_local" ]] && record ok 'dns_local_name' || record warning 'dns_local_name_unresolved'
|
||
|
|
|
||
|
|
ui_code="$(curl --silent --show-error --output /dev/null --write-out '%{http_code}' --max-time 10 http://192.168.66.36/ 2>/dev/null || true)"
|
||
|
|
case "$ui_code" in
|
||
|
|
200|301|302) record ok "ui_http_${ui_code}" ;;
|
||
|
|
'') record critical 'ui_unreachable' ;;
|
||
|
|
*) record critical "ui_http_${ui_code}" ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
usage="$(df -P /opt/adguardhome/work 2>/dev/null | awk 'NR==2 {print $5}' | tr -d '%')"
|
||
|
|
if [[ "$usage" =~ ^[0-9]+$ ]]; then
|
||
|
|
if (( usage >= 90 )); then record critical 'disk_usage_high'
|
||
|
|
elif (( usage >= 80 )); then record warning 'disk_usage_elevated'
|
||
|
|
else record ok 'disk_usage_ok'; fi
|
||
|
|
else
|
||
|
|
record unknown 'disk_usage_unknown'
|
||
|
|
fi
|
||
|
|
|
||
|
|
logs="$(docker logs --since 30m "$container" 2>&1 || true)"
|
||
|
|
if grep -qiE '\[(error|warn|fatal)\]|level=(error|warn|fatal)' <<<"$logs"; then
|
||
|
|
record warning 'adguardhome_log_errors'
|
||
|
|
else
|
||
|
|
record ok 'adguardhome_logs_clean'
|
||
|
|
fi
|
||
|
|
|
||
|
|
emit_result
|
||
|
|
exit "$EXIT_CODE"
|