Просмотр Исходного

{toc:maxLevel=3}

{tip}*Время выполнения инструкции*: 10-20 минут на первичную проверку, далее - зависит от сложности проблемы{tip}


h1. Настройка

В большинстве случаев, для сохранения статистики достаточно стандартных настроек NAS и биллинга. Проверьте настройки:
# Должны быть включены опции [collector|Описание работы служб сбора статистики]:
#* *Включить сбор статистики* - служба сбора статистики.
#* *Отправлять агрегированную статистику на Биллинг* - в биллинге появится возможность подсчитывать объём трафика.
#* *Включить bstatd для детальной статистики (снято с поддержки)* или *Сохранять сырую статистику в формате nfcapd для анализа nfsen* - для сохраниния детализации по посещённым ресурсам.
# Создайте NAS
Биллинг принимает статистику только c IP-адресов внесённых в фаервол. Можно добавить адреса несколькими способами:
#* Адреса автоматически добавляются при создании [NAS-серверов интернет|CarbonBilling:Интеграция оборудования интернет].
#* Можно добавить "пустой" NAS по инструкции [CarbonBilling:Пользовательская схема], укажите нужный IP.
#* Добавьте разрешения в фаервол через в ручную с помощью [хука|Дополнительные настройки. hooks. Хуки. Свои правила в firewall]
{code}
#!/bin/bash
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
iptables -I nas_clients -s 10.0.1.7/32 -p udp -m udp --dport 9996 -j ACCEPT
iptables -I nas_clients -s 10.0.2.200/32 -p udp -m udp --dport 9996 -j ACCEPT
fi
exit 0
{code}
# Настройте netflow на NAS
В каждой [cтандартной схеме|Стандартные схемы] описана настройка netflow. Укажите IP адрес биллинга и порт(по умолчанию 9996). Загрузите конфигурацию на оборудование. Дополнительно можете ознакомиться:
#* Mikrotik
[Cтатья в официальной документации|https://wiki.mikrotik.com/wiki/Manual:IP/Traffic_Flow].
#* Cisco
Стандартная схема Cisco-ISG - IPoE и PPPoE написана для версии IOS 12. Настройка на версии IOS 15 и выше описана в [заметках|Заметки по схеме. Netflow Cisco].

h1. Проверка netflow-потоков
{note}
Биллинг учитывает и добавляет в расход трафик только по абонентам с *активными* услугами трафика. Исключение, опиция: "Деактивировать, если текущий баланс превысил лимит".
{note}

Если в [расходе|CarbonBilling:Счетчики услуг. Вкладка "Расход".] абонента трафик не появляется, проверьте следующее:
# В первую очередь, убедитесь что коллектор включен:
{code:title=Команда}grep nf_collector.enabled\' /app/collector/cfg/config{code}
{code:title=Вывод}app['nf_collector.enabled']='1'{code}
В примере - коллеткор включен.
Если будет "0", значит коллектор выключен. Включите его [в настройках коллектора|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=126484488#Описаниеработыслужбсборастатистики-Настройкасборастатистики], опция "*Включить сбор статистики*"

# Сгенерируйте трафик на хосте абонента. Просмотрите с помощью *tcpdump* с каких IP-адресов приходит netflow.
#* NAS может отсылать IP пакеты с разных локальных IP адресов. Проверьте, что netflow поток приходит с верного адреса.
{code:title=Команда для проверки}
tcpdump -pnni any udp port 9996 -c 100 2>/dev/null| cut -d ' ' -f 3 | sort -u
{code}
{code:title=Результат выполнения команды}
...................
10.0.0.10.9996
10.0.0.20.9996
{code}
В примере на биллинг netflow поток приходит с двух NAS: 10.0.0.10.9996 и 10.0.0.20.9996 порт источника 9996.
#* Убедитесь, что по всем этим адреса в биллинге заведены [NAS интернет|CarbonBilling:Интеграция оборудования интернет] - биллинг принимает netflow только с известных ему адресов маршрутизаторов.
# Если IP NAS корректный, проверьте IP адреса на сервере биллинга. Адрес назначения netflow потока должен быть на одном из интерфейсов.
#* В предидущем примере поток пришел на адрес:
{code}
10.0.0.1
{code}
#* Посмотрите список IP-адресов биллинга, на который он будет принимать netflow:
{code:title=Команда}
ip -4 a | grep inet | grep -vE '169.254|127.0.0.1|10.128.0.1' | sed 's/ inet*//g; s/\/.*//g'
{code}
{code:title=Пример вывода}
10.90.185.127
10.0.0.1
{code}
# Убедитесь что биллинг слушает порт netflow(по умолчанию 9996).
{code:title=Команда}
netstat -apn | grep 9996
{code}
{code:title=Вывод}
udp 0 0 127.0.0.1:56761 127.0.0.1:9996 ESTABLISHED 6716/sflowtool
udp 0 0 0.0.0.0:9996 0.0.0.0:* 6640/nfcapd
{code}
# Если все адреса есть и порт доступен, проверьте что в netflow есть ненулевые данные в трафике. Это удобней всего делать с помощью *tshark*.
{code:title=Установите wireshark}
yum install -y wireshark
{code}
Аргументы команды tshar:
{code}
i eth0 - интерфейс биллинга, на который приходит netflow
port 9996 - порт netflow
host 10.0.0.10 - IP адрес маршрутизатора
{code}
{code:title=Запустите tshark}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 1 | egrep 'Packets|Octets' | sort | uniq
{code}
Вывод должен быть приблизительно таким:
{code}
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
1 packet captured
Octets: 101
Octets: 126
Octets: 1260
Packets: 11
Packets: 2
Packets: 6
{code}
Должны быть ненулевые *Octets*
# Проверьте, что был захвачен как входящий, так и исходящий трафик.
{code}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 100 | grep -E 'Addr|Octets'
{code}
В примере вывода команды видно, что от адреса 91.211.93.128 к адресу 10.0.0.194 передано 349 Octets(байт).
{code}
SrcAddr: 91.211.93.128 (91.211.93.128)
DstAddr: 10.0.0.194 (10.0.0.194)
Octets: 349
{code}
# Если *Octets* ненулевые, убедитесь что трафик проходит IPTABLES по правилу для IP Вашего NAS:
{code}
iptables -nvL nas_clients | grep 9996
{code}
# Если трафик проходит IPTABLES, [повысьте уровень логирования коллектора netflow|CarbonBilling:Описание работы служб сбора статистики] до уровня DEBUG в настройках коллектора и посмотрите есть ли данные в логе [nf_collector|CarbonBilling:Collector], убедитесь что он отсылает их в /app/collector/var/dump и /app/collector/var/stat/raw
# Если в /app/collector/var/dump файлов нет, а в /app/collector/var/stat/raw что-то есть, проверьте лог /app/collector/var/log/nf_collector.log - там должны быть записи такого вида:
{code}Mon Apr 13 15:20:05 2020 [8919] user_data_calc(393): id: 1410 ip=10.100.1.125{code}
Где ID: 1410 - это ID [учётной записи|CarbonBilling:Учетная запись. Создание и изменение.], а 10.100.1.125 - назначенный ей IP-адрес.
# Если трафик прошел фаервол, но /app/collector/var/log/nf_collector.log пустой, проверьте что коллектор настроен на обработку нужного типа Netflow.
Посмотреть тип Netflow, который приходит с NAS можно с помощью tshark, 10.20.30.40 - это IP NAS, укажите Ваш:
{code}tshark -nnVi any port 9996 and host 10.20.30.40 -c 1 2>&1 | grep -E 'Cisco NetFlow/IPFIX' -A1{code}
Для разных типов Netflow должны быть следующие [настойки сохранения сырой статистики|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=126484488#Описаниеработыслужбсборастатистики-Настойкисохранениясыройстатистики]
#* *Version: 5*: {color:red}Отключен{color} "Использовать NAT в Netflow v9", {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 9*: {color:green}Включен{color} "Использовать NAT в Netflow v9", {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 10 (IPFIX)*: {color:green}Включен{color} "Использовать NAT в Netflow v9" {color:green}Включен{color} "Обрабатывать дополнительные параметры IPFIX"
# Если все записи только по адресу 0.0.0.0 - возможны два варианта:
#* Проверьте что на тестовом хосте настроен именно тот IP что назначен в учетной записи
#* Проверьте файл */app/collector/mnt/var/lib/collector/users.csv*: есть ли там IP-адреса и какие.
Несколько полезных команд которые могут попочь в диагностике этой проблемы:
{code:title=По каким IP приходила информация в nf_collector среди последних 100000 строк}
tail -n 100000 /app/collector/var/log/nf_collector.log | grep 'ip=' | awk '{print $10}' | sort | uniq
{code}
{code:title=Посмотреть есть ли вообще что-то в users.csv и что именно}
ll /app/collector/mnt/var/lib/collector/users.csv && cat /app/collector/mnt/var/lib/collector/users.csv
{code}
{code:title=Посмотреть какие пароли к API коллектора указаны в конфигурационных файлах}
grep collector.psw /app/asr_billing/cfg/config /app/collector/cfg/config
{code}
{code:title=Убедиться что пароли совпадают: вывод должен быть "1"}
grep $(grep collector.psw /app/asr_billing/cfg/config | sed "s/.*=//g; s/'//g") /app/collector/cfg/config -c
{code}
# Если данные отправляются и с IP в учетке и на хосте все хорошо, проверьте что запущен [traf_reporter|CarbonBilling:Collector] и он отсылает данные в биллинг по логу:
{code}
/app/collector/var/log/reporter.log
{code}
# Если все прочие проверки прошли, убедитесь что timestamp в netflow в настоящем времени. Например, ниже приведён вывод снифера с сожержимым пакета, по которому видно что NAS присылает информацию по трафику в прошлом времени:
{code}tshark -nnVi eth0 port 9996 -d udp.port=9996,cflow -c 1 -w testnf9.pcp | egrep 'Cisco NetFlow/IPFIX' -A10
tshark: WARNING: -d requires "==" instead of "=". Option will be treated as "udp.port==9996,cflow"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
1 packet captured
Cisco NetFlow/IPFIX
Version: 9
Count: 20
SysUptime: 689909010
Timestamp: Jan 16, 1970 04:01:51.000000000 +07
CurrentSecs: 1285311
FlowSequence: 6623195
SourceId: 0
FlowSet 1
FlowSet Id: (Data) (256)
FlowSet Length: 1384
{code}
# Если трафик дошел до [traf_reporter|CarbonBilling:Collector], в netfow корректное время, проверьте попал ли трафик в БД */var/db/buff_traf.gdb*
{code}sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762"{code}
{info}Узнать IP в десятичном формате можно в основной БД:
{code}
sqlexec "select uf_ip2string(ip),ip from users where abonent_id=1234"
{code}
Где 1234 - ID абонента (можно посмотреть в адресной строке браузера, открыв карточку абонента)
{info}
# Если в *buff_traf.gdb* есть данные по трафику абонента, проверьте нет ли ошибок обработки:
{code}
sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762 and error_code_id>=1"
{code}
Ошибки обработки трафика описаны в статье "[CarbonBilling:Описание структуры базы buff_traf.gdb]" под заголовком "*Коды ошибок с описанием*"

h3. Что делать если ничего не помогло

В первую очередь, попробуйте еще раз пройти по все шагам. Точно выполняйте инструкции на каждом пункте это важно!
Если указанные в статье действия не помогли, включите [уровень логирования коллектора INFO|CarbonBilling:Описание работы служб сбора статистики] и выполните скрипт диагностики:

{code}
/app/base/usr/local/bin/billing_check.sh &> billing_check.log
{code}

и приложите его к заявке на портале HelpDesk