Rastreando campos dinâmicos em Munin

0

Eu criei um plug-in Munin para rastrear o número de sessões do usuário por endereço IP, mas estou tendo problemas para fazer com que os dados persistam corretamente. Por exemplo:

[email protected]: 1 sessão das 3:00 às 3:30 [email protected]: 2 sessões das 3:15 às 4:00 [email protected]: 1 sessão das 6:00 às 7:00

Isso deve produzir um gráfico com três linhas, cujos valores devem ser óbvios.

Com o plugin (colado abaixo), este tipo de funciona , mas o problema é que as linhas só aparecem quando a sessão do usuário está ativa. Ou seja, às 3:00 há uma linha. Às 3:20, há duas linhas, às 5:00 há sem linhas, e às 6:00, há uma linha. Depois das 7:00, é como se nenhum usuário tivesse feito logon em qualquer lugar.

Aqui está o plugin:

#!/bin/bash

users_raw=$(w -hs)
declare -a users
declare -a user_sessions
uindex=0

# Aggregate current session data
while read -r line; do
    uip=$(echo "$line" | egrep -o "([0-9]+\.){3}[0-9]+" | sed "s/\./_/g")
    u=$(echo "$line" | egrep -o "^[^ "$'\t'"]+")
    u="$u@$uip"
    add=1
    for user in "${users[@]}"; do
        if [ "$user" == "$u" ]; then
            add=0
            break
        fi
        ((uindex++))
    done

    if [ "$add" -eq 1 ]; then
        users["${#users[@]}"]="$u"
    fi  

    if [ "$uindex" -eq "${#user_sessions[@]}" ]; then
        user_sessions["$uindex"]=1
    else
        ((user_sessions["$uindex"]++))
    fi  
done <<< "$users_raw"

# Output config info
if [ "$1" = "config" ]; then

    echo 'graph_title User Sessions'
    echo 'graph_vlabel Sessions'
    echo 'graph_category system'
    echo 'graph_info This graph shows the number of sessions for each user per 5 minutes.'

    # This creates a unique field for each user/ip combo
    for u in "${users[@]}"; do
        uclean="$(echo -n $u | sed "s/_/./g")"
        echo "$u.label $uclean"
        echo "$u.info The number of sessions for user@ip $u."
    done

    exit 0
fi

# Finally, output the actual instantaneous value
uindex=0
for u in "${users[@]}"; do
    echo "$u.value ${user_sessions[$uindex]}"
    ((uindex++))
done
    
por kael 25.05.2018 / 01:35

0 respostas

Tags