Назад | Перейти на главную страницу

Графические данные в munin, нужно игнорировать уже увиденные значения

Я пытаюсь определить, сколько мс занимает команда 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[@]}))"