Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm looking for a simple program or script, you give it a URL and it does the following:

  • checks whether it can open a connection to that URL and reports how long the response time is
  • checks how long it takes to the load the page and reports this number

  • reports some error code or other number when a site is unresponsive

  • exits after it either: fails to connect, loads the page successfully, or after a predetermined number of seconds specified by the user

My purpose is to integrate this functionality as an external program to Zabbix. I did a google search but was unable to locate one.

share|improve this question

closed as off-topic by Jenny D, mdpc, Sven Dec 15 '14 at 19:12

This question appears to be off-topic. The users who voted to close gave this specific reason:

If this question can be reworded to fit the rules in the help center, please edit the question.

Keep in mind that most scripts like wget won't reflect the load time for a user (the time it takes to load in a browser). That being said this is still a good idea to monitor as long as you don't mistake what the data is. – Kyle Brandt Jul 28 '11 at 19:46
Why are you looking to write this as an external program when Zabbix already does this internally? It won't tell you how long a page took to load, but you will get speed at which it downloaded, once you baseline your measurement it's the same thing. You automagically get return code checking, and I believe there is an item for it as well. In addition you can do this from a Zabbix proxy as well. – Red Tux Jul 31 '11 at 3:59

You can do what you want with a combination of the time and wget commands - e.g.:
time wget -q

time will print the time (in seconds/fractions of a second) that it took to complete the wget command, and the return code of the whole mess will be whatever wget's return code would have been (0=success, non-zero indicating various failures).

This can be further wrapped in an appropriate script to determine if the page was successfully retrieved and produce output suitable for Zabbix to pick up and use.

share|improve this answer
I'll certainly script it myself if I don't find a nice tool that is already available. – 80skeys Jul 28 '11 at 19:23
I'm not aware of anything pre-built that plugs in to Zabbix, but I'm also not a Zabbix user :) – voretaq7 Jul 28 '11 at 19:46

I use the following script probably with basic ideas I'd borrowed from elsewhere. It uses curl statistics:

estadistica () {
    local site=$1
    echo $site
    echo ${site} | sed -n 's/./-/gp'
    curl -w '
    Lookup time:\t%{time_namelookup} s
    Connect time:\t%{time_connect} s
    Pretransfer time:\t%{time_pretransfer} s
    Starttransfer time:\t%{time_starttransfer} s
    Size download:\t%{size_download} bytes
    Speed download:\t%{speed_download} bytes/s

    Total time:\t%{time_total} s
    ' -o /dev/null -s $site

for i in ${@}; do
    estadistica $i

Lets say it's named webstats; this is how it works:

~/src$ bash webstats

    Lookup time:    0,009 s
    Connect time:   0,139 s
    Pretransfer time:   0,139 s
    Starttransfer time: 0,284 s
    Size download:  37298 bytes
    Speed download: 57153,000 bytes/s

    Total time: 0,653 s

    Lookup time:    0,084 s
    Connect time:   0,147 s
    Pretransfer time:   0,147 s
    Starttransfer time: 0,218 s
    Size download:  218 bytes
    Speed download: 1000,000 bytes/s

    Total time: 0,218 s

If something goes wrong you can know it (and hence tell zabbix) because the resulting data is not logical:

~/src$ bash webstats http://thisdoesntexist

    Lookup time:    0,000 s
    Connect time:   0,000 s
    Pretransfer time:   0,000 s
    Starttransfer time: 0,000 s
    Size download:  0 bytes
    Speed download: 0,000 bytes/s

    Total time: 0,000 s

EDITED: curl's timeout option:

Just to answer your comment, curl has a timeout option; from it's man page:

   --connect-timeout <seconds>
          Maximum time in seconds that you allow  the  connection  to  the
          server  to  take.   This  only limits the connection phase, once
          curl has connected this option is of no more use. See  also  the
          -m/--max-time option.
share|improve this answer
This looks like it could do what I need. I'll give it a try and report back here. – 80skeys Jul 28 '11 at 19:39
Ok it provides the type of information I'm looking for, now I need a way to tell it to run for no more than x number of seconds. Once that limit is reached, the script dies with a timeout error. Any thoughts? – 80skeys Jul 28 '11 at 19:48
Ok on my CentOS system, there is a file called /usr/share/doc/bash-3.2/scripts/timeout which is a bash script that terminates a command after it runs for a certain number of seconds. It looks like I've got everything I need. Thanks for the help! – 80skeys Jul 28 '11 at 20:11
About timeout check the Edit in my post – hmontoliu Jul 29 '11 at 13:57

I use curl instead of wget cause wget generates too much files. Example:

$ curl -o /dev/null -s -w %{time_total}\\n

Next you should to do - put this into external script in your ${datadir}/zabbix/externalscripts and call it with item type 'external checks'

share|improve this answer will give you more real time, because it loads all resources of a page, and executes JS. Syntax is pretty easy (plain JavaScript)

share|improve this answer


Alternatively, it would be really easy to code a simple script to do this yourself and output in a specific format.

share|improve this answer
pingdom won't work because Zabbix won't be able to call it, put in the appropriate parameters and parse the response. – 80skeys Jul 28 '11 at 19:22

I think the firefox firebug network option and pagespeed is a good option

firebug network

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.