Я пытаюсь определить, сколько мс занимает команда REST. Команда выдается много раз в минуту. Вот плагин, который я написал:
#!/bin/bash
#
# Collect stats for the timing of recommendations.
#
logs="/var/www/custhome/logs/play.log"
# CONFIG
if [ "$#" -eq "1" ] && [ "$1" = "config" ]; then
echo "graph_title Post Recommendation Times"
echo "graph_category apache"
echo "graph_info Data is pooled from all sites."
echo "graph_vlabel ms"
echo "graph_period ms"
echo "graph_data_size huge"
echo "precs.label PostRecommending"
echo "precs.type GAUGE"
echo "precs.min 0"
echo "precs.draw AREA"
exit
fi
# DATA
precs=(`grep :Post.Recommending /var/www/custhome/logs/play.log | awk '{print $7}'`)
for i in "${precs[@]}"
do
[ $i -eq 0 ] && continue
echo "precs.value $i"
done
Вот как выглядит типичный набор строк в файле журнала:
4:59:17,422 DEBUG ~ colorado:45870:Post Recommending took 1925 millis
15:02:22,588 DEBUG ~ michigan:417550:Post Recommending took 1306 millis
15:02:23,753 DEBUG ~ michigan:417550:Post Recommending took 276 millis
15:02:23,754 DEBUG ~ michigan:417550:Post Recommending took 277 millis
15:05:21,047 DEBUG ~ chicago:1105784:Post Recommending took 2484 millis
15:07:02,275 DEBUG ~ colorado:66199:Post Recommending took 3303 millis
Проблема в том, что график показывает одни и те же точные данные при каждом обновлении - 1,53 тыс. Мс. Это число кажется средним. Я хочу видеть график, на котором показаны все значения, и он должен со временем меняться по мере поступления новых данных.
Есть ли способ лучше сделать это в мунине? Или некоторая предварительная обработка, которую я должен сначала сделать с данными? Или совершенно другой инструмент, чтобы увидеть нужные мне результаты? Я привык использовать munin для построения графиков таких вещей, как общее количество вызовов REST в секунду. Но мне трудно понять, как представить эти данные.
В итоге я сделал это, усредняя для каждого чтения:
for i in "${recs[@]}"
do
((total+=$i))
done
echo "recs.value $((total/${#recs[@]}))"