Wowza Media Server

From HeadBackup
Revision as of 07:59, 24 November 2009 by Andrew (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Graph Wowza Connection Statistics

Problem: I wanted a way to trend connections to an Amazon EC2 Wowza streaming server instance even though we stop the server following each broadcast.

Solution: Create a script to retrieve and record the current connection count using http://ec2servername.com:1935 which is enabled by default on Wowza and use csv2png to graph the recorded data.

Get Statistics

This script creates a log file with the date/time and the number of connections to the Wowza server. It then generates a graph from the log file.

/bin/date +%F\ %T | tr -d '\n' >> [fullpath]/stats/`/bin/date +%F`_connections.log
wget -t 1 -T 9 -O - http://ec2servername.com:1935 | sed 's/server=/,/' >> [fullpath]/stats/`/bin/date +%F`_connections.log
echo >> [fullpath]/stats/`/bin/date +%F`_connections.log
[fullpath]/stats/csv2png [fullpath]/stats/`/bin/date +%F`_connections.log [fullpath]/stats/`/bin/date +%F`_connections.png 250 250 YmdHMS

Generate HTML

This script will generate HTML snippets for each month, then combine them into an overview page. Uncomment and specify the date at the top and comment the next line if running this for something other than the current month.

#date="2009-03"
date=`/bin/date +%Y-%m`

cd [fullpath]/stats/
list=`ls $date*.png`

echo "<br><br><table><tr>" > $date-month.html

for file in $list
do
echo "<td>$file</td>" | sed 's/_connections.png/:/' >> $date-month.html
done

echo "</tr><tr>" >> $date-month.html

for file in $list
do
echo "<td><img src=$file alt=$file></td>" >> $date-month.html
done

echo "</tr></table>" >> $date-month.html


list2=`ls -r 2*month.html`
echo "<html><title>Webcast Stats</title><h2>Webcast Stats</h2>" > index.html
echo "Summary of max connections from each week:<br>" >> index.html
echo "<img src=summary.png alt=summary.png>" >> index.html
for file in $list2
do
cat $file >> index.html
done
echo "</html>" >> index.html

Generate Summary

This script will generate HTML snippets for each month, then combine them into an overview page. Uncomment and specify the date at the top and comment the next line if running this for something other than the current month

cd [fullpath]/stats/
list=`ls *connections.log`

#echo "2009/02/28 12:52:00,0" > summary.log
echo > summary.log

for file in $list
do
sort -n -k 2 -t , $file | tail -1 >> summary.log
done

[fullpath]/stats/csv2png [fullpath]/stats/summary.log [fullpath]/stats/summary.png 800 250 YmdHMS

Configure cronjobs

On linux use the following command to edit your cronjobs:

crontab -e
  • In this example we gather statistics every minute on Saturdays between 10:00am and 12:59pm.
  • At the start of the window we generate the HTML to include the current day.
  • At the end of the window we update the summary graph to include the highest connection count from today.
* 10-12 * * 6 [fullpath]/stats/getstats.sh
5 10 * * 6 [fullpath]/stats/genhtml.sh
5 13 * * 6 [fullpath]/stats/gensummary.sh

Results

With the above configuration files will be created like this (note the auto scaling with the highpoint noted at the top left corner of each graph):

2009-10-month.html
2009-10-31_connections.png
2009-10-31_connections.log
2009-11-07_connections.png
2009-11-07_connections.log
2009-11-14_connections.png
2009-11-14_connections.log
index.html
2009-11-month.html
2009-11-21_connections.png
2009-11-21_connections.log
summary.png
summary.log

The resulting web page shown by browsing to index.html will look something like this:
Wowzastats.jpg