diff --git a/checkmk/custom-files/local/monitor-letsencrypt-certificates b/checkmk/custom-files/local/monitor-letsencrypt-certificates new file mode 100644 index 0000000000000000000000000000000000000000..aad3887a913b5641c6a7eae44f661b2dcf0d0d5e --- /dev/null +++ b/checkmk/custom-files/local/monitor-letsencrypt-certificates @@ -0,0 +1,51 @@ +#!/bin/bash + +# We need current time+date to check for remaining time on certificates +NOW=$(date +%s) + +# WARN if less than this amount of days is left on the certificate +CONFIG_WARN_DAYS_LEFT=16 + +# CRIT if less than this amount of days is left on the certificate +CONFIG_CRIT_DAYS_LEFT=8 + +# List of folders to process *.pem files in +# Example: CONFIG_CHECK_FOLDERS=( "/a/b/c" "/d/e/f" "/foo/bar/baz" ) +CONFIG_CHECK_FOLDERS=( "/etc/letsencrypt/live" ) + +function process_folder { + folder="$1" + if [[ "" == "$folder" || ! -d "$folder" ]]; then + return + fi + pemfiles=$(find "$folder" -name 'cert.pem') + for pemfile in $pemfiles; do + pem_subject=$(openssl x509 -in "$pemfile" -noout -text 2>&1 | grep 'Subject:' | tr -s ' ' | cut -d ' ' -f 3-) + pem_cn=$(echo $pem_subject | rev | cut -d ' ' -f 1 | rev) + pem_expire_date=$(openssl x509 -in "$pemfile" -noout -text 2>&1 | grep 'Not After' | tr -s ' ' | cut -d ' ' -f 5-) + pem_expire_timestamp=$(date -d "$pem_expire_date" +%s) + pem_remaining_seconds=$(($pem_expire_timestamp - $NOW)) + pem_remaining_days=$(($pem_remaining_seconds / 86400)) + pem_status="" + checkmk_status="3" + if [[ $pem_remaining_days -lt 1 ]]; then + pem_status="EXPIRED" + checkmk_status="2" + else + pem_status="$pem_remaining_days days remaining" + # Default is OK, gets overridden by WARN, then by CRIT + checkmk_status="0" + if [[ $pem_remaining_days -le CONFIG_WARN_DAYS_LEFT ]]; then + checkmk_status="1" + fi + if [[ $pem_remaining_days -le CONFIG_CRIT_DAYS_LEFT ]]; then + checkmk_status="2" + fi + fi + echo "$checkmk_status Certificate_$pemfile - $pem_status (CN: $pem_cn)" + done +} + +for folder in ${CONFIG_CHECK_FOLDERS[@]}; do + process_folder $folder +done diff --git a/checkmk/debian/monitor-letsencrypt-certificates.sls b/checkmk/debian/monitor-letsencrypt-certificates.sls new file mode 100644 index 0000000000000000000000000000000000000000..3093ea4221605eb46e647a59f3ae47bef955f9d5 --- /dev/null +++ b/checkmk/debian/monitor-letsencrypt-certificates.sls @@ -0,0 +1,7 @@ +hsh_checkmk_monitor_letsencrypt_certificates_plugin: + file.managed: + - name: /usr/lib/check_mk_agent/local/monitor-letsencrypt-certificates + - source: salt://checkmk/custom-files/local/monitor-letsencrypt-certificates + - mode: 755 + - user: root + - group: root