| #! /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 |