Пути до сертификатов будем брать из haproxy.cfg
Пишем скрипт haproxy-discovery.sh
Скрипт парсит haproxy.cfg и формирует два файла
haproxy-discovery.txt - ключ(#SSL_CRT) для zabbix и путь до сертификата в формате json
haproxy-discovery_info.txt - путь до сертификата и исколько дней осталось
#haproxy-discovery.sh
#!/bin/bash
readonly DIR_SEP_1=" "
LOG_FILE=/etc/zabbix/script/mon_crt_haproxy/haproxy-discovery_info.txt
LOG_FILE_2=/etc/zabbix/script/mon_crt_haproxy/haproxy-discovery.txt
rm -f $LOG_FILE
touch $LOG_FILE
touch $LOG_FILE_2
day_crt()
{
end_date=$(sudo /bin/openssl x509 -enddate -noout -in $1)
end=$(cut -d= -f2- <<<"$end_date")
end_date=`date -d "$end" '+%s'`
curr_date=`date '+%s'`
diff=$(( $end_date - $curr_date ))
let "days = $diff / 86400"
if ! cat "$LOG_FILE" | grep -w "$1" > /dev/null; then
echo $1 $days >> $LOG_FILE
tmp=$(echo "{"\""{#SSL_CRT}\":"\"$1\"" },")
json=$json$tmp
fi
}
FILES=$(cat /etc/haproxy/haproxy.cfg |grep -v '^$\|^\s*\#' | grep " ssl " | grep -oP ' ssl \K.*' | grep -oP 'crt \K.*' | sed 's/crt //g')
for ((i=0; i<${#FILES[@]}; i++))
do
array_v1=(${FILES[$i]//${DIR_SEP_1}/ })
for ((j=0; j<${#array_v1[@]}; j++))
do
if [[ ${array_v1[$j]} == *".pem" ]] || [[ ${array_v1[$j]} == *".crt" ]]; then
day_crt ${array_v1[$j]}
fi
done
done
json=$(echo $json | sed 's/.$//')
printf "{\"data\":[" > $LOG_FILE_2
printf "$json" >> $LOG_FILE_2
printf "]}" >> $LOG_FILE_2
chown -R zabbix:zabbix /etc/zabbix/script/
[root@srv v.senkevich]# cat /etc/zabbix/script/mon_crt_haproxy/haproxy-discovery_info.txt
/etc/pki/letssl/s33.ru/certificate.pem 33
/etc/pki/letssl/cyprusairways.com/certificate.pem 33
/etc/pki/letssl/s33airlines.com/certificate.pem 58
/etc/pki/letssl/s33-airlines.com/certificate.pem 33
/etc/pki/letssl/api.s33.ru/cert.pem 258
/etc/pki/letssl/web.s33.ru/certificate.pem 33
/etc/pki/letssl/cp.web.s33.ru/certificate.pem 33
/etc/pki/letssl/web.cyprusairways.com/certificate.pem 33
/etc/pki/letssl/w7-qa/certificate.pem 33
[root@srv v.senkevich]# cat /etc/zabbix/script/mon_crt_haproxy/haproxy-discovery.txt
{"data":[{"{#SSL_CRT}":"/etc/pki/letssl/s33.ru/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/cyprusairways.com/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/s33airlines.com/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/s33-airlines.com/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/api.s33.ru/cert.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/web.s33.ru/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/cp.web.s33.ru/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/web.cyprusairways.com/certificate.pem" },{"{#SSL_CRT}":"/etc/pki/letssl/w7-qa/certificate.pem" }]}
Ложим в крон
*/30 * * * * /etc/zabbix/script/mon_crt_haproxy/haproxy-discovery.sh
Пишем скрипт analiz_haproxy-discovery.sh, нужен будет для ключа ЭД
[root@srv mon_crt_haproxy]# cat analiz_haproxy-discovery.sh
cat /etc/zabbix/script/mon_crt_haproxy/haproxy-discovery_info.txt | grep $1 | awk '{print $2}'
Добавляе конфиг для zabbix agent и рестартим его
[root@srv mon_crt_haproxy]# cat /etc/zabbix/zabbix_agentd.d/userparameter_haproxy-ssl.conf
UserParameter=haproxy_ssl_days.discovery[*],cat /etc/zabbix/script/mon_crt_haproxy/haproxy-discovery.txt
UserParameter=hp_ssl.days[*],/etc/zabbix/script/mon_crt_haproxy/analiz_haproxy-discovery.sh $1
Создаем шаблон haproxy_ssl_days
Создаем правило обнаружение Ключ - haproxy_ssl_days.discovery
Создаем прототип ЭД Ключ - hp_ssl.days[{#SSL_CRT}]
Создаем прототип триггера
Добавляем нужный host в шаблон , ЭД и триггеры создатуться автоматом