How to get apache server status variables by shell script

HI
i am woundering, if any one can help me or give some good article about:

how to get apache server status variable by shell scripting ..

what i meant is : if you  open your http://11.22.22.22/server-staus , it will give you this kind of info

Current Time: Tuesday, 07-Jul-2009 13:03:16 BST
Restart Time: Sunday, 05-Jul-2009 04:02:03 BST
Parent Server Generation: 1
Server uptime: 2 days 9 hours 1 minute 13 seconds
Total accesses: 1578 - Total Traffic: 5.3 MB
CPU Usage: u13.52 s2.25 cu11.38 cs0 - .0132% CPU load
.00769 requests/sec - 26 B/second - 3504 B/request
1 requests currently being processed, 13 idle workers


Where apache is storing those information, how you can get those value in to a varibles ?? is there any command to get those value ?? example, uptime [ will show you how many days linux server is runing.. load averages .. etc ]  ,
mainly these :
Server uptime: 2 days 9 hours 1 minute 13 seconds
Total accesses: 1578 - Total Traffic: 5.3 MB
.00769 requests/sec - 26 B/second - 3504 B/request
1 requests currently being processed, 13 idle workers


LVL 29
fosiul01Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
woolmilkporcConnect With a Mentor Commented:
There is a "machine-readable" version of the status page in ...../server-status?auto ,
and there is a perl script in apache's ...src/support subdirectory called "log_server_status" which will reformat the above data into one single line.
You probably don't need to go the "hard way" to parse this line (sorry, I can't test at the moment), but not without things like 'awk' or the like.
As for apache variables (quoting apache docs) -
Although these variables are referred to as environment variables, they are not the same as the environment variables controlled by the underlying operating system. Instead, these variables are stored and manipulated in an internal Apache structure. They only become actual operating system environment variables when they are provided to CGI scripts and Server Side Include scripts.
Again, I'm not aware of  a better way to let you achieve what you want.
Although you don't want to use 'awk', here is a tiny example using normal lynx output -
#!/bin/ksh
# server to check
server="11.22.22.22"
# idle workers low theshold
iw_low=5 # or whatever
iw=$(lynx -nolist -dump http://${server}/server-status | grep "idle workers" |awk '{print $6}')
[ $iw -lt $iw_low ] && echo "Idle workers $iw is below threshold of $iw_low on $server" | mailx -s "Apache Alert" fosiul01@hisdomain.tld  
In case you plan to have this run by cron you will need sort of a "locking" mechanism to avoid receiving tons of mails once the value gets below threshold.
 wmp
 
0
 
omarfaridCommented:
did you try to use

wget http://11.22.22.22/server-staus  > status.txt

cat status.txt | myscript

myscript contains

read line1
var1=$line1
read line2
var1=$line2
read line3
var1=$line3
read line4
var1=$line4
read line5
var1=$line5
0
 
fosiul01Author Commented:
hmm , i know what you meant, i just realized from this 2 website

http://blog.e-shell.org/categorylist_html?cat_id=15
http://www.commandlinefu.com/commands/view/1018/summarize-apache-extended-server-status-to-show-longest-running-requests

but , without wget http://11.22.22.22/server-staus

is not there any other way to use ???

i understand, mod_status, will provide those information ...

but can you not get those value directory to script without accessing to server_status
0
Build your data science skills into a career

Are you ready to take your data science career to the next step, or break into data science? With Springboard’s Data Science Career Track, you’ll master data science topics, have personalized career guidance, weekly calls with a data science expert, and a job guarantee.

 
woolmilkporcCommented:
To get content only  (no HTML), try 'lynx'
lynx -nolist -dump http://11.22.22.22/server-staus  > output.txt

0
 
woolmilkporcCommented:
OK, now I see your requirement!
Try
apachectl status
or
apachectl fullstatus
wmp
 
0
 
fosiul01Author Commented:
@woolmilkporc,

 thanks lynx is better then wget or links command ... its gettign the exact valuE!


but still, my question is, withotu accessing server-status, can you not get those value ??

becaues if i try to get those value form server-status, i need to extract line by line ...

if you guys look to this link

http://blog.e-shell.org/categorylist_html?cat_id=15

there is a picture, its a python programm, but can you create same output via shell script ?? or you need something liek C or pyton ??



0
 
fosiul01Author Commented:
Ok apachectl fullstatus + some script example  ( http://www.commandlinefu.com/commands/view/1018/summarize-apache-extended-server-status-to-show-longest-running-requests)

might do the job

so, if you guys think that,

server-status or apachectl fullstatus + script  is the only solution to get those values then i will happy to close this question..

is that the only way ??
0
 
ai_ja_naiCommented:
Are you talking about these? http://httpd.apache.org/docs/1.3/env.html
0
 
woolmilkporcCommented:

Of course you can run 'uptime' to get some info, but the other values need to be calculated by apache
(to avoid e.g. excessive logfile analyzing by means of a homemade script),
and afaik they're not stored anywhere in the filesystem.
 
What exactly are you trying to do with those values?
If it's only for displaying, just use apachectl or lynx without the '-dump' option.
 
If, however, you're going to work with the values (calculating/storing etc.) you will need to extract them from
the output of a tool like the above - I'm not aware of a better solution.

wmp
0
 
fosiul01Author Commented:
hmmm

ok suppose if you want to take a mysql status report , you can get those from variables,

right ??

example
suppose in mysql, if you want to get if you want to get how many thread is runing  you can get the variables like this

Slave_IO_Running=`mysql -Bse "show status\G" | grep Threads_running  | awk '{ print $2 }'`

is not it ???

so what i am asking is,
is there any way to get each data from a apache variable ??

suppose this line

1 requests currently being processed, 7 idle workers

so i want to know, how many request is there,  
its currently 1

now can i get this 1 from any sort of apache variable ??

[ i know if you  use scripting with awk you would be able to get that variable by , may be hard way but you would be ]

my question is, can you get those data from apache variable or not ...
0
 
fosiul01Author Commented:
also add to my previous  post:

"1 requests currently being processed, 7 idle workers"


suppose if idle worker is low, server will be hang is not it ??

so if i want a script when idle worker will low it will sent me an email ....


0
 
fosiul01Author Commented:
i guess you are taking about this one is not it, perl script

http://forums.cacti.net/post-52815.html&highlight=

ok thanks for your help , i will take it further from here
i just wanted to get some idea..


just one question i will ask you, you do not have to explain to me to much ...

how do you monitor apache performace ??

any software ?? paid or free??

0
 
woolmilkporcCommented:
Simple answer - nagios!
Issue a standard http request regularly using check_http and measure response time.
Other http/apache parameters available by check_apache
http://www.matejunkie.com/update-apache-check-plugin-for-nagios/ 
Good luck!
wmp
0
 
fosiul01Author Commented:
you know what the last link is really really good!!

thanks again...
0
 
fosiul01Author Commented:
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.