|  | #! /bin/sh | 
|  |  | 
|  | # This script parses /var/log/syslog for messages from programs that log | 
|  | # uptime and disk stats (number of sectors read).  It then outputs | 
|  | # these stats in a format usable by the metrics collector, which forwards | 
|  | # them to autotest and UMA. | 
|  |  | 
|  | # To add a new metric add a line below, as PROGRAM_NAME  METRIC_NAME. | 
|  | # PROGRAM_NAME is the name of the job whose start time we | 
|  | # are interested in.  METRIC_NAME is the prefix we want to use for | 
|  | # reporting to UMA and autotest.  The script prepends "Time" and | 
|  | # "Sectors" to METRIC_NAME for the two available measurements, uptime | 
|  | # and number of sectors read thus far. | 
|  |  | 
|  | # You will need to emit messages similar to the following in order to add a | 
|  | # a metric using this process.  You will need to emit both a start and stop | 
|  | # time and the metric reported will be the difference in values | 
|  |  | 
|  | # Nov 15 08:05 localhost PROGRAM_NAME[822]: start METRIC_NAME time 12 sectors 56 | 
|  | # Nov 15 08:05 localhost PROGRAM_NAME[822]: stop METRIC_NAME time 24 sectors 68 | 
|  |  | 
|  | # If you add metrics without a start, it is assumed you are requesting the | 
|  | # time differece from system start | 
|  |  | 
|  | # Metrics we are interested in measuring | 
|  | METRICS=" | 
|  | upstart start_x | 
|  | " | 
|  |  | 
|  | first=1 | 
|  | program="" | 
|  |  | 
|  | # Get the metrics for all things | 
|  | for m in $METRICS | 
|  | do | 
|  | if [ $first -eq 1 ] | 
|  | then | 
|  | first=0 | 
|  | program_name=$m | 
|  | else | 
|  | first=1 | 
|  | metrics_name=$m | 
|  |  | 
|  | # Example of line from /var/log/messages: | 
|  | # Nov 15 08:05:42 localhost connmand[822]: start metric time 12 sectors 56 | 
|  | # "upstart:" is $5, 1234 is $9, etc. | 
|  | program="${program}/$program_name([[0-9]+]:|:) start $metrics_name/\ | 
|  | { | 
|  | metrics_start[\"${metrics_name}Time\"] = \$9; | 
|  | metrics_start[\"${metrics_name}Sectors\"] = \$11; | 
|  | }" | 
|  | program="${program}/$program_name([[0-9]+]:|:) stop $metrics_name/\ | 
|  | { | 
|  | metrics_stop[\"${metrics_name}Time\"] = \$9; | 
|  | metrics_stop[\"${metrics_name}Sectors\"] = \$11; | 
|  | }" | 
|  | fi | 
|  | done | 
|  |  | 
|  | # Do all the differencing here | 
|  | program="${program}\ | 
|  | END{ | 
|  | for (i in metrics_stop) { | 
|  | value_time = metrics_stop[i] - metrics_start[i]; | 
|  | print i \"=\" value_time; | 
|  | } | 
|  | }" | 
|  |  | 
|  | exec awk "$program" /var/log/syslog |