NetFlow Sampling
 

Funkcja samplingu umożliwia zbieranie informacji na temat losowej części ruchu, określonej jako 1 losowy pakiet z N, gdzie N jest konfigurowalnym parametrem. Jest to tak zwany Random Sampled NetFlow.

Dla przykładu, jeśli będziemy chcieli zebrać informację na temat 1 losowego pakietu ze 100, sampler może wybrać pakiety z numerami 5, 120, 199, 302, i tak dalej.

Na niektórych starszych platformach można spotkać się z Sampled NetFlow, gdzie sampler przy konfiguracji 1 na 100, wybierze pakiet o numerze 1, 101, 201, 301, i tak dalej. Nas to aktualnie nie dotyczy - na wykorzystywanych w przykładach platformach działa tylko Random Sampled NetFlow.

Takie podejście daje statystyczny pogląd na temat całościowego ruchu. Szczególnie dotyczy to sytuacji, gdzie mamy do czynienia z ruchem pojawiającym się w dość regularnym i ustalonym wzorcu. Samplowanie ruchu redukuje obciążenie routera oraz ilość eksportowanego przez niego ruchu (jak podaje producent, przy samplowaniu 1 na 100, możemy osiągnąć redukcję około 50% danych). Niemniej, należy pamiętać o tym, że tracimy część informacji.


Zainteresowanych zbieraniem danych o ruchu oraz jego analizą zachęcamy do zapoznania się z Cisco Stealthwatch.


Od wersji 5 eksportu danych pojawiała się możliwość wysyłania do kolektora informacji na temat włączonych opcji samplowania ruchu. Dotyczy to trybu samplowania i jego częstotliwości. W innym artykule został pokazany nagłówek NetFlow v5, gdzie widać przygotowane do tego celu pola 'Sampling Mode' i 'Sampling Interval'. Po uruchomieniu Random Sampled NetFlow, pola te w wersji 5 nie są wykorzystywane. Informacji na temat ID samplera należy szukać w ostatnich 3 bitach pola wypełnienia 'Padding' każdego z rekordów.
 
Podczas eksportu w wersji 5, żadne inne informacje na temat samplera nie są eksportowane. Bardziej kompletne dane na temat samplera mogą być eksportowane w NetFlow v9. Dzięki informacją na temat samplera, kolektor jest w stanie oszacować statystycznie rzeczywistą ilość ruchu na interfejsie, dla przykładu mnożąc go przez skonfigurowaną częstotliwość samplowania.
 
Konfiguracja samplera jest bardzo prosta. Po zdefiniowaniu jego nazwy, należy określić 1 z ilu pakietów ma podlegać przetworzeniu. Mamy do dyspozycji zakres w przedziale od 1 do 65535. 

R4(config)# flow-sampler-map SAMPLER-1-out-of-10-TNF
R4(config-sampler)# ?
Flow sampler configuration commands:
  exit  Exit from flow-sampler-map configuration mode
  mode  Mode of packet sampling for netflow processing
 
R4(config-sampler)# mode ?
  random  Random mode of sampling
 
R4(config-sampler)# mode random ?
  one-out-of  Select one packet out of
 
R4(config-sampler)# mode random one-out-of ?
  <1-65535>  number of sequential packets to select one packet from
 
R4(config-sampler)# mode random one-out-of 10
R4(config-sampler)# exit
R4(config)#

Maksymalnie możemy skonfigurować 8 samplerów. Przy próbie zdefiniowania 9 pojawi się błąd, który widać poniżej.

R4(config)# flow-sampler-map SAMPLER-1-out-of-10-TNF  
R4(config-sampler)# mode random one-out-of 10
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-20-TNF
R4(config-sampler)# mode random one-out-of 20                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-30-TNF
R4(config-sampler)# mode random one-out-of 30                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-40-TNF
R4(config-sampler)# mode random one-out-of 40                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-50-TNF
R4(config-sampler)# mode random one-out-of 50                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-60-TNF
R4(config-sampler)# mode random one-out-of 60                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-70-TNF
R4(config-sampler)# mode random one-out-of 70                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-80-TNF
R4(config-sampler)# mode random one-out-of 80                
R4(config-sampler)# flow-sampler-map SAMPLER-1-out-of-90-TNF
R4(config-sampler)# mode random one-out-of 90                
%Flow: Max number of samplers configured
%Flow: Error could not create sampler
R4(config-sampler)# 

Jeden sampler może zostać przypisany do więcej niż jednego źródła informacji, którymi mogą być różne interfejsy, podinterfejsy i klasy ruchu (w środku class-map). Strumienie z tych wszystkich źródeł ruchu są ze sobą łączone przed trafieniem do samplera. Zatem wybór 1 losowego pakietu z N realizowany jest na całościowym ruchu, pochodzącym z wielu źródeł. Na razie skupimy się na wykorzystaniu samplera na interfejsach i podinterfejsach, gdzie sposób jego konfiguracji jest dokładnie taki sam.

Niemniej należy pamiętać, że uruchomienie samplera na interfejsie głównym nie spowoduje jego uruchomienia na podinterfejsach i tak samo w drugą stronę. Stąd, należy wejść do każdego wybranego interfejsu czy podinterfejsu i przypiąć sampler na interesującym nas kierunku zbierania informacji.

Warto zwrócić uwagę na ostrzeżenia przy próbie uruchomienia samplera, na interfejsie gdzie działa już zbieranie informacji o wszystkich przepływach. Sampler nie zostanie aktywowany i zbierane będą nadal informacje o wszystkich przepływach. Stąd, by sampler zaczął działać, należy wcześniej zanegować polecenia ip flow ingress i ip flow egress. Jeśli ponownie włączymy zbieranie wszystkich informacji, to sampler zostanie ponownie wyłączony. Zbieranie wszystkich informacji ma priorytet nad samplerem.


R4(config)# interface GigabitEthernet 0/0
R4(config-if)# flow-sampler SAMPLER-1-out-of-10-TNF  
R4(config-if)#             
*Aug 15 16:33:08.601 UTC: Warning: ingress netflow will override the sampler.
R4(config-if)# flow-sampler SAMPLER-1-out-of-10-TNF egress 
R4(config-if)#
*Aug 15 16:33:12.561 UTC: Warning: egress netflow will override the sampler.
R4(config-if)# no ip flow ingress 
R4(config-if)#
*Aug 15 16:33:20.309 UTC: Warning: ingress sampler re-enabled.
R4(config-if)# ip flow ingress   
R4(config-if)#
181218: Sep  9 20:27:54.437 UTC: Warning: ingress netflow will override the sampler.
R4(config-if)# no ip flow ingress 
R4(config-if)#
*Aug 15 16:33:20.309 UTC: Warning: ingress sampler re-enabled.
R4(config-if)# no ip flow egress 
R4(config-if)#
*Aug 15 16:33:23.529 UTC: Warning: egress sampler re-enabled.
R4(config-if)# do show ip flow interface 
GigabitEthernet0/0
  flow-sampler SAMPLER-1-out-of-10-TNF
  flow-sampler SAMPLER-1-out-of-10-TNF egress
R4(config-if)# 

Przed weryfikacją, skonfigurujemy drugi sampler i przypniemy go na wejściu interfejsu Gi0/0 R4. Pozwoli nam to zaobserwować różne informacje na temat opcji samplera w eksportowanych szablonach opcji i danych opcji. Poniżej zostały też zaprezentowane wyniki poleceń, pokazujące konfigurację samplerów i ich przypisanie do interfejsów. 

R4(config)# flow-sampler-map SAMPLER-1-out-of-100-TNF
R4(config-sampler)# mode random one-out-of 100
R4(config-sampler)# exit
R4(config)# interface GigabitEthernet 0/0
R4(config-if)# flow-sampler SAMPLER-1-out-of-100-TNF
R4(config-if)# end
R4# show flow-sampler
 
 Sampler : SAMPLER-1-out-of-10-TNF, id : 1, packets matched : 461, mode : random sampling mode
  sampling interval is : 10
 
 Sampler : SAMPLER-1-out-of-100-TNF, id : 2, packets matched : 0, mode : random sampling mode
  sampling interval is : 100
R4# show ip flow interface
GigabitEthernet0/0
  flow-sampler SAMPLER-1-out-of-100-TNF
  flow-sampler SAMPLER-1-out-of-10-TNF egress
GigabitEthernet0/2.56
  ip flow ingress
  ip flow egress
R4# show ip cache verbose flow
IP packet size distribution (8369 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .012 .597 .185 .167 .006 .001 .002 .000 .000 .002 .000 .001 .001 .001 .001
 
    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .001 .003 .002 .009 .000 .000 .000 .000 .000 .000 .000
 
IP Flow Switching Cache, 278544 bytes
  9 active, 4087 inactive, 1642 added
  38985 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
  9 active, 1015 inactive, 1578 added, 1578 added to flow
  0 alloc failures, 0 force free
  1 chunk, 2 chunks added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
TCP-BGP            206      0.0         1    56      0.0       3.3      15.5
TCP-other          523      0.1         7    65      0.8       9.9      15.4
UDP-NTP            143      0.0         1    74      0.0       0.1      15.6
UDP-other           63      0.0         9    88      0.1      34.1      15.4
ICMP                59      0.0        20    93      0.2      17.3      15.8
IGMP                34      0.0         1    39      0.0       0.0      15.5
GRE                 72      0.0         2    53      0.0       3.1      15.5
IP-other           251      0.0         2    56      0.1       6.5      15.5
Total:            1351      0.2         5    70      1.5       8.1      15.5
 
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
IPM: OPkts    OBytes  BGP: BGP NextHop
Gi0/2.56       172.16.46.6     Local          172.16.46.4     06 C0  18       2 
391C /24 0                     00B3 /0  0     0.0.0.0                49     6.2
BGP: 0.0.0.0         
 
Gi0/2.56       172.16.6.1      Gi0/0          172.16.12.1     01 00  10     100 
0000 /32 65006                 0000 /24 0     10.246.34.3           100     0.2
BGP: 10.246.255.2    
 
Gi0/2.56       172.16.6.1      Gi0/0*         172.16.12.1     01 00  10      10 
0000 /0  0                     0000 /0  0     0.0.0.0               100     0.2
BGP: 10.246.255.2    
Sampler: 1  FFlags: 05  
 
Pos:Lbl-Exp-S 1:16-0-1
Gi0/2.56       172.16.6.141    Gi0/0          10.246.255.1    06 60  18       2 
83A2 /25 65006                 07D0 /0  65007 10.246.34.3            46     0.0
BGP: 10.246.255.2    
 
Gi0/2.56       172.16.56.6     Gi0/0          172.16.1.123    06 C0  18       2 
0016 /24 65005                 D50E /24 0     10.246.34.3            58     0.0
BGP: 10.246.255.2    
 
Gi0/0          172.16.12.1     Gi0/2.56       172.16.6.1      01 00  10       2 
0000 /24 0                     0800 /32 65006 172.16.46.6            81     0.0
BGP: 172.16.46.6     
Sampler: 2  
 
Gi0/0          172.16.12.1     Gi0/2.56*      172.16.6.1      01 00  10     100 
0000 /24 0                     0800 /32 65006 172.16.46.6           100     0.2
BGP: 172.16.46.6     
FFlags: 01  
 
Gi0/0          172.16.1.123    Local          10.246.255.4    06 10  10       2 
D4F6 /24 0                     0016 /32 0     0.0.0.0                51     0.0
BGP: 0.0.0.0         
Sampler: 2  
 
Gi0/0          10.246.255.1    Gi0/2.56*      172.16.6.141    06 60  18       1 
07D0 /0  65007                 83A2 /25 65006 172.16.46.6            52     0.0
BGP: 172.16.46.6     
FFlags: 01  
 
R4#  

Powyżej, kolorami zostały oznaczone rekordy powstałe na skutego wygenerowania 100 pakietów ICMP z adresu 172.16.12.1 do adresu 172.16.6.1. Na wejściu Gi0/0 R4, przez sampler o ID 2 zostały wyłapane 2 pakiety. Na wyjściu Gi0/0 R4, przez sampler o ID 1 zostało wyłapane 10 pakietów. Na podinterfejsie Gi0/2.56, gdzie zbierane są informacje z wszystkich pakietów, wyłapane zostało po 100 pakietów w obu kierunkach.


Na początku wspomnieliśmy o ograniczeniach w eksporcie informacji na temat wykorzystywanych samplerów w NetFlow v5. Poniżej można zobaczyć przykładowy pakiet, jaki zostanie wysłany do kolektora na skutek zebrania informacji przez sampler. Warto zwrócić uwagę na ostatnie pole rekordu o nazwie 'Padding', w którego ostatnich 3 bitach zawarte jest ID samplera. W naszym przypadku jest to 1.


Jeśli w NetFlow v9 chcemy eksportować informacje na temat wykorzystywanych samplerów, należy włączyć eksport szablonu opcji samplera. Opcja ta stanie się dostępna dopiero po zdefiniowaniu w systemie minimum jednego samplera. Zostało to zademonstrowane poniżej, gdzie widać dostępne opcje przed i po zdefiniowaniu samplera.

R4(config)# ip flow-export template options ?
  export-stats  Specify the template option export statistics
  refresh-rate  Specify the number of export packets before the options are resent
  timeout-rate  Specify the time before the options are resent
 
R4(config)# flow-sampler-map SAMPLER-1-out-of-10-TNF
R4(config-sampler)# mode random one-out-of 10
R4(config-sampler)# exit
R4(config)# ip flow-export template options ?
  export-stats  Specify the template option export statistics
  refresh-rate  Specify the number of export packets before the options are resent
  sampler       Specify the template option sampler
  timeout-rate  Specify the time before the options are resent
 
R4(config)# ip flow-export template options sampler 
R4(config)#

Bez tej opcji, w każdym z rekordów zawarte będą tylko informacje o ID samplera, podobnie jak miało to miejsce w NetFlow v5. W NetFlow v9 zdefiniowane zostały do tego celu specjalne pola, która będzie można zaraz zobaczyć.

Poleceniami ip flow-export template options export-stats (informacje na temat wysłanej ilości pakietów i przepływów - Id = 259) i ip flow-export template options sampler (informacje na temat samplerów - Id = 258) zostały włączone dodatkowe szablony opcji. Przyjrzyjmy się nim niżej.


Poniżej widać wysyłane do kolektora informacje, na temat skonfigurowanych przez nas powyżej samplerów. Należy do nich ID, tryb pracy i częstotliwość samplowania.

 


Dane NetFlow v9 dla każdego z przepływów zawierają informacje na temat ID samplera i ID klasy. Do ID klasy wrócimy w kolejnym artykule. Pola te są dostępne w predefiniowanym w TNF szablonie bez względu na to, czy zdefiniowany został jakiś sampler (jeśli ruch nie podlegał samplowaniu, to znajdują się tam same zera).

  


Poprzez ID samplera, kolektor mam możliwość powiązania rekordu przepływu z konfiguracją samplera. Dzięki temu może statystycznie oszacować realną wielkość ruchu na interfejsie. Stąd przy konfiguracji samplingu, zaleca się wykorzystania NetFlow v9 do eksportu danych.


Zapraszamy do kontaktu drogą mailową This email address is being protected from spambots. You need JavaScript enabled to view it. lub telefonicznie +48 797 004 932.