Forum Discussion

Patrick_Chang_7's avatar
Patrick_Chang_7
Historic F5 Account
Feb 04, 2009

HTTP monitoring in GTM

It turns out that in GTM, an HTTP monitor will immediately down a server upon a failure. There is no "you can fail 3 times in a row before I mark you down" in GTM. Thus, I have tried to write a shell script as an EAV for GTM that does the same thing:

 
 !/bin/sh 
  
  (c) Copyright 1996-2007 F5 Networks, Inc. 
  
  This software is confidential and may contain trade secrets that are the 
  property of F5 Networks, Inc.  No part of the software may be disclosed 
  to other parties without the express written consent of F5 Networks, Inc. 
  It is against the law to copy the software.  No part of the software may 
  be reproduced, transmitted, or distributed in any form or by any means, 
  electronic or mechanical, including photocopying, recording, or information 
  storage and retrieval systems, for any purpose without the express written 
  permission of F5 Networks, Inc.  Our services are only available for legal 
  users of the program, for instance in the event that we extend our services 
  by offering the updating of files via the Internet. 
  
  @() $Id: http_monitor_cURL+GET,v 1.0 2007/06/28 16:10:15 deb Exp $ 
  (based on sample_monitor,v 1.3 2005/02/04 18:47:17 saxon) 
  
  these arguments supplied automatically for all external monitors: 
  $1 = IP (IPv6 notation. IPv4 addresses are passed in the form  
                          ::ffff:w.x.y.z 
                          where "w.x.y.z" is the IPv4 address) 
  $2 = port (decimal, host byte order) 
  
  Additional command line arguments ($3 and higher) may be specified in the monitor template 
  This example does not expect any additional command line arguments 
  
  Name/Value pairs may also be specified in the monitor template 
  This example expects the following Name/Vaule pairs: 
   URI  = the URI to request from the server 
   RECV = the expected response (not case sensitive) 
   TRY = the number of tries 
  
  remove IPv6/IPv4 compatibility prefix (LTM passes addresses in IPv6 format) 
 IP=`echo ${1} | sed 's/::ffff://'` 
 PORT=${2} 
  
 PIDFILE="/var/run/`basename ${0}`.${IP}_${PORT}.pid" 
  kill of the last instance of this monitor if hung and log current pid 
 if [ -f $PIDFILE ] 
 then 
    kill -9 `cat $PIDFILE` > /dev/null 2>&1 
 fi 
 echo "$$" > $PIDFILE 
  
 success=0 
 n=${TRY} 
  loop TRY times 
 for (( i = 1; i <= $n; i++ )) 
 do 
  send request & check for expected response 
    curl -fNsi http://${IP}:${PORT}${URI} | grep -i "${RECV}" 2>&1 > /dev/null 
  
  mark node UP if expected response was received 
    if [ $? -eq 0 ] 
    then 
        success=1 
    fi 
    sleep 3 
 done 
  
 if [ $success == 1 ] 
 then 
     echo "UP" 
 fi 
  
 rm -f $PIDFILE 
 exit 
 

It seems to work, but I don't quite feel sure about it. Can someone look this over for errors? Thanks.
No RepliesBe the first to reply