# Network monitoring

<https://habr.com/ru/companies/ruvds/articles/712536/>

![](/files/8HgztuAcmqsugzbMMr25)

Создание производительных сервисов и систем — основа любого бизнеса. Ежедневно появляются кучи новых технологий, которые обещают дать возможности, позволяющие превзойти ваши бенчмарки производительности. Однако продакшен-среды — это хаотичные системы, мониторинг и поддержка которых требует большой доли ресурсов.

Хотя [Kubernetes](https://dzone.com/articles/how-kubernetes-changed-container-management) при выборе системы управления контейнерами является стандартом «де факто», многим организациям не удаётся её реализовать. Растущие организации в процессе увеличения масштабов своих сервисов ненамеренно вносят в систему усложнения. Критически важно понимать, как настраивать инфраструктуру и как кластеры могут работать и взаимодействовать между собой.

Основная часть инфраструктуры упорядочивается в виде сети систем, обменивающихся данными и разделяющих рабочие нагрузки. Очень удобна возможность визуального наблюдения за соединением систем и выявления влияющих на них факторов. Создание карты сети при помощи эффективного инструмента визуализации и контроля является обязательной задачей для мониторинга и поддержки сервисов.

## Введение в визуальное картографирование сетей

Создание карт сетей — это процесс выявления и каталогизации всех устройств и соединений в сети. Визуальная карта сети — это визуальное представление сети, отображающее устройства и связи между ними. Визуальные карты сетей обеспечивают понимание топологии сети и выявляют потенциальные проблемы или узкие места, что позволяет создавать планы модификации и расширения, способные существенно улучшить процесс устранения проблем, планирования, анализа и мониторинга.

Для картографирования сетей и генерации визуальных карт сетей можно использовать опенсорсные инструменты безопасности наподобие OpenVAS, Nmap и Nessus. Эти инструменты бесплатны, что делает их экономичным решением для организаций, стремящихся повысить безопасность сетей. Кроме того, многие опенсорсные инструменты безопасности имеют активную поддержку сообщества, позволяя пользователям делиться знаниями, советами и рекомендациями по реализации полного потенциала инструмента.

## Преимущества использования визуальных карт сетей

Визуальная карта сети — это эффективный инструмент для планирования и разработки новых сетей, расширения или модернизации имеющихся сетей и анализа сетевых проблем.

Правильная настройка визуальных карт сетей может существенно расширить возможности мониторинга, трекинга и устранения неполадок. Она предоставляет вам чёткую и полную картинку сети, позволяя выявлять потенциальные источники проблем и разрешать и их; также она помогает в мониторинге сетей в реальном времени и заранее уведомляет о любых изменениях или проблемах.

## Знакомство с Caretta и Grafana

[Caretta](https://github.com/groundcover-com/caretta) — это опенсорсный инструмент визуализации и мониторинга сетей, позволяющий просматривать и мониторить сети в реальном времени.

![](/files/cvDyabyyldQfyhRITODH)

[Grafana](https://grafana.com/) — это опенсорсная платформа визуализации и мониторинга данных, позволяющая создавать собственные дэшборды и алерты, а также исследовать и анализировать данные.

![](/files/DLuf6MBAYBWyQ5rSeu9o)

На основе Caretta и Grafana можно создать эффективное решение для понимания сети и управления ею.

### ▍ Как Caretta использует eBPF и Grafana

Предназначение Caretta заключается в том, чтобы помочь в понимании топологии и взаимосвязи между устройствами в распределённых средах. Она предлагает различные возможности, например, выявление устройств, мониторинг в реальном времени, алерты, уведомления и отчётность. Для сбора и публикации своих метрик она использует Victoria Metrics, а результаты её работы можно использовать в любом совместимом с Prometheus дэшборде.

Благодаря обеспечению допусков (toleration) Carreta позволяет принимать типичные аннотации узлов уровня управления. Она собирает информацию сети, например, сведения об устройствах и соединениях, при помощи функциональности ядра [eBPF](https://ebpf.io/) (extended Berkeley Packet Filter), а затем использует платформу Grafana для отображения информации на визуальной карте.

### ▍ Роль Grafana в визуализации карт сетей Caretta

[Grafana](https://dzone.com/articles/-grafana-the-open-observability-platform) спроектирована так, чтобы быть модульным и гибким инструментом, с лёгкостью интегрирующим и принимающим широкий диапазон источников данных и приложений.

Благодаря возможности настройки функций вы можете изменять способ отображения карты сети при помощи дэшборда Grafana. Кроме того, у вас есть широкий выбор из множества опций визуализации для отображения данных в понятном и полезном виде. Grafana критически важна и для демонстрации данных сетей, собранных Caretta, и для предоставления пользователям полной картины сети.

## Использование Caretta и Grafana для создания визуальной карты сети

Чтобы использовать Caretta и Grafana в создании визуальной карты сети, их необходимо установить, внедрить и конфигурировать. Основной объект конфигурирования — это Caretta daemonset.

Для просмотра карты сети необходимо развернуть Caretta daemonset в выбранном кластере, который будет собирать метрики сети в базу данных, а также настроить источник данных Grafana так, чтобы указывал на базу данных Caretta.

### ▍ Обязательные требования для использования Caretta и Grafana

Caretta — современный инструмент, интегрированный с расширенными функциями. Он использует версию ядра [Linux](https://dzone.com/articles/a-little-linux-goes-a-long-way) от 4.16 и выше и [helm chart](https://helm.sh/docs/chart_template_guide/values_files/) для 64-битной системы.

Давайте разберёмся, как установить и сконфигурировать это сочетание инструментов.

### ▍ Установка и конфигурирование Caretta и Grafana

При наличии заранее сконфигурированный helm chart для установки Caretta достаточно всего нескольких вызовов.

Рекомендуется устанавливать Caretta в новое уникальное пространство имён.

```
helm repo add groundcover https://helm.groundcover.com/
helm repo update
helm install caretta --namespace caretta --create-namespace groundcover/caretta
```

То же самое относится и к установке Grafana.

```
helm install --name my-grafana --set "adminPassword=secret" \n
--namespace monitoring -f custom-values.yaml stable/grafana
```

Наш файл `custom-values.yaml` будет выглядеть примерно так:

```
## Grafana configuration
grafana.ini:
 ## server
 server:
   protocol: http
   http_addr: 0.0.0.0
   http_port: 3000
   domain: grafana.local
 ## security
 security:
   admin_user: admin
   admin_password: password
   login_remember_days: 1
   cookie_username: grafana_admin
   cookie_remember_name: grafana_admin
   secret_key: hidden
 ## database
 database:
   type: rds
   host: mydb.us-west-2.rds.amazonaws.com
 ## session
 session:
   provider: memory
   provider_config: ""
   cookie_name: grafana_session
   cookie_secure: true
   session_life_time: 600

## Grafana data
persistence:
 enabled: true
 storageClass: "-"
 accessModes:
 - ReadWriteOnce
 size: 1Gi
```

### ▍ Конфигурирование

Сконфигурировать Caretta можно при помощи значений helm. Значения в Helm — это позиции настройки chart. После установки chart можно изменить значения, перечисленные в файле `values.yaml`, являющемся частью пакета chart, и настроить конфигурации на основании своих требований.

Ниже представлен пример конфигурации с переписыванием стандартных значений:

```
pollIntervalSeconds: 15  # set metrics polling interval
tolerations:             # set any desired tolerations
 - key: node-role.kubernetes.io/control-plane
   operator: Exists
   effect: NoSchedule

config:
 customSetting1: custom-value1
 customSetting2: custom-value2

victoria-metrics-single:
 server:
   persistentVolume:
     enabled: true   # set to true to use persistent volume

ebpf:
 enabled: true  # set to true to enable eBPF
 config:
   someOption: ebpf_options
```

`pollIntervalSeconds` задаёт интервал опроса метрик. В нашем случае метрики будут запрашиваться каждые 15 секунд.

В разделе tolerations можно указать допуски для подов. В показанном выше примере поды могут работать только в узлах, имеющих метку `node-role.kubernetes.io/control-plane` и с эффектом `NoSchedule`.

Раздел config позволяет указать собственные опции конфигурации для приложения.

Раздел victoria-metrics-single позволяет сконфигурировать сервер Victoria-metrics-single. В примере мы включаем использование постоянного хранилища (persistent volume).

Раздел `eBPF` позволяет включить eBPF и настроить его опции.

### ▍ Создаём визуальную карту сети с помощью Caretta и Grafana

Caretta состоит из двух частей: Caretta Agent и Caretta Server. Каждый узел в кластере выполняет Caretta Agent Kubernetes DaemonSet, собирающий информацию о состоянии кластера.

Для просмотра данных в виде карты сети и генерации карты сети необходимо добавить в Grafana данные, собранные Caretta.

```
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: caretta-depoy-test
 namespace: caretta-depoy-test
spec:
 selector:
   matchLabels:
     app: caretta-depoy-test
 template:
   metadata:
     labels:
       app: caretta-depoy-test
   spec:
     containers:
     - name: caretta-depoy-test
       image: groundcover/caretta:latest
       command: ["/caretta"]
       args: ["-c", "/caretta/caretta.yaml"]
       volumeMounts:
       - name: config-volume
         mountPath: /caretta
     volumes:
     - name: config-volume
       configMap:
         name: caretta-config
```

Данные из Caretta Agent получаются Caretta Server (который является [Kubernetes StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)), после чего он сохраняет их в базу данных.

```
apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: caretta-depoy-test
 labels:
   app: caretta-depoy-test
spec:
 serviceName: caretta-depoy-test
 replicas: 1
 selector:
   matchLabels:
     app: caretta-depoy-test
 template:
   metadata:
     labels:
       app: caretta-depoy-test
   spec:
     containers:
       - name: caretta-depoy-test
         image: groundcover/caretta:latest
         env:
           - name: DATABASE_URL
             value: mydb.us-west-2.rds.amazonaws.com
         ports:
           - containerPort: 80
             name: http
```

Чтобы сделать это, нам нужно создать собственный плагин источника данных в Grafana для подключения к данным Caretta, а затем разработать визуализации в Grafana для отображения этих данных.

```
[datasources]
[datasources.caretta]
 name = caretta-deploy-test
 type = rds
 url = mydb.us-west-2.rds.amazonaws.com
 access = proxy
 isDefault = true
```

### ▍ Опции настройки для карты сети и как получить к ним доступ

Карту сети, созданную Caretta и Grafana, можно настраивать множеством разных способов. Мы можем изменять следующие параметры:

* **Опции отображения**: при помощи опций настройки отображения вы можете управлять структурой карты, толщиной и цветом соединений и устройств.
* **Опции данных**: при помощи опций данных можно выбирать, какая информация будет отображаться на карте, в том числе уведомления, метрики производительности, сведения об устройстве и подключении.
* **Опции алертов**: при помощи опций алертов можно получать уведомления о любых изменениях и проблемах в сети, например, о большом трафике, низкой производительности или трудностях со связью.
* **Опции визуализации**: при помощи опций визуализации можно представлять собранные данные понятным и полезным образом.

Обычно для доступа к этим и другим опциям настройки требуется дэшборд Grafana. Доступ к опциям и параметрам зависит от версии Caretta и Grafana, а также от настроек и потребностей вашей системы.

## Интерпретация и использование визуальной карты сети

Основные задачи визуальной карты сети, созданной Caretta и Grafana — помощь в понимании сетевой топологии, выявлении возможных узких мест или проблем и планировании и устранении сетевых проблем. Чтобы интерпретировать и использовать визуальную карту сети, нужно разобраться в компонентах карты и их значении.

Вот некоторые из типов информации, которые могут отображаться на карте:

* **Устройства**: присутствующие на карте конечные точки сети, в том числе серверы, коммутаторы и роутеры.
* **Соединения**: соединения между устройствами, например, сетевые кабели, беспроводные или виртуальные соединения; иногда тип соединения отображается на карте.
* **Данные**: на карте отображаются показатели производительности, уведомления и информация о конфигурации.

### ▍ Советы по использованию карты сети для оценки производительности кластера K8s

Создание курируемой, информативной и масштабируемой карты сети — довольно сложная задача. Однако при наличии подходящего набора инструментов её вполне можно решить.

Мы уже увидели, чего можно добиться при использовании Caretta и Grafana. Теперь давайте посмотрим, что нужно учитывать при использовании карт сетей, отображающих метрики производительности кластеров Kubernetes.

Первое и самое главное: необходимо понять сетевую топологию кластера, в том числе физические и виртуальные сети, в которых выполняются ваши сервисы. Далее необходимо убедиться, что используемый вами сетевой плагин совместим с вашим приложением. Наконец, установите сетевые политики, чтобы обезопасить обмен данными между подами, контролировать входной и выходной трафик, выполнять мониторинг и устранять неполадки. Разберитесь, как выполняется обмен данными между подами и как устроена сеть подов.

## Заключение

Разбиение крупных систем на микросервисы, превращение систем в распределённые и управление ими — самый популярный подход для повышения производительности и аптайма. В этом лидерами рынка стали Kubernetes и Docker.

Несмотря на высокую производительность, проблемой крупномасштабных распределённых сетей является удобство наблюдения. Нам нужно учитывать все важные выбросы и аномалии, чтобы выполнять мониторинг и улучшать систему в целом с учётом оптимальной производительности. Новые технологии упрощают инновации и улучшения, однако вносят в систему неизвестные помехи. Необходим инструмент для наблюдений, способный отслеживать все операции в сети и презентовать их эффективным и информативным образом.

Grafana — лидирующий инструмент на рынке мониторинга. Соединив опенсорсный инструмент сетевой визуализации и мониторинга Caretta с Grafana, можно полностью раскрыть возможности своей инфраструктуры.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.konstantinsecurity.com/readme/architect/kubernetes/monitoring/network-monitoring.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
