Страница 1 из 1

RRDTool + PF

Добавлено: 2009-12-10 19:45:35
TITANius
Хочу сделать мониторинг роутера, но столкнулся с проблемой как связать PF с RRDTool. Вернее как выбирать нужные мне данные из PF ?
Кто реализовывал данный метод прошу поделиться экспириэнсом :)

Re: RRDTool + PF

Добавлено: 2009-12-11 14:36:09
TITANius
Отвечу сам на свой вопрос :) PF очень крутая штука. Можно получить статистику практически ко всему

Статистика по всем интерфейсам одновременно: pfctl -sI -vv
Статистика по конкретному интерфейсу: pfctl -sI -vv -i interface
Статистика по правилам: pfctl -sr -vv

Итак например нам нужно собрать суммарную входящую и исходящую статистику.

Код: Выделить всё

$ pfctl -sI -vv -i ng0
ng0
        Cleared:     Thu Dec 10 16:20:21 2009
        References:  [ States:  0                  Rules: 14                 ]
        In4/Pass:    [ Packets: 2173948            Bytes: 293719041          ]
        In4/Block:   [ Packets: 82890              Bytes: 11005998           ]
        Out4/Pass:   [ Packets: 3534355            Bytes: 2825644144         ]
        Out4/Block:  [ Packets: 60                 Bytes: 3684               ]
        In6/Pass:    [ Packets: 0                  Bytes: 0                  ]
        In6/Block:   [ Packets: 0                  Bytes: 0                  ]
        Out6/Pass:   [ Packets: 0                  Bytes: 0                  ]
        Out6/Block:  [ Packets: 0                  Bytes: 0                  ]
Соответственно In4/All = In4/Pass + In4/Block:

Код: Выделить всё

$ expr -e `pfctl -sI -vv -i ng0 | grep "In4/Pass" | awk '{print $6}'` + `pfctl -sI -vv -i ng0 | grep "In4/Block" | awk '{print $6}'`
305152579
Так само и для исходящей: Out4/All = Out4/Pass + Out4/Block

Код: Выделить всё

$ expr -e `pfctl -sI -vv -i ng0 | grep "Out4/Pass" | awk '{print $6}'` + `pfctl -sI -vv -i ng0 | grep "Out4/Block" | awk '{print $6}'`
2857936511
С правилами немного посложнее, так как в PF не нумеруются правила :(, но можно посмотреть их поочерёдность и выбрать нужное нам число.

Код: Выделить всё

$ pfctl -sr -vv
...
@32 pass out on ng0 proto tcp from any to any port = http flags S/SA keep state
  [ Evaluations: 328       Packets: 102       Bytes: 12708       States: 4     ]
  [ Inserted: uid 0 pid 8499 ]
...
Интересуемся исходящим трафиком на интерфейсе ng0 по http

Код: Выделить всё

$ pfctl -sr -vv | awk 'NR==104 {print $7}'
58728
Дальше дело за малым, можно собирать информацию о всех и вся :)