Учет трафика SNMP Графана, возможно ли это?

Пожалуйста, потерпите меня, я промокаю ногами от Grafana/Telegraf/InfluxDB.

Мне удалось выполнить следующие уроки, чтобы опросить маршрутизатор по протоколу snmp и определить его трафик. Ницца!

Теперь мне нужна таблица с трафиком за период времени, особенно ежедневно. Что-то вроде этого:

|        Day        | ifHCInOctets  | ifHCOutOctets | Total    |
|-------------------|---------------|---------------|----------|
| February 21, 2017 |         xy GB |         xy GB |    xy GB |
| February 20, 2017 |         xy GB |         xy GB |    xy GB |
| February 19, 2017 |         xy GB |         xy GB |    xy GB |

Я видел совет в Как я могу агрегировать показатели в день в таблице Grafana?, но веб-редактор не может питаться этим (?).

Спасибо за чтение.

Изменить: Спасибо за ваш комментарий, который очень ценится. Фактически, мои значения являются накопительными счетчиками, так же как они опрашиваются через SNMP. Я в основном следовал учебнику по адресу https://lkhill.com/telegraf-influx-grafana-network-stats/.

Таким образом, моя задача, похоже, состоит в том, чтобы сгенерировать разумную базу данных и записать дельты данных (счетчик ролловер также должен быть принят во внимание, верно?). Как я мог сделать это? Мой Google-Fu сильно меня подводит.

Результат SHOW TAG KEYS & SHOW FIELD KEYS выглядит следующим образом:

Connected to http://localhost:8086 version 1.4.2
InfluxDB shell version: 1.4.2

SHOW TAG KEYS;


name: cpu
tagKey
------
cpu
host

name: disk
tagKey
------
device
fstype
host
mode
path

name: diskio
tagKey
------
host
name

name: interface
tagKey
------
agent_host
dot3StatsIndex
host
hostname
ifDescr
ifIndex

name: kernel
tagKey
------
host

name: mem
tagKey
------
host

name: processes
tagKey
------
host

name: snmp
tagKey
------
agent_host
host
hostname
ifName

name: swap
tagKey
------
host

name: system
tagKey
------
host



SHOW FIELD KEYS;
name: cpu
fieldKey         fieldType
--------         ---------
usage_guest      float
usage_guest_nice float
usage_idle       float
usage_iowait     float
usage_irq        float
usage_nice       float
usage_softirq    float
usage_steal      float
usage_system     float
usage_user       float

name: disk
fieldKey     fieldType
--------     ---------
free         integer
inodes_free  integer
inodes_total integer
inodes_used  integer
total        integer
used         integer
used_percent float

name: diskio
fieldKey         fieldType
--------         ---------
io_time          integer
iops_in_progress integer
read_bytes       integer
read_time        integer
reads            integer
weighted_io_time integer
write_bytes      integer
write_time       integer
writes           integer

name: interface
fieldKey                           fieldType
--------                           ---------
dot3StatsAlignmentErrors           integer
dot3StatsCarrierSenseErrors        integer
dot3StatsDeferredTransmissions     integer
dot3StatsDuplexStatus              integer
dot3StatsEtherChipSet              string
dot3StatsExcessiveCollisions       integer
dot3StatsFCSErrors                 integer
dot3StatsFrameTooLongs             integer
dot3StatsInternalMacReceiveErrors  integer
dot3StatsInternalMacTransmitErrors integer
dot3StatsLateCollisions            integer
dot3StatsMultipleCollisionFrames   integer
dot3StatsSQETestErrors             integer
dot3StatsSingleCollisionFrames     integer
dot3StatsSymbolErrors              integer
ifAdminStatus                      integer
ifAlias                            string
ifConnectorPresent                 integer
ifCounterDiscontinuityTime         integer
ifDescr                            string
ifHCInBroadcastPkts                integer
ifHCInMulticastPkts                integer
ifHCInOctets                       integer
ifHCInUcastPkts                    integer
ifHCOutBroadcastPkts               integer
ifHCOutMulticastPkts               integer
ifHCOutOctets                      integer
ifHCOutUcastPkts                   integer
ifHighSpeed                        integer
ifInBroadcastPkts                  integer
ifInDiscards                       integer
ifInErrors                         integer
ifInMulticastPkts                  integer
ifInOctets                         integer
ifInUcastPkts                      integer
ifInUnknownProtos                  integer
ifLastChange                       integer
ifLinkUpDownTrapEnable             integer
ifMtu                              integer
ifName                             string
ifOperStatus                       integer
ifOutBroadcastPkts                 integer
ifOutDiscards                      integer
ifOutErrors                        integer
ifOutMulticastPkts                 integer
ifOutOctets                        integer
ifOutUcastPkts                     integer
ifPhysAddress                      string
ifPromiscuousMode                  integer
ifSpeed                            integer
ifType                             integer

name: kernel
fieldKey         fieldType
--------         ---------
boot_time        integer
context_switches integer
interrupts       integer
processes_forked integer

name: mem
fieldKey          fieldType
--------          ---------
active            integer
available         integer
available_percent float
buffered          integer
cached            integer
free              integer
inactive          integer
slab              integer
total             integer
used              integer
used_percent      float

name: processes
fieldKey      fieldType
--------      ---------
blocked       integer
dead          integer
idle          integer
paging        integer
running       integer
sleeping      integer
stopped       integer
total         integer
total_threads integer
unknown       integer
zombies       integer

name: snmp
fieldKey                   fieldType
--------                   ---------
ifAlias                    string
ifConnectorPresent         integer
ifCounterDiscontinuityTime integer
ifHCInBroadcastPkts        integer
ifHCInMulticastPkts        integer
ifHCInOctets               integer
ifHCInUcastPkts            integer
ifHCOutBroadcastPkts       integer
ifHCOutMulticastPkts       integer
ifHCOutOctets              integer
ifHCOutUcastPkts           integer
ifHighSpeed                integer
ifInBroadcastPkts          integer
ifInMulticastPkts          integer
ifLinkUpDownTrapEnable     integer
ifName                     string
ifOutBroadcastPkts         integer
ifOutMulticastPkts         integer
ifPromiscuousMode          integer
uptime                     integer

name: swap
fieldKey     fieldType
--------     ---------
free         integer
in           integer
out          integer
total        integer
used         integer
used_percent float

name: system
fieldKey      fieldType
--------      ---------
load1         float
load15        float
load5         float
n_cpus        integer
n_users       integer
uptime        integer
uptime_format string

1 ответ

Общий метод: вы просто суммируете (или агрегируете другим способом) свои значения за период времени. Это должно выглядеть довольно знакомо (я предполагаю, что значения вашей метрики показывают дельту, объем трафика, который прошел с момента предыдущего измерения, а НЕ накопительный счетчик):

SELECT sum("ifHCInOctets") FROM "YourMeasurement" WHERE time > now() - 10d GROUP BY time(1d) 

В Графане это будет выглядеть так

SELECT sum("ifHCInOctets") FROM "YourMeasurement" WHERE $timeFilter GROUP BY time($interval) 

Только не забудьте настроить интервал явно.

Хотя, если вы просто добавите больше деталей о ваших измерениях, вам будет проще получить более точный совет.

ОБНОВЛЕНИЕ: Итак, это накопительное. Хорошо.

Тогда вот в чем дело: вы можете иметь свои дельты с DIFFERENCE() между сериями, сгруппированными по периоду времени. А в случае накопительных счетчиков - очевидно, вам нужно только последнее значение в ряду.

Хотя, вот две вещи.

Во-первых: похоже, что у вас нет общего счетчика, а есть пара счетчиков на некоторые группы.

Глядя на вашу схему (особенно на теги), я могу предположить, что она основана на хосте (и, возможно, следует учитывать и интерфейсы). Таким образом, вы должны добавить группировку по хосту, в противном случае DIFFERENCE() приведет к полной чепухе, потому что значение будет приниматься только по метке времени, не обращая внимания на то, что это за счетчик.

Во-вторых... Я понятия не имел, могут ли счетчики быть сброшены в течение интересующего вас периода.

Но если бы они могли - я пока не знаю, как с этим справиться (кроме как с Kapacitor).

Это нормально, если вы хотите, чтобы последовательность дельт за период отображалась как пропускная способность - вы бы знали, что внезапные "заглядывания вглубь" и "назад" были сбросом счетчиков.

Но если вы намереваетесь дополнительно агрегировать это (например, суммировать эти дельты за день) - это повлияет на это значение.

Итак, это будет выглядеть примерно так

SELECT DIFFERENCE(LAST("ifHCInOctets")) FROM "YourMeasurement" WHERE $timeFilter GROUP BY host, ifName, time($interval)

Это будет ваша пропускная способность за период в $interval,

Другие вопросы по тегам