> Добрый день!
> Необходимо мониторить некий список сайтов на доступность и так, чтобы при 301
> редиректе, проверялось состояние сайта на который идет перенаправление с проверяемого
> URL. Подскажите, пожалуйста:
> 1) Есть ли такая возможность в Zabbix
> 2) как можно реализовать проверку "301 -> 200ок?" скриптом
> Спасибо!В общем, был такое кейс:
0. нужно распарсить из основного списка sitemap`ов, список действующих.
1. затем, поочередно, проходится по списку действующих сайтмапов и распарсив URLы - рандомно (из каждого сайтмапа) проверить на отсутствие ошибок.
2.При этом, 301 - не считается ошибкой, но необходимо чтобы в итоге (в случаи даже неоднократного редиректа) отдавался статус крайней страницы (я решил что промежуточные статусы не важны)
Вот пример того, что у меня получилось:
---
#!/bin/bash
DATE=$(date +%Y-%m-%d:%H:%M:%S)
LOGFILE='/var/log/errorsitemaps.log'
URLLIST='/tmp/urlist.txt'
XMLLIST='/tmp/xmlist.txt'
XMLSOURCE='/путь/до/вашего/основного/sitemap.xml'
cat $XMLSOURCE | tr '><' '\n' | grep -P '^http' > $XMLLIST
#выше приведенный сайтмап, отдает в свою очередь урлы по которым доступны активные сайтмапы.
#Чтобы не грузить nginx курлом, ниже я заменяю https://example.com/sitemap на локальный путь /var/www/project/sitemap. Изящней было бы использовать "tr"
sed -i "s/https\:\/\/example\.com\//\/var\/www\/project\/sitemap\//g" $XMLLIST
for line in $(cat $XMLLIST); do
cat $line | tr '><' '\n' | grep -P '^http' > $URLLIST
RANGE=$(wc -l $URLLIST | awk '{print $1}')
number=$RANDOM
let "number %= $RANGE"
PAGE=$(sed -n "${number}p" $URLLIST)
#как и писал выше: "301 - не считается ошибкой, но необходимо чтобы в итоге,
#в случаи редиректа, отдавался статус крайней страницы (я решил, что промежуточные статусы не важны)"
MARK=$(curl -I --connect-timeout 5 --location $PAGE | grep -P '^HTTP' | awk '{print $2}' | tr -d '\n')
case $MARK in
200)
echo "$DATE $PAGE $MARK" >> $LOGFILE
;;
*)
echo "error $MARK from URL $PAGE" | mail -s "$MARK $DATE" recipient@example.com & echo "$DATE $PAGE $MARK" >> $LOGFILE
;;
esac
done
---
Ну и далее - в крон.
Может кому пригодится. Изящность скрипту придавайте самостоятельно.