check_links.pl
Perl script to monitor resources on the internet.
check_links is quit powerful, as it can monitor
- availability of webpages
- content delivery
- uptime of web servers
- content negotiation
- etc
Requirements
The Perl script requires
- the Nagios plugin library in
/usr/lib/nagios/plugins/utils.pm
- LWP::UserAgent
- Getopt::Long
- HTTP::Cookies
- URI
USAGE
perl -w check_links.pl [OPTIONS] -u URL
Here, OPTIONS
may be:
--url URL
or-u URL
the URL to the site---status STATUS
or-s STATUS
you expectSTATUS
to be the returned HTTP status code (default:200
)---no-status
do not check the HTTP status---content "CONTENT"
or-c "CONTENT"
you expectCONTENT
to appear within the response---referer "REFERER"
or-r "REFERER"
useREFERER
when sending the request---user-agent "USER AGENT"
pretend to be the user agentUSER AGENT
---header "KEY=VALUE"
expected HTTP header value asKEY=VALUE
, multiple options are possible andVALUE
may be a regex---cookie "NAME=VALUE"
sent a cookieNAME=VALUE
, multiple options possible---accept "MIME"
or-a "MIME"
ask for a result of content typeMIME
, especially useful to check for content negotiation---follow
or-f
should we follow redirects?---timeout INT
or-t INT
waitINT
seconds before timeout---help
or-h
show this help
The script’s return code and message is to be interpreted by your monitoring infrastructure.
EXAMPLES
Check a URL is accessible
perl -w check_links.pl -u https://binfalse.de
Check a URL-shortener does the proper redirection
perl -w check_links.pl -u http://goo.gl/33e3Lb -s 301 --header location=https://binfalse.de/
Check that your webserver properly redirects HTTP to HTTPS
perl -w check_links.pl -u http://binfalse.de/ -s 301 --header location=https://binfalse.de/
Check that a web resource has a specific size and that the webserver is NGINX
perl -w check_links.pl -h content-length=191406 -h "server=nginx.*" -u https://binfalse.de/assets/media/pics/2016/drm-inchains.png
Here, the image needs to be exactly of size 191406 Bytes and the regex nginx.*
matches to NGINX in any version.
Perform a check using a cookie
perl -w check_links.pl -c userid=karl -c secret=passwd123456 -u https://secret.site
Test content negotiation
Check that you get XML when asking for XML:
check_links.pl -u http://purl.uni-rostock.de/comodi/comodi#Attribution -f -a text/xml --header content-type=xml
Check that you get HTML when asking for HTML:
check_links.pl -u http://purl.uni-rostock.de/comodi/comodi#Attribution -f -a text/html --header content-type=text/html
TESTS
There is a python tool in src/test.py
that performs some basic test to verify that check_links.pl
is working correctly.
I’d like to encourage you to add further test when extending check_links.pl
!
Download and install
Download the tool at check_links.pl (or see the project on GitHub)
Please consider to take a look at my general monitoring setup notes.
Leave a comment
There are multiple options to leave a comment: