← Cloudflare Tunnel / tunnel
Мониторинг
Cloudflare Tunnel предоставляет журналы, метрики и инструменты диагностики, которые помогают отслеживать состояние туннеля и устранять неполадки.
Работоспособность туннеля
Проверить статус подключения туннеля можно в Панель управления Cloudflare ↗ перейдя в Сеть > Tunnels, либо выполнив cloudflared tunnel list.
| Статус | Значение | Рекомендуемое действие |
|---|---|---|
| Исправно | Туннель активен и обслуживает трафик через четыре подключения к глобальной сети Cloudflare. | Действие не требуется. Ваш туннель работает корректно. |
| Неактивен | Туннель создан (через API или панель управления), но cloudflared connector ни разу не запускался для установления подключения. |
Установите и запустите cloudflared на вашем исходном сервере, чтобы подключить туннель к Cloudflare. Команду установки можно найти в панели управления Cloudflare в разделе Сеть > Tunnels : выберите свой туннель, затем на Обзор вкладке выберите Добавьте реплику. Для настройки через API см. Установите и запустите туннель. |
| Down | Ранее туннель был подключён, но сейчас отключён, потому что cloudflared процесс остановлен. |
1. Убедитесь, что cloudflared служба или процесс активно выполняется на вашем сервере. 2. Проверьте возможные проблемы на стороне сервера: например, компьютер выключен, произошёл сбой приложения или недавно изменилась сеть. |
| Degraded | cloudflared connector работает, и туннель обслуживает трафик, но как минимум одно отдельное подключение завершилось сбоем. Дальнейшее ухудшение доступность туннеля может привести к тому, что туннель отключится и перестанет обслуживать трафик. |
1. Просмотрите свой cloudflared журналы для сбоев подключения или сообщений об ошибках. 2. Проверьте правила локальной сети и брандмауэра и убедитесь, что они не блокируют подключения к IP-адреса и порты Cloudflare Tunnel. |
Уведомления
Администраторы могут получать оповещения при изменении состояния работоспособности или статуса развертывания туннелей. Уведомления можно отправлять по электронной почте, через webhook или через сторонние сервисы.
Чтобы настроить уведомления туннеля, см. Создать уведомление.
Tunnel Creation or Deletion Event
Для кого это предназначено?Клиенты, которые хотят получать уведомление о создании или удалении Cloudflare Tunnel в своём аккаунте.
Другие параметры / фильтрыНет.
Входит вВсе планы Cloudflare Zero Trust.
Что делать при получении такого уведомления?Действие не требуется.
Tunnel Health Alert
Для кого это предназначено?Клиенты, которые хотят получать уведомления об изменении статуса работоспособности своих Cloudflare Tunnel.
Другие параметры / фильтрыНет.
Входит вВсе планы Cloudflare Zero Trust.
Что делать при получении такого уведомления?Отслеживайте состояние туннеля с течением времени и рассмотрите возможность развертывания cloudflared реплик или балансировщиков нагрузки.
См. Статус туннеля и просмотрите список возможных статусов туннеля (Healthy, Inactive, Down и Degraded).
Журналы
Журналы туннеля фиксируют всю активность между cloudflared и глобальной сетью Cloudflare, и вся активность между cloudflared и вашим origin-сервером.
Серверные журналы
Если у вас есть доступ к исходному серверу, вы можете использовать --loglevel флаг чтобы включить логирование при запуске туннеля. По умолчанию cloudflared выводит журналы в stdout и не сохраняет их на сервере. При необходимости вы можете использовать --logfile флаг чтобы записывать журналы в файл.
Чтобы включить журналы, Запустите туннель с помощью --loglevel info и --logfile <PATH> флаги. Например,
cloudflared tunnel --loglevel info --logfile cloudflared.log run <UUID>Удалённая потоковая передача журналов
Журналы работающего туннеля можно получать в режиме реального времени без SSH-доступа к серверу.
cloudflared демон может передавать журналы любого туннеля в вашей учетной записи в локальную командную строку. cloudflared должен быть установлен как на локальной машине, так и на origin-сервере.
-
На локальном компьютере пройдите аутентификацию
cloudflaredв ваш аккаунт Cloudflare:cloudflared tunnel login -
Запустите
cloudflared tailдля конкретного туннеля:cloudflared tail <UUID>Чтобы увидеть более структурированное представление JSON-сообщения, можно передать вывод через конвейер в такие инструменты, как jq ↗:
cloudflared tail --output=json <UUID> | jq .
- Если вы используете несколько реплики, вы можете указать, с какой реплики получать поток журналов:
Чтобы найти ID реплики, перейдите в Сеть > Tunnels и выберите ваш туннель. Все активные реплики отображаются в Connectors на странице обзора туннеля. Идентификатором реплики служит ID Connector.
cloudflared tail --connector-id <REPLICA ID> <UUID>
Параметры фильтрации логов
Вы можете фильтровать логи по типу события (--event), уровень события (--level), или частота выборки (-sampling) чтобы уменьшить объём журналов, передаваемых с источника. Это помогает снизить влияние на производительность источника, особенно если источник обычно работает под высокой нагрузкой. Например:
cloudflared tail --level debug <UUID>| Флаг | Описание | Допустимые значения | Значение по умолчанию |
|---|---|---|---|
--event |
Фильтруйте по типу события или запроса. | cloudflared, http, tcp, udp |
Все события |
--level |
Возвращать журналы этого уровня и выше. Работает независимо от --loglevel параметр на сервере. |
debug, info, warn, error, fatal |
debug |
--sampling |
Отберите часть от общего числа журналов. | Число от 0.0 к 1.0 |
1.0 |
Чтобы транслировать журналы туннеля из панели управления:
-
В панели управления Cloudflare перейдите в Сеть > Tunnels и выберите свой туннель.
Перейдите в Tunnels ↗ -
Перейдите в Live logs на вкладке.
-
Выберите Live чтобы начать трансляцию.
Просмотр журналов реплики
Если вы используете несколько cloudflared экземпляры для одного и того же туннеля (также известного как реплики), журналы со всех подключённых реплик передаются автоматически и группируются по имени хоста, что упрощает определение того, какая хост-машина создала ту или иную запись журнала.
Чтобы отфильтровать поток по определённым репликам, выберите Фильтр значок и разверните Реплики раздел. Также можно отфильтровать по Уровень журнала и Тип события.
Метрики
Метрики туннеля показывают пропускную способность и использование ресурсов Cloudflare Tunnel с течением времени. Когда вы запускаете туннель, cloudflared запустит конечную точку метрик Prometheus: HTTP-сервер, который предоставляет метрики в Prometheus ↗ формате. Вы можете использовать набор инструментов Prometheus на удалённой машине для сбора метрик из cloudflared сервер.
Адрес сервера метрик по умолчанию
В средах без контейнеризации cloudflared запускает сервер метрик на 127.0.0.1:<PORT>/metrics, где <PORT> является первым доступным портом в диапазоне 20241 к 20245. Если все порты недоступны, cloudflared привязывается к случайному порту. В контейнеризированных средах (Docker, Kubernetes) адрес по умолчанию: 0.0.0.0:<PORT>/metrics.
Чтобы определить порт по умолчанию, проверьте журналы туннеля примерно во время запуска туннеля. Например:
2024-12-19T21:17:58Z INF Starting metrics server on 127.0.0.1:20241/metricsНастройка пользовательского адреса
Чтобы отдавать метрики по пользовательскому IP-адресу и порту, выполните следующие действия на cloudflared хост:
-
Запустите туннель с помощью
--metricsфлаг. Например,cloudflared tunnel --metrics 127.0.0.1:60123 run my-tunnel -
Убедитесь, что сервер метрик запущен: перейдите в
http://localhost:60123/metrics. Это будет работать только в том случае, если вы настроили localhost IP-адрес (127.0.0.1или0.0.0.0).
Теперь метрики можно экспортировать в Prometheus и Grafana для визуализации и запросов к данным. См. Руководство по Grafana с инструкциями по началу работы с этими инструментами.
метрики cloudflared
| Название | Описание | Тип | Метки |
|---|---|---|---|
build_info |
Информация о сборке и версии. | GAUGE | goversion, revision, type, version |
cloudflared_config_local_config_pushes |
Количество локальных отправок конфигурации в Cloudflare. | COUNTER | |
cloudflared_config_local_config_pushes_errors |
Количество ошибок при локальной отправке конфигурации. | COUNTER | |
cloudflared_orchestration_config_version |
Версия конфигурации. | GAUGE | |
cloudflared_tcp_active_sessions |
Количество одновременных TCP-сеансов, проксируемых к любому источнику. | GAUGE | |
cloudflared_tcp_total_sessions |
Общее количество TCP-сессий, проксированных на любой origin. | COUNTER | |
cloudflared_tunnel_active_streams |
Общее количество активных потоков. | GAUGE | |
cloudflared_tunnel_concurrent_requests_per_tunnel |
Количество одновременных запросов, проксируемых через каждый туннель. | GAUGE | |
cloudflared_tunnel_ha_connections |
Количество активных подключений HA. | GAUGE | |
cloudflared_tunnel_request_errors |
Количество ошибок при проксировании к источнику. | COUNTER | |
cloudflared_tunnel_server_locations |
К чему подключен каждый туннель. 1 означает текущее местоположение, 0 означает предыдущие местоположения. |
GAUGE | connection_id, edge_location |
cloudflared_tunnel_timer_retries |
Количество неподтвержденных heartbeat-сообщений. | GAUGE | |
cloudflared_tunnel_total_requests |
Количество запросов, проксированных через все туннели. | COUNTER | |
cloudflared_tunnel_tunnel_authenticate_success |
Количество успешных событий аутентификации туннеля. | COUNTER | |
cloudflared_tunnel_tunnel_register_success |
Количество успешных регистраций туннеля. | COUNTER | rpcName |
cloudflared_udp_active_sessions |
Количество одновременных UDP-сеансов, проксируемых к любому источнику. | GAUGE | |
cloudflared_udp_total_sessions |
Общее количество UDP-сессий, проксированных на любой origin. | COUNTER | |
coredns_panics_total |
Количество паник. | COUNTER | |
quic_client_closed_connections |
Количество закрытых подключений. | COUNTER | |
quic_client_latest_rtt |
Последнее измеренное время приёма-передачи (RTT) для соединения. | GAUGE | conn_index |
quic_client_lost_packets |
Количество пакетов, потерянных в рамках подключения. | COUNTER | conn_index, reason |
quic_client_min_rtt |
Наименьшее значение RTT, измеренное для соединения, в мс. | GAUGE | conn_index |
quic_client_packet_too_big_dropped |
Количество пакетов, полученных от источника, которые оказались слишком большими для отправки в Cloudflare и поэтому были отброшены. | COUNTER | |
quic_client_smoothed_rtt |
Сглаженное значение RTT, рассчитанное для соединения, в мс. | GAUGE | conn_index |
quic_client_total_connections |
Количество инициированных подключений. Для всех метрик QUIC клиентом считается сторона, инициирующая подключение. | COUNTER |
Метрики Prometheus
| Название | Описание | Тип | Метки |
|---|---|---|---|
promhttp_metric_handler_requests_in_flight |
Текущее количество обслуживаемых скрейпов. | GAUGE | |
promhttp_metric_handler_requests_total |
Общее количество scrape-запросов по коду состояния HTTP. | COUNTER | code |
Метрики среды выполнения Go
| Название | Описание | Тип | Метки |
|---|---|---|---|
go_gc_duration_seconds |
Сводка по длительности пауз циклов сборки мусора. | СВОДКА | |
go_goroutines |
Количество горутин (goroutines), существующих в данный момент. | GAUGE | |
go_info |
Информация о среде Go. | GAUGE | version |
go_memstats_alloc_bytes |
Количество выделенных и всё ещё используемых байт. | GAUGE | |
go_memstats_alloc_bytes_total |
Общее количество выделенных байт, даже если они впоследствии были освобождены. | COUNTER | |
go_memstats_buck_hash_sys_bytes |
Количество байт, используемых хеш-таблицей блоков профилирования. | GAUGE | |
go_memstats_frees_total |
Общее количество операций free. | COUNTER | |
go_memstats_gc_sys_bytes |
Количество байт, используемых для системных метаданных сборки мусора. | GAUGE | |
go_memstats_heap_alloc_bytes |
Количество байт кучи, выделенных и всё ещё используемых. | GAUGE | |
go_memstats_heap_idle_bytes |
Количество байт кучи, ожидающих использования. | GAUGE | |
go_memstats_heap_inuse_bytes |
Количество используемых байт кучи. | GAUGE | |
go_memstats_heap_objects |
Количество выделенных объектов. | GAUGE | |
go_memstats_heap_released_bytes |
Количество байт кучи, возвращённых операционной системе. | GAUGE | |
go_memstats_heap_sys_bytes |
Количество байт кучи, полученных от системы. | GAUGE | |
go_memstats_last_gc_time_seconds |
Количество секунд, прошедших с 1970 года до последней сборки мусора. | GAUGE | |
go_memstats_lookups_total |
Общее количество поисков указателей. | COUNTER | |
go_memstats_mallocs_total |
Общее количество операций malloc. | COUNTER | |
go_memstats_mcache_inuse_bytes |
Количество байт, используемых структурами mcache. | GAUGE | |
go_memstats_mcache_sys_bytes |
Количество байт, полученных от системы для структур mcache. | GAUGE | |
go_memstats_mspan_inuse_bytes |
Количество байт, используемых структурами mspan. | GAUGE | |
go_memstats_mspan_sys_bytes |
Количество байт, полученных от системы для структур mspan. | GAUGE | |
go_memstats_next_gc_bytes |
Количество байт кучи, при достижении которого произойдёт следующая сборка мусора. | GAUGE | |
go_memstats_other_sys_bytes |
Количество байт, используемых для прочих системных выделений памяти. | GAUGE | |
go_memstats_stack_inuse_bytes |
Количество байт, используемых аллокатором стека. | GAUGE |
Диагностические журналы
Cloudflare Tunnel формирует диагностические отчёты, которые собирают данные с одного 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-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. ↩