Описание статистики NAT [Документация VAS Experts]

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
dpi:opt_cgnat:cgnat_diagnostics [2023/08/24 08:48] – ↷ Страница перемещена из dpi:dpi_options:opt_cgnat:cgnat_diagnostics в dpi:opt_cgnat:cgnat_diagnostics elena.krasnobryzhdpi:opt_cgnat:cgnat_diagnostics [2024/10/16 13:14] (текущий) – [Вывод статистики по белым адресам] elena.krasnobryzh
Строка 1: Строка 1:
-====== 4 Описание статистики NAT ======+====== Описание статистики NAT ====== 
 +{{indexmenu_n>4}} 
 +Вывод статистики NAT возможен в stat_log и через fdpi_ctrl.\\ 
 +Вывод информации по очередям возможно сделать dump NAT профиля через fdpi_cli. 
 + 
 + 
 +===== Вывод статистики в fastdpi_stat.log ===== 
 +Задается с помощью параметра ''dbg_log_mask'' в /etc/dpi/fastdpi.conf. \\ 
 +Для применения требуется релоад сервиса: service fastdpi reload 
 +**Пример:** \\ 
 +dbg_log_mask=0x2000000  
 + 
 +0x40000   - вывод в alert лог детализации инициализации NAT (профили, белые адреса и прочее) \\ 
 +0x100000  - вывод статистики по блокам белых адресов (если задано 0x2000000) \\ 
 +0x2000000 - вывод статистики по NAT. 
 + 
 + 
 + 
 +==== Общее для всех профилей ==== 
 +<code> 
 +[STAT    ][2021/12/22-17:33:17:513859] NAT statistics : itrnsl=0, iprof=2, profile 'cgnat', nttype=0, ref_cnt=1, cidr=94.140.198.84/30 
 +[STAT    ][2021/12/22-17:33:17:513869] NAT statistics : itrnsl=1, iprof=3, profile 'nat1_1', nttype=1, ref_cnt=1, cidr=16.35.121.0/24 
 + 
 +    itrnsl  - внутренний индекс преобразователя серый <--> белый профиля. 
 +    iprof   - внутренний индекс профиля 
 +    profile - имя профиля 
 +    nttype тип профиля (0 - cgnat, 1 - 1:1) 
 +    ref_cnt - счетчик ссылок использования преобразователя профилями  
 +    (Профили могут использовать один набор бесклассовых IP сетей, но разное количество ограничений на сессии) 
 +    cidr    - список бесклассовых белых адресов профиля  
 +</code> 
 + 
 +==== Профиль CG-NAT ====  
 +<code> 
 +[STAT    ][2021/12/22-17:33:19:252622] NAT statistics : itrnsl=0, iprof=2, profile 'cgnat', nttype=0, ref_cnt=1, cidr=94.140.198.84/30 
 +        k=0, itrnsld=0, cidr=94.140.198.84/30 
 +                total  TCP : 30/20/0/7/17/ 0/0/0 50/20/0/50/0 5516/8/121 
 +                actual TCP : 0/0/0/0/0 0/0/0 0/0/0/0/0 0/0/0 
 +                total  UDP : 13/4/0/13/1/ 0/0/0 17/4/11/17/0 28/1/3 
 +                actual UDP : 0/0/0/0/0 0/0/0 0/0/0/0/0 0/0/0 
 +                total GRE : 0/0 
 +</code> 
 + 
 +==== Информация по преобразователю данных ==== 
 +<code> 
 +        k=0, itrnsld=0, cidr=94.140.198.84/30 
 +    k       - номер itrnsld 
 +    itrnsld - внутренний индекс данных преобразователя - того, кто обслуживает бесклассовые IP сети 
 +    cidr    - конкретная бесклассовая IP сеть 
 + 
 +    total   - суммарная статистика 
 +    actual  - статистика изменений счетчиков за период вывода статистики (параметр delta_alarm, default 15 секунд)  
 + 
 +    total  TCP : 30/20/0/7/17 0/0/0 50/20/0/50/0 5516/8/121 
 +</code> 
 + 
 +**Четыре группы:** \\ 
 +1 группа -- операции с портами белых адресов 
 +<code> 
 +30/20/0/7/17: 
 + 
 +30 - выделение нового белого порта  
 +20 - повторное использование белого порта  
 +0  - ошибки получения нового белого порта 
 +7  - выполняет декремент количества сессий абонента по освобождению flow 
 +17 - выполняет декремент количества сессий абонента по повторному использованию белого порта 
 +</code> 
 + 
 +2 группа -- общая статистика 
 +<code> 
 +0/0/0: 
 + 
 +0 - раcсчитали CRC по IP при обращении для выделения белого адреса. Должно быть == 0  
 +0 - превышение количества сессий для абонентов 
 +0 - разные белые адреса в flow и преобразователях - Должно быть == 0 
 +</code> 
 + 
 +3 группа -- статистика по кэшу //серый --> белый// 
 +<code> 
 +50/20/0/50/0: 
 + 
 +50 - добавлено записей в кэш 
 +20 - удалено записей из кэша 
 +0  - найдено записей в кэше при выделении нового белого порта 
 +50 - не найдено по серому белый адрес 
 +0  - ошибки добавления в кэш 
 +</code> 
 + 
 +4 группа -- статистика преобразования //белый --> серый// (//inet-->subs//
 +<code> 
 +5516/8/121:  
 + 
 +5516 - успешно проведена трансляция белый --> серый 
 +8    - порт не попадает в выделенный диапазон белых портов 
 +121  - не найдена трансляция белый --> серый 
 +</code> 
 + 
 +Для TCP/UDP и total/actual статистика одинаковая. 
 + 
 +Для GRE - это GRE по умолчанию (когда не смогли в туннельном протоколе "точка-точка" найти сессию). На белый адрес может быть создана только одна такая сессия. 
 +<code> 
 +total GRE : 0/0 
 +0 - использован адрес  
 +0 - количество попыток создания сессий на уже занятый белый адрес 
 +</code> 
 + 
 +==== Профиль 1:1 ==== 
 +<code> 
 +[STAT    ][2021/12/22-17:17:28:749622] NAT statistics : itrnsl=1, iprof=3, profile 'nat1_1', nttype=1, ref_cnt=1, cidr=16.35.121.0/24 
 +        k=0, itrnsld=1, cidr=16.35.121.0/24 
 +                total 256/256/0/0/0/0 0/0 
 +</code> 
 + 
 +Статистика 2 группы: \\ 
 +1 группа - 256/256/0/0/0/0 \\ 
 +2 группа - 0/0 
 + 
 +**Пример:** \\ 
 +dbg_log_mask=0x2100000  
 + 
 +==== Вывод статистики по белым адресам ==== 
 +<code> 
 +[STAT    ][2021/12/22-21:14:48:385991] NAT statistics : itrnsl=0, iprof=2, profile 'cgnat', nttype=0, ref_cnt=1, cidr=94.140.198.84/30 
 +        k=0, itrnsld=0, cidr=94.140.198.84/30 
 +                total  TCP : 26/4/0/4/2/ 0/0/0 30/4/0/30/0 3045/1/36 
 +                actual TCP : 0/0/0/0/0 0/0/0 0/0/0/0/0 0/0/0 
 +                        TCP whiteblck ip_mask=0x0, nwhaddr=2 
 +                                whip=94.140.198.84 : sb=64, lsb=64, nb=1008, whpa=64512, whpb=0, whpf=64512, awhb=4, fwhb=1004, puwhb=0.40% 
 +                                        thr=0, ublock=1, uport=0 
 +                                        thr=1, ublock=1, uport=0 
 +                                        thr=2, ublock=1, uport=0 
 +                                        thr=3, ublock=1, uport=0 
 +                                whip=94.140.198.86 : sb=64, lsb=64, nb=1008, whpa=64512, whpb=26, whpf=64486, awhb=4, fwhb=1004, puwhb=0.40% 
 +                                        thr=0, ublock=1, uport=0 
 +                                        thr=1, ublock=1, uport=0 
 +                                        thr=2, ublock=1, uport=13 
 +                                        thr=3, ublock=1, uport=13 
 +</code> 
 +<code> 
 +TCP whiteblck ip_mask=0x0, nwhaddr=2 : 
 + 
 +    ip_mask - маска адресов  
 +    nwhaddr - количество белых адресов, которые попадают под маску 
 +</code> 
 +<code> 
 +whip=94.140.198.84 : sb=64 ( 64 ), nb=1008, whpa=64512, whpb=0, whpf=64512, awhb=4, fwhb=1004, puwhb=0.40% 
 + 
 +    whip=94.140.198.84 - белый адрес 
 +    sb=64       - размер блока портов 
 +    lsb=64      - размер последнего блока 
 +    nb=1008     - количество блоков портов 
 +    whpa=64512  - всего портов 
 +    whpb=0      - занято портов 
 +    whpf=64512  - свободно портов 
 +    awhb=4      - выдано блоков 
 +    fwhb=1004   - свободно блоков 
 +    puwhb=0.40% - процент занятости блоков 
 +</code> 
 + 
 +=== Добавлено в версии 12.1.0 === 
 +<code> 
 +whp_salfs - сколько портов в 'короткой' очереди 
 +whp_lalfs - сколько портов в 'длинной' очереди 
 +whp_ruse  - сколько портов может быть использовано повторно 
 +whp_ruse_salfs - сколько портов может быть использовано повторно из 'короткой' очереди 
 +whp_ruse_lalfs - сколько портов может быть использовано повторно из 'длинной' очереди 
 +whp_dthr - сколько портов созданы в одном рабочем потоке, но использовались в другом 
 +whp_dthr_salfs - сколько портов созданы в одном рабочем потоке, но использовались в другом из 'короткой' очереди 
 +whp_dthr_lalfs - сколько портов созданы в одном рабочем потоке, но использовались в другом из 'длинной' очереди 
 +</code> 
 + 
 +В рамках белого адреса видно распределение захваченных портов/блоков по рабочим потокам 
 +<code> 
 +thr=0, ublock=1, uport=0 
 +thr=0    - номер рабочего потока 
 +ublock=1 - использовано блоков белых портов  
 +uport=0  - использовано белых портов 
 +</code> 
 +<code> 
 +thr_salfs - сколько портов в 'короткой' очереди 
 +thr_lalfs - сколько портов в 'длинной' очереди 
 +thr_ruse  - сколько портов может быть использовано повторно 
 +thr_ruse_salfs - сколько портов может быть использовано повторно из 'короткой' очереди 
 +thr_ruse_lalfs - сколько портов может быть использовано повторно из 'длинной' очереди 
 +thr_dthr - сколько портов созданы в одном рабочем потоке, но использовались в другом 
 +thr_dthr_salfs - сколько портов созданы в одном рабочем потоке, но использовались в другом из 'короткой' очереди 
 +thr_dthr_lalfs - сколько портов созданы в одном рабочем потоке, но использовались в другом из 'длинной' очереди 
 +</code> 
 + 
 +Формат вывода сохранился 
 +<code> 
 +fdpi_ctrl list status --service 11 --ip 192.168.4.20 
 +Autodetected fastdpi params : dev='em1', port=29001 
 +connecting 94.140.198.68:29001 ... 
 + 
 +================================ 
 +192.168.4.20    crcip=0xd649d853        nttype=0        profile='cgnat' itrnsl=0 itrnsld=0       whiteip=94.140.198.86   sess_tcp=127    sess_udp=108   indmtd=4 
 +</code> 
 + 
 +**Вывод:** 
 +<code> 
 +192.168.4.20 - серый IP 
 +crcip=0xd649d853 - CRC серого IP 
 +nttype=0        - тип NAT: 0 - cgnat, 1 - 1:1 
 +profile='cgnat' - имя профиля 
 +itrnsl=0 - внутренний индекс преобразователя серый <--> белый профиля. 
 +itrnsld=0        - внутренний индекс данных преобразователя  
 +whiteip=94.140.198.86 - белый адрес 
 +sess_tcp=127    - количество сессий TCP 
 +sess_udp=108    - количество сессий UDP 
 +indmtd=4              - внутренний индекс данных абонента (метаданных абонента) 
 + 
 +fdpi_ctrl list status --service 11 --ip 192.168.4.20 --outformat=json 
 +fdpi_ctrl list status --service 11 --ip 192.168.4.20 --outformat=json  | jq . 
 + 
 +fdpi_ctrl list all status --service 11 
 +fdpi_ctrl list all status --service 11 --outformat=json 
 +</code> 
 +Формат аналогично 
 + 
 +===== Легенда команды просмотра статистики NAT профиля через fdpi_ctrl ===== 
 +Команда: 
 +<code> 
 +fdpi_ctrl list status --service 11 --profile.name cgnat 
 +</code> 
 +Вывод: 
 +<code> 
 +nttype=0        profile='test_nat_cgnat'        itrnsl=0        nitrnsld=1 
 +        itrnsld=0       cidr=94.140.198.84/30 
 +                proto=TCP       ip_mask=0x0     nwhaddr=2 
 +                        proto=TCP       ip_mask=0x0     whip=94.140.198.84      sb=64   lsb=64  nb=1008 whpa=64512      whpb=0  whpf=64512      awhb=4  fwhb=1004       puwhb=0.40%     whp_salfs=0     whp_lalfs=0     whp_ruse=0      whp_ruse_salfs=0        whp_ruse_lalfs=0        whp_dthr=0      whp_dthr_salfs=0        whp_dthr_lalfs=0 
 +                                nthr=0  ublock=1        uport=0 thr_salfs=0     thr_lalfs=0     thr_ruse=0      thr_ruse_salfs=0        thr_ruse_lalfs=0        thr_dthr=0      thr_dthr_salfs=0        thr_dthr_lalfs=0 
 +                                nthr=1  ublock=1        uport=0 thr_salfs=0     thr_lalfs=0     thr_ruse=0      thr_ruse_salfs=0        thr_ruse_lalfs=0        thr_dthr=0      thr_dthr_salfs=0        thr_dthr_lalfs=0 
 +</code> 
 +Легенда: 
 +<code> 
 +nttype         - тип профиля (0 - cgnat, 1 - 1:1) 
 +profile        - имя профиля 
 +itrnsl         - внутренний индекс преобразователя серый<-->белый профиля 
 +nitrnsld       - количество данных преобразователей профиля (количество бесклассовых IP сетей) 
 +itrnsld        - внутренний индекс данных преобразователя - того, кто обслуживает бесклассовые IP сетеи 
 +cidr           - конкретная бесклассовая IP сеть 
 +proto          - протокол TCP/UDP 
 +ip_mask        - маска адресов 
 +nwhaddr        - количество белых адресов, которые попадают под маску или под CRC (зависит от параметра rx_dispatcher) 
 +whip           - белый адрес 
 +sb             - размер блока выделяемых портов. 
 +lsb            - размер последнего блока 
 +nb             - количество блоков портов 
 +whpa           - всего портов 
 +whpb           - занято портов 
 +whpf           - свободно портов 
 +awhb           - выдано блоков 
 +fwhb           - свободно блоков 
 +puwhb          - процент занятости блоков 
 +whp_salfs      - находится в 'короткой' очереди 
 +whp_lalfs      - находится в 'длинной' очереди 
 +whp_ruse       - может быть использовано 
 +whp_ruse_salfs - может быть использовано в 'короткой' очереди 
 +whp_ruse_lalfs - может быть использовано в 'длинной' очереди 
 +whp_dthr       - количество элементов ithr_owner != ithr по очередям 
 +whp_dthr_salfs - количество элементов ithr_owner != ithr по 'short' очереди 
 +whp_dthr_lalfs - количество элементов ithr_owner != ithr по 'long' очереди 
 +</code> 
 + 
 +<note>Описание параметра ''rx_dispatcher'' [[dpi:opt_cgnat:сgnat_settings#параметры_и_возможные_значения|по ссылке]]</note> 
 + 
 +===== Легенда команды просмотра статистики dump NAT профиля ===== 
 +Команда: 
 +<code> 
 +fdpi_cli nat dump whaddr queue test_nat_cgnat 
 +</code> 
 +Вывод: 
 +<code> 
 +profile='test_nat_cgnat' itrnsl=0 
 +        cidr='94.140.198.84/30' itrnsld=0 
 +                whip=94.140.198.86 
 +                        proto=TCP 
 +                                entryp : 
 +                                        ithr=0, ihead=0, itail=0 
 +                                        ithr=1, ihead=0, itail=0 
 +                                        ithr=2, ihead=133, itail=265 
 +                                        ithr=3, ihead=193, itail=327 
 +                                data : 
 +                                        sind=129, inext=257, iprev=258, whport=1152, graddr=192.168.4.20:60637 tml='2023/03/06 16:28:09, -00:00:10.657 (7472516905147512 ticks)', lifetime=120, canreuse=0, ialf=1, imtd=516, iown=2, ilst=2, subproto=0, decr_sess=0, ind_gcache_slice=1, igcache=40 
 +                                        sind=130, inext=151, iprev=148, whport=1153, graddr=192.168.4.20:52553 tml='2023/03/06 16:27:50, -00:00:29.455 (7472459405058624 ticks)', lifetime=30, canreuse=0, ialf=0, imtd=516, iown=2, ilst=2, subproto=0, decr_sess=0, ind_gcache_slice=1, igcache=1 
 +</code> 
 +Легенда: 
 +<code> 
 +profile        - имя профиля 
 +itrnsl         - внутренний индекс преобразователя серый <--> белый профиля 
 + 
 +cidr           - конкретная бесклассовая IP сеть 
 +itrnsld        - внутренний индекс данных преобразователя - того, кто обслуживает бесклассовую IP сеть 
 + 
 +whip           - белый адрес 
 +proto          - протокол TCP/UDP 
 +</code> 
 +Реализация очереди используемых портов для белых адресов использует один массив - назовем его WHP, размером 0xffff. На его основе построен список используемых портов для рабочего потока. 
 +Индекс 0 - используется как заглушка (пусто). 
 + 
 +Очереди потоков нельзя вывести в виде списка, так как в процессе происходит перемещение записей в очереди, из-за чего вывод может зациклиться. Поэтому массив WHP выводится as is для занятых записей. 
 +<code> 
 +entryp : задает точки входа в список белых портов рабочего потока 
 + ithr   - номер рабочего потока 
 + ihead  - вершина списка 
 + itail  - последний элемент списка 
 +</code> 
 +<code> 
 +data : данные массива белых портов WHP (выводятся только занятые записи) 
 + 
 + sind - индекс записи 
 + inext            - индекс след. записи 
 + iprev            - индекс пред. записи 
 +  
 + whport           - белый порт 
 + graddr           - серый адрес, которому назначен белый адрес 
 + tml              - время последнего обращения к записи  
 + lifetime         - тайм-аут в секундах время жизни записи (зависит от параметров для short/long очереди) 
 + canreuse         - признак, что запись может быть использована повторно 
 + ialf             - номер очереди обработки: 
 + en_nalfs_shrt = 0,  # очередь с коротким временем жизни 
 + en_nalfs_long = 1,  # долгоиграющая очередь  
 + indmtd           - внутренний индекс данных абонента (метаданных абонента) 
 + iown             - поток-владелец, который породил запись.  
 + ilst             - номер потока, который последний обращался к записи 
 + subproto         - для какого протокола выделена запись из UDP 
 + typedef enum en_nat_borrw_udp: u_int8_t 
 +
 + ennatborwu_ORG     = 0, # UDP/TCP 
 + ennatborwu_DFLTGRE = 1, # общий GRE  
 + ennatborwu_MAX     = 2, # ICMP 
 + } en_nat_borrw_udp_t; 
 +     
 + decr_sess        - признак, что произошел декремент счетчика использования порта на сером адресе. 
 + ind_gcache_slice - индекс кэше-slice перекодировки 'серый --> белый' 
 + igcache          - индекс в соответствующем кэше-slice перекодировки 'серый --> белый'  
 +</code> 
 + 
 +===== Мониторинг свободных/занятых портов на белых адресах ===== 
 + 
 +Превентивный мониторинг позволит избежать проблем нехватки свободных портов и соответсвенно невозможности создания новый сессий, 
 +выделив дополнительные блоки белых адресов или уменьшив лимиты выделения портов при исчерпании ресурсов в текущем пуле. 
 + 
 +**свободно портов на белом адресе** = whpf (не распределены) + whp_ruse (готовы к переиспользованию)\\ 
 +**занято портов на белом адресе** = whpb (распределены) - whp_ruse (готовы к переиспользованию)