INTEGRITY Документация

Диагностические журналы туннеля

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

Получение диагностических журналов

Шаги для получения диагностических журналов зависят от вашей cloudflared среда развертывания.

Предварительные требования

Среда хоста

Эти инструкции относятся к туннелям с удалённым и локальным управлением, запущенным непосредственно на хост-машине.

  1. (Только для Linux) Чтобы включить сетевую диагностику в журналы, разрешите cloudflared пользователю создавать сокеты RAW и PACKET без прав root:

    sudo setcap cap_net_raw+ep /usr/bin/traceroute && sudo setcap cap_net_raw+ep /usr/bin/traceroute

    Если вы не зададите cap_net_raw, данные traceroute будут недоступны.

  2. Получите диагностические журналы:

    cloudflared tunnel diag

    Если несколько экземпляров cloudflared работают на одном узле, укажите IP-адрес и порт сервера метрик для экземпляра, который вы хотите диагностировать. Например:

    cloudflared tunnel diag --metrics 127.0.0.1:20241

Эта команда выведет статус каждой диагностической задачи и поместит cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip файл в рабочем каталоге.

Docker

cloudflared считывает диагностические данные из сервер метрик туннеля. Чтобы получить диагностические логи, сервер метрик должен быть открыт из контейнера Docker и доступен с хост-машины.

  1. Определите порт сервера метрик для cloudflared экземпляр, работающий в Docker.

  2. Убедитесь, что контейнер развернут с включенной переадресацией портов. Функция диагностики будет запрашивать информацию у экземпляра Docker через локальный порт 20241, поэтому следует перенаправить порт 20241 к порту контейнера, полученному на шаге 1:

    docker run -d -p 20241:<metrics_port> docker.io/cloudflare/cloudflared tunnel ...
  3. Убедитесь, что адрес сервера метрик доступен из среды хоста Docker:

    curl localhost:20241/diag/tunnel

    Эта команда должна вернуть JSON:

    {
      "tunnelID": "ef96b330-a7f5-4bce-a00e-827ce5be077f",
      "connectorID": "d236670a-9f74-422f-adf1-030f5c5f0523",
      "connections": [
        { "isConnected": true, "protocol": 1, "edgeAddress": "198.41.192.167"},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.200.113", "index": 1},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.192.47", "index": 2},
        {"isConnected": true, "protocol": 1, "edgeAddress": "198.41.200.73", "index": 3}
      ],
      "icmp_sources": ["192.168.1.243", "fe80::c59:bd4a:e815:ed6"]
    }
  4. Запустите диагностику, используя ID Docker-контейнера:

    cloudflared tunnel diag --diag-container-id=<containerID>

    Как вариант, можно указать имя контейнера вместо его ID:

    cloudflared tunnel diag --diag-container-id=<containerName>

    Выполнение диагностической команды с ID контейнера позволяет cloudflared чтобы собрать информацию из среды Docker, включая журналы и сведения о контейнерах.

Эта команда выведет статус каждой диагностической задачи и поместит cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip файл в рабочем каталоге.

Kubernetes

Функция диагностики запросит данные из сервер метрик туннеля с использованием портов 20241 к 20245. Вам потребуется использовать переадресацию портов, чтобы разрешить локальной cloudflared экземпляр для подключения к серверу метрик на одном из этих портов.

  1. Определите у туннеля порт сервера метрик.

  2. Включить переадресацию портов:

    kubectl port-forward <pod> <diagnostic_port>:<metrics_port>
    • <pod>: Название пода, на котором запущен туннель
    • <diagnostic_port> это любой локальный порт в диапазоне 20241 к 20245.
    • <metrics_port> является портом пода Kubernetes для cloudflared экземпляр, который нужно диагностировать (получен на шаге 1).

    Например, если вы задали для адреса сервера метрик значение 0.0.0.0:12345:

    kubectl port-forward cloudflared-6d4897585b-r8kfz 20244:12345

    Подключения, установленные к локальному порту 20244 перенаправляются на порт 12345 пода, в котором запущен туннель.

  3. Запустите диагностику:

    cloudflared tunnel diag --diag-pod-id=<podID>

    Если в поде выполняется несколько приложений или служб и cloudflared не первый в поде, необходимо указать ID или имя контейнера:

    cloudflared tunnel diag --diag-pod-id=<podID> --diag-container-id=<containerName>

Эта команда выведет статус каждой диагностической задачи и поместит cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip файл в рабочем каталоге.

файлы cloudflared-diag

cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip архив содержит перечисленные ниже файлы. Данные в файле относятся либо к cloudflared экземпляра, который диагностируется (diagnosee) или экземпляр, вызвавший диагностику (diagnoser). Например, если ваш туннель работает в контейнере Docker, diagnosee является экземпляром Docker, а diagnoser является экземпляром хоста.

Имя файла Описание Экземпляр
cli-configuration.json Параметры запуска туннеля используемый при запуске туннеля diagnosee
cloudflared_logs.txt Файл журнала туннеля1 diagnosee
configuration.json Параметры конфигурации туннеля diagnosee
goroutine.pprof профиль горутин доступен благодаря pprof diagnosee
heap.pprof профиль кучи доступен благодаря pprof diagnosee
metrics.txt Снимок Метрики туннеля на момент диагностики diagnosee
network.txt JSON-трассировки к глобальной сети Cloudflare через IPv4 и IPv6 diagnoser
raw-network.txt Необработанные трассировки маршрута до глобальной сети Cloudflare через IPv4 и IPv6 diagnoser
systeminformation.json Информация об операционной системе и использовании ресурсов diagnosee
task-result.json Результат каждой диагностической задачи diagnoser
tunnelstate.json Подключения туннеля на момент диагностики diagnosee

Сноски

  1. Если файл журнала пуст, возможно, потребуется задать --loglevel к debug при запуске туннеля. --loglevel параметр требуется только в том случае, если вы запустили туннель из CLI с помощью cloudflared tunnel run команду. Это не требуется, если туннель работает как служба Linux/macOS или запущен в Docker/Kubernetes.