Мониторинг сетевых подключений ЕдиногоАгента
Мониторинг сетевых подключений ЕдиногоАгента
ЕдиныйАгент версии 1.337+
Мониторинг сетевых подключений ЕдиногоАгента собирает данные о сетевых потоках через регулярные интервалы с помощью своего сетевого модуля или NetTracer и сохраняет их.
Каждый поток описывает трафик между двумя конечными точками:
- Серверная конечная точка, идентифицируемая IP-адресом и портом
- Клиентская конечная точка, идентифицируемая только IP-адресом
В отличие от сетевых метрик, которые агрегируют данные о подключениях по процессам, мониторинг сетевых подключений ЕдиныйАгент сохраняет детали отдельных подключений — включая адреса источника и назначения, порты, количество пакетов и RTT.
Собранные данные хранятся как общие события в бакете default_network_flows. Эти события не запускают проблемы ИИ, но могут использоваться для дополнительного анализа.
Поддерживаемые платформы
- Linux
- Windows
- AIX
Используемый сетевой модуль зависит от платформы: компонент, собирающий сетевые данные, поддерживает Linux, Windows и AIX, тогда как NetTracer работает только на Linux и оптимизирован для рабочих нагрузок контейнеров.
Настройки
Чтобы настроить сбор сетевых потоков, перейдите в Настройки > Сбор и захват > Инфраструктура > Мониторинг сетевых подключений и включите Включить мониторинг сетевых подключений ЕдиныйАгент.
Параметры конфигурации включают:
IP-фильтр
IP-фильтр управляет тем, какие подключения включаются на основе удалённого IP-адреса.
- Все (по умолчанию): сообщаются все подключения.
- Только частный трафик: сообщаются только подключения из частного адресного пространства (IPv4: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16; IPv6: fd00::/8).
- Только публичный трафик: сообщаются только подключения из глобально маршрутизируемых адресов.
- Пользовательское включение: сообщаются только подключения из перечисленных адресов. Укажите адреса в нотации CIDR через запятую, например: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
- Пользовательское исключение: сообщаются все подключения, кроме тех, что из перечисленных адресов. Укажите адреса в нотации CIDR через запятую, например: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
Сообщаемые подключения
Настройка Сообщаемые подключения определяет, какие подключения включаются на основе их характеристик.
- Все: сообщаются все подключения.
- Критические подключения (по умолчанию): сообщаются только новые подключения с тайм-аутом сессии и существующие подключения, которые были сброшены.
- Пользовательские: сообщаются только подключения, превышающие указанные пороги. Вы можете настроить пороги для переданных байтов, связности (новые сессии, сброшенные сессии, сессии с тайм-аутом), повторных передач и RTT.
Если вы не видите ожидаемых данных о сетевых потоках, убедитесь, что настройка Сообщаемые подключения включает типы подключений, которые вы хотите отслеживать.
Агрегация
За интервал агрегации несколько сессий между одними и теми же конечными точками объединяются в одну запись потока. Например, при интервале 1 минута 10 подключений от одного клиента к одному и тому же IP-адресу и порту сервера создают одну запись потока с network_flow.tcp.sessions.new, равным 10. Количество пакетов суммируется, а время кругового пути (RTT) усредняется по интервалу.
- Интервал агрегации [мин.]: как часто отправляются записи сетевых потоков. По умолчанию: 1 минута. Увеличение интервала (например, до 5 минут) уменьшает количество отправляемых записей, но также задерживает отчётность.
- Ограничение скорости: максимальное количество записей потоков, отправляемых за интервал агрегации. По умолчанию: 100. Увеличение ограничения скорости на загруженных серверах улучшает видимость, но принимает больше событий.
Запрос сетевых потоков
Вы можете изучать данные сетевых потоков с помощью DQL в Notebooks и Дашбордах. Все сетевые потоки, собранные ЕдиныйАгент, имеют один и тот же идентификатор источника конвейера.
Следующий пример извлекает все записи сетевых потоков:
fetch events, bucket:{"default_network_flows"}
Чтобы отфильтровать по хосту, добавьте фильтр хоста:
fetch events, bucket:{"default_network_flows"} | filter dt.smartscape.host == toSmartscapeId("<host-entity-id>")
Замените <host-entity-id> на идентификатор сущности хоста, который вы хотите проанализировать.
Следующий пример извлекает топовые хосты по общему количеству полученных пакетов:
fetch events, bucket:{"default_network_flows"}
| summarize total_packets = sum(network_flow.packets.rx), by: {dt.smartscape.host}
| sort total_packets desc
| limit 10
Чтобы ранжировать IP-адреса источников по объёму исходящего трафика:
fetch events, bucket:{"default_network_flows"} | summarize bytes_tx = sum(network_flow.bytes.tx), by: {network_flow.source.address} | sort bytes_tx desc | limit 25
Чтобы выявить самые загруженные пары источник-назначение по количеству пакетов:
fetch events, bucket:{"default_network_flows"} | summarize total_packets = sum(network_flow.packets.rx), by:{network_flow.source.address,network_flow.destination.address} | sort total_packets desc | limit 50
Чтобы найти потоки с наибольшим средним временем кругового пути:
fetch events, bucket:{"default_network_flows"} | summarize avg_rtt = avg(network_flow.tcp.rtt) , by: {network_flow.source.address, network_flow.destination.address} | filter isNotNull(avg_rtt) | sort avg_rtt desc | limit 50
Чтобы увидеть, какие порты назначения несут больше всего потоков:
fetch events, bucket:{"default_network_flows"} | summarize flows = count() , by: network_flow.destination.port | sort flows desc | limit 20
Чтобы сузить потоки, в которых произошли тайм-ауты или сбросы сессий:
fetch events, bucket:{"default_network_flows"} | filter network_flow.tcp.sessions.timeout > 0 or network_flow.tcp.sessions.reset > 0
Чтобы выявить подключения с наибольшим коэффициентом повторных передач:
fetch events, bucket:{"default_network_flows"} | summarize { retrans_rx = sum(network_flow.packets.retransmitted.rx), retrans_tx = sum(network_flow.packets.retransmitted.tx),
total_rx = sum(network_flow.packets.rx), total_tx = sum(network_flow.packets.tx)}, by: {network_flow.source.address, network_flow.destination.address}| filterOut total_rx == 0 or total_tx == 0 | fieldsAdd perc_rx = retrans_rx / total_rx, perc_tx = retrans_tx / total_tx,
perc_retrans = (retrans_rx + retrans_tx) / (total_rx + total_tx)| sort perc_retrans desc
Чтобы ранжировать пары источник-назначение по количеству установленных новых TCP-подключений:
fetch events, bucket:{"default_network_flows"} | summarize new_connections = sum(network_flow.tcp.sessions.new), by:{network_flow.source.address,network_flow.destination.address} | sort new_connections desc | limit 50
Поля сетевого потока
Поля, относящиеся к сетевым потокам.
| Атрибут | Тип | Описание | Примеры |
|---|---|---|---|
network_flow.bytes.rx
|
long | Отображаемое имя: Получено байтов. Количество байтов (октетов), полученных за данный интервал, направление: к процессу. | |
network_flow.bytes.tx
|
long | Отображаемое имя: Передано байтов. Количество байтов (октетов), переданных за данный интервал, направление: от процесса. | |
network_flow.destination.address
|
ipAddress | Отображаемое имя: Адрес назначения. IP-адрес назначения. По соглашению назначение означает TCP-сервер (принимающая сторона подключения). | 192.33.1.2; 2001:0db8:85a3:0000:0000:8a2e:0370:7334 |
network_flow.destination.port
|
long | Отображаемое имя: Порт назначения. Порт назначения потока. По соглашению порт назначения означает TCP-сервер (принимающая сторона подключения). | 22; 8080 |
network_flow.network.transport
|
string | Отображаемое имя: Протокол сетевого транспорта. Протокол. | TCP; other; UDP |
network_flow.network.type
|
string | Отображаемое имя: Тип сети. Версия IP-протокола. | IPv4 |
network_flow.packets.retransmitted.base.rx
|
long | Отображаемое имя: База повторных передач пакетов (rx). Количество полученных пакетов, используемое как база для коэффициента повторных передач, направление: к процессу. | |
network_flow.packets.retransmitted.base.tx
|
long | Отображаемое имя: База повторных передач пакетов (tx). Количество отправленных пакетов, используемое как база для коэффициента повторных передач, направление: от процесса. | |
network_flow.packets.retransmitted.rx
|
long | Отображаемое имя: Повторно переданные пакеты (rx). Количество повторно переданных пакетов за данный интервал, направление: к процессу. | |
network_flow.packets.retransmitted.tx
|
long | Отображаемое имя: Повторно переданные пакеты (tx). Количество повторно переданных пакетов за данный интервал, направление: от процесса. | |
network_flow.packets.rx
|
long | Отображаемое имя: Получено пакетов. Количество пакетов, полученных за данный интервал, направление: к процессу. | |
network_flow.packets.tx
|
long | Отображаемое имя: Передано пакетов. Количество пакетов, переданных за данный интервал, направление: от процесса. | |
network_flow.process_is_server
|
boolean | Отображаемое имя: Процесс является сервером. Указывает, действует ли сущность (процесс) как сервер в сетевом потоке. | true; false |
network_flow.source.address
|
ipAddress | Отображаемое имя: Адрес источника. IP-адрес источника. По соглашению источник означает TCP-клиент (инициатор подключения). | 192.33.1.2; 2001:0db8:85a3:0000:0000:8a2e:0370:7334 |
network_flow.tcp.rtt
|
duration | Отображаемое имя: TCP RTT. Среднее значение RTT [мс]. | |
network_flow.tcp.rtt.ack
|
duration | Отображаемое имя: TCP RTT ack. Среднее значение RTT ack [мс]. | |
network_flow.tcp.sessions.new
|
long | Отображаемое имя: Новые TCP-сессии. Количество новых TCP-сессий в потоке. | |
network_flow.tcp.sessions.reset
|
long | Отображаемое имя: Сброшенные TCP-сессии. Количество сброшенных (отклонённых) TCP-сессий в потоке. | |
network_flow.tcp.sessions.timeout
|
long | Отображаемое имя: TCP-сессии с тайм-аутом. Количество TCP-сессий с тайм-аутом в потоке. |
network_flow.network.type имеет следующий список общеизвестных значений. Если применимо одно из них, должно использоваться соответствующее значение, в противном случае может использоваться пользовательское значение.
| Значение | Описание | Отображаемое имя |
|---|---|---|
IPV4
|
ipv4 | IPv4 |
IPV6
|
ipv6 | IPv6 |
Метрики связности (новые сессии, сброс, тайм-аут) в настоящее время сообщаются только для входящих сессий на порт сервера.
Связь между двумя процессами на одном хосте или между двумя контейнерами на одной ноде может создавать две отдельные записи.