Мониторинг сетевых подключений ЕдиногоАгента

Материал из Документация Ключ-АСТРОМ

Мониторинг сетевых подключений ЕдиногоАгента

ЕдиныйАгент версии 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

Метрики связности (новые сессии, сброс, тайм-аут) в настоящее время сообщаются только для входящих сессий на порт сервера.

Связь между двумя процессами на одном хосте или между двумя контейнерами на одной ноде может создавать две отдельные записи.