Наблюдаемость сети

Содержание

О DeepFlow

Что такое DeepFlow

Проект с открытым исходным кодом DeepFlow направлен на обеспечение глубокой наблюдаемости сложных облачных и AI-приложений. DeepFlow реализует сбор данных без написания кода с помощью eBPF для метрик, распределённого трассирования, логов запросов и профилирования функций, а также интегрируется с SmartEncoding для достижения полной корреляции Full Stack и эффективного доступа ко всем данным наблюдаемости. С DeepFlow облачные и AI-приложения автоматически получают глубокую наблюдаемость, исключая необходимость постоянного инструментирования кода разработчиками и предоставляя возможности мониторинга и диагностики, охватывающие всё от кода до инфраструктуры для команд DevOps/SRE.

Использование технологии eBPF

Предполагая, что у вас есть базовое понимание eBPF, это безопасная и эффективная технология расширения функциональности ядра путём запуска программ в песочнице, что является революционным новшеством по сравнению с традиционными методами изменения исходного кода ядра и написания модулей ядра. Программы eBPF являются событийно-ориентированными, и когда ядро или пользовательские программы проходят через eBPF Hook, выполняется соответствующая программа eBPF, загруженная в точку Hook. Ядро Linux предопределяет ряд часто используемых точек Hook, а также можно динамически добавлять пользовательские точки Hook в ядро и приложения с помощью технологий kprobe и uprobe. Благодаря технологии Just-in-Time (JIT) эффективность выполнения кода eBPF может быть сопоставима с нативным кодом ядра и модулями ядра. Благодаря механизму Verification код eBPF выполняется безопасно, не вызывая сбоев ядра или бесконечных циклов.

Архитектура программного обеспечения

DeepFlow состоит из двух компонентов: Agent и Server. Агент запускается на каждом узле K8s, на устаревших хостах и облачных хостах, и отвечает за сбор данных AutoMetrics и AutoTracing всех процессов приложений на хосте. Server запускается в кластере K8s и предоставляет управление агентами, внедрение тегов, приём и запрос данных.

Установка DeepFlow

Введение

Требования к ядру

Возможности eBPF (AutoTracing, AutoProfiling) в DeepFlow имеют следующие требования к версии ядра:

АрхитектураДистрибутивВерсия ядраkprobeGolang uprobeOpenSSL uprobeperf
X86CentOS 7.93.10.0

1

YY

2

Y

2

Y
RedHat 7.63.10.0

1

YY

2

Y

2

Y
*4.9-4.13Y
4.14

3

YY

2

Y
4.15YY

2

Y
4.16YYY
4.17+YYYY
ARMCentOS 84.18YYYY
EulerOS5.10+YYYY
KylinOS V10 SP24.19.90-25.24+YYYY
KylinOS V10 SP34.19.90-52.24+YYYY
Другие дистрибутивы5.8+YYYY

Дополнительные замечания по версиям ядра:

  1. В CentOS 7.9 и RedHat 7.6 были обратно портированы некоторые возможности eBPF (opens new window) в ядро 3.10. В этих двух дистрибутивах поддерживаемые DeepFlow версии ядра (зависимые точки hook) следующие:
    • 3.10.0-957.el7.x86_64
    • 3.10.0-1062.el7.x86_64
    • 3.10.0-1127.el7.x86_64
    • 3.10.0-1160.el7.x86_64
  2. Процессы Golang/OpenSSL внутри контейнеров не поддерживаются.
  3. В версии ядра 4.14 к одному tracepoint не может быть прикреплено несколько программ eBPF (например, два и более deepflow-agent не могут работать одновременно), в других версиях такой проблемы нет.
ПРИМЕЧАНИЕ

Заявление RedHat:

eBPF в Red Hat Enterprise Linux 7.6 предоставляется как Tech Preview и поэтому не имеет полной поддержки и не подходит для использования в продуктивной среде. Он предоставляется с основной целью расширения охвата и потенциального перехода к полной поддержке в будущем. eBPF в Red Hat Enterprise Linux 7.6 включён только для целей трассировки, что позволяет прикреплять программы eBPF к probe, tracepoint и perf событиям.

Топология развертывания

Подготовка

Storage Class

Рекомендуется использовать Persistent Volumes для хранения данных MySQL и ClickHouse, чтобы избежать ненужных затрат на обслуживание. Вы можете указать Storage Class по умолчанию или добавить параметр --set global.storageClass=<your storageClass>, чтобы выбрать Storage Class для создания PVC.

Для получения дополнительной информации о настройке хранилища обратитесь к документации по Storage.

Пакет

Загрузка пакета DeepFlow

Перейдите на Custom Portal для загрузки пакета DeepFlow.

Если у вас нет доступа к Custom Portal, обратитесь в техническую поддержку.

Загрузка пакета на платформу

Используйте инструмент violet для публикации пакета на платформу.

Подробные инструкции по использованию этого инструмента см. в разделе CLI.

Установка

Создайте ресурс приложения в пространстве имён cpaas-system для развертывания DeepFlow. Пример манифеста:

apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
  name: deepflow
  namespace: cpaas-system
  annotations:
    app.cpaas.io/chart.source: public-charts/deepflow-plugin
    app.cpaas.io/chart.version: v4.1.0
    app.cpaas.io/chart.values: |
      {
        "global": {
          "storageClass": "example-sc"
        },
        "server": {
          "service": {
            "type": "ClusterIP"
          }
        },
        "deepflow-agent": {
          "clusterNAME": "cluster1"
        },
        "grafana": {
          "adminUser": "admin",
          "adminPassword": "password",
          "service": {
            "type": "ClusterIP"
          },
          "grafana.ini": {
            "server": {
              "root_url": "%(protocol)s://%(domain)s/clusters/cluster1/deepflow",
              "serve_from_sub_path": true
            }
          }
        },
        "mysql": {
          "storageConfig": {
            "persistence": {
              "size": "50G"
            }
          }
        },
        "clickhouse": {
          "storageConfig": {
            "persistence": [
              {
                "accessModes": [
                  "ReadWriteOnce"
                ],
                "name": "clickhouse-path",
                "size": "100Gi",
                "storageClass": "{{ .Values.global.storageClass }}"
              },
              {
                "accessModes": [
                  "ReadWriteOnce"
                ],
                "name": "clickhouse-storage-path",
                "size": "200Gi",
                "storageClass": "{{ .Values.global.storageClass }}"
              }
            ]
          }
        }
      }
    cpaas.io/display-name: 'DeepFlow'
  labels:
    sync-from-helmrequest: 'true'
  1. Источник чарта DeepFlow. Если вы хотите использовать другой чарт, обратитесь в техническую поддержку.
  2. Версия чарта DeepFlow. ДОЛЖНА совпадать с версией пакета DeepFlow, загруженного на платформу.
  3. Storage Class, используемый для создания Persistent Volumes для MySQL и ClickHouse.
  4. Имя кластера, в котором развернут DeepFlow.
  5. Имя пользователя веб-интерфейса Grafana. Вы можете изменить его на желаемое.
  6. Пароль веб-интерфейса Grafana. Рекомендуется изменить на надёжный пароль.
  7. Корневой URL для веб-интерфейса Grafana. Вы можете изменить на желаемый URL.
  8. Размер постоянного тома для MySQL. Настройте в соответствии с вашими потребностями.
  9. Размер постоянного тома для пути ClickHouse. Настройте в соответствии с вашими потребностями.
  10. Размер постоянного тома для пути хранения ClickHouse. Настройте в соответствии с вашими потребностями.

Дождитесь готовности приложения:

kubectl -n cpaas-system wait --for=jsonpath='{.spec.assemblyPhase}'=Succeeded application deepflow
kubectl -n cpaas-system rollout status statefulset deepflow-clickhouse
kubectl -n cpaas-system rollout status deployment deepflow-mysql
kubectl -n cpaas-system rollout status deployment deepflow-server
kubectl -n cpaas-system rollout status deployment deepflow-app
kubectl -n cpaas-system rollout status deployment deepflow-grafana
kubectl -n cpaas-system rollout status daemonset deepflow-agent

Настройка Ingress для веб-интерфейса Grafana

Создайте ресурс Ingress для доступа к веб-интерфейсу Grafana. Пример манифеста:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: http
    nginx.ingress.kubernetes.io/enable-cors: "true"
  name: deepflow-grafana
  namespace: cpaas-system
spec:
  ingressClassName: cpaas-system
  rules:
  - http:
      paths:
      - backend:
          service:
            name: deepflow-grafana
            port:
              number: 80
        path: /clusters/${CLUSTER_NAME}/deepflow($|/)(.*)
        pathType: ImplementationSpecific
  1. Имя класса Ingress. Если вы устанавливаете DeepFlow в глобальный кластер, установите значение global-alb2. Также можно указать своё имя класса Ingress.
  2. Этот путь ДОЛЖЕН совпадать с корневым URL, настроенным в ресурсе Application.

Доступ к веб-интерфейсу Grafana

Вы можете получить доступ к веб-интерфейсу Grafana по URL, указанному в ресурсе Ingress, и войти, используя имя пользователя и пароль, заданные в ресурсе Application.

ВНИМАНИЕ

Настоятельно рекомендуется изменить пароль после первого входа.

Дополнительные ресурсы