parsing wowza logs
I’ve been wanting to look at Wowza logs for a very long time. I just spent a couple of hours writing a Bash script that generates a stats report. It parses the Wowza log file for the IP addresses, and runs them and against a site called ipinfo.io to get the viewer’s geo location. The output is filtered, sorted, takes a count, and finally generates a webpage. Here’s the Bash script.
# Can be placed in cron to run.
create-wowza-report.sh wowzastreamingengine_access.log
#!/bin/bash
# check for missing argument
if [ -z "$1" ]
then
echo "No arguments supplied. Format: create-wowza-report.sh wowzastreamingengine_access.log"
exit 1
fi
# get the ips from the wowza log file
awk '{print $17}' $1 > output1.txt
# exclude invalid ips
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' output1.txt > output2.txt
# sort unique ips
cat output2.txt | sort -u | uniq > ips.txt
# pause for 1s
sleep 1s
# empty file just in case
> output3.txt
# set filename
filename="ips.txt"
# read filename and get geo info
while read -r ipaddress; do
curl ipinfo.io/"$ipaddress" 2>/dev/null | awk -F'"' '$2=="city"{printf("%s, ", $4)}$2=="region"{print $4}' >> output3.txt
done output4.txt
# sort output alphabetically
cat output4.txt | sort > output5.txt
# get a count of connections
count=$(wc -l $filename.php
<title>Wowza Streaming Stats on $date</title>
<h1>Live Streaming Stats</h1>
<p>Number of connections on $date: $count</p>
<?php include('$filename.txt');??>
EOF
# move files to web directory
cp $filename.* /var/www/html
# cleanup files
rm output*.txt
rm ips.txt