Учет трафика 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
,