← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-tunnel / troubleshoot-tunnels
Диагностические журналы туннеля
Cloudflare Tunnel формирует набор диагностических журналов, которые можно использовать для устранения неполадок с cloudflared. Диагностический отчет собирает данные с одного экземпляра cloudflared работающий на локальной машине.
Получение диагностических журналов
Шаги для получения диагностических журналов зависят от вашей cloudflared среда развертывания.
Предварительные требования
cloudflaredверсии 2024.12.2 или более поздней, установленной на хосте
Среда хоста
Эти инструкции относятся к туннелям с удалённым и локальным управлением, запущенным непосредственно на хост-машине.
-
(Только для 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 будут недоступны. -
Получите диагностические журналы:
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 и доступен с хост-машины.
-
Определите порт сервера метрик для
cloudflaredэкземпляр, работающий в Docker. -
Убедитесь, что контейнер развернут с включенной переадресацией портов. Функция диагностики будет запрашивать информацию у экземпляра Docker через локальный порт
20241, поэтому следует перенаправить порт20241к порту контейнера, полученному на шаге 1:docker run -d -p 20241:<metrics_port> docker.io/cloudflare/cloudflared tunnel ... -
Убедитесь, что адрес сервера метрик доступен из среды хоста 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"] } -
Запустите диагностику, используя 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 экземпляр для подключения к серверу метрик на одном из этих портов.
-
Определите у туннеля порт сервера метрик.
-
Включить переадресацию портов:
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пода, в котором запущен туннель. -
Запустите диагностику:
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 |
Сноски
-
Если файл журнала пуст, возможно, потребуется задать
--loglevelкdebugпри запуске туннеля.--loglevelпараметр требуется только в том случае, если вы запустили туннель из CLI с помощьюcloudflared tunnel runкоманду. Это не требуется, если туннель работает как служба Linux/macOS или запущен в Docker/Kubernetes. ↩