跳转到内容
搜索文档

隧道诊断日志

最后更新 查看 MarkdownAgent 设置

Cloudflare Tunnel 会生成一组诊断日志,可用于排查 cloudflared 的问题。诊断报告会收集在本地机器上运行的单个 cloudflared 实例的数据。

获取诊断日志

获取诊断日志的步骤取决于您的 cloudflared 部署环境。

前提条件

  • 主机上已安装 cloudflared 版本 2024.12.2 或更高版本

主机环境

这些说明适用于直接在主机上运行的远程管理和本地管理隧道。

  1. (仅限 Linux)要在日志中包含网络诊断,请允许 cloudflared 用户在没有 root 权限的情况下创建 RAW 和 PACKET 套接字:

    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 实例,请为要诊断的实例指定 指标服务器(metrics server)IP 和端口。例如:

    cloudflared tunnel diag --metrics 127.0.0.1:20241

此命令将输出每个诊断任务的状态,并在您的工作目录中放置一个 cloudflared-diag-YYYY-MM-DDThh-mm-ss.zip 文件。

Docker

cloudflaredTunnel 指标服务器(tunnel metrics server)读取诊断数据。要获取诊断日志,必须从 Docker 容器中公开指标服务器,并使其可从宿主机访问。

  1. 确定在 Docker 中运行的 cloudflared 实例的 指标服务器端口

  2. 确保在部署容器时启用了端口转发。诊断功能将使用本地端口 20241 向 Docker 实例请求信息,因此您应该将端口 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. 使用 Docker 容器 ID 运行诊断:

    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

诊断功能将使用端口 2024120245Tunnel 指标服务器(tunnel metrics server)请求数据。您需要使用端口转发,以允许本地 cloudflared 实例在这些端口之一上连接到指标服务器。

  1. 确定 Tunnel 的 指标服务器端口

  2. 启用端口转发:

    kubectl port-forward <pod> <diagnostic_port>:<metrics_port>
    • <pod>:运行 Tunnel 的 pod 的名称
    • <diagnostic_port>2024120245 范围内的任何本地端口。
    • <metrics_port> 是您要诊断的 cloudflared 实例的 Kubernetes pod 端口(在步骤 1 中获取)。

    例如,如果您将指标服务器地址设置为 0.0.0.0:12345

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

    发送到本地端口 20244 的连接将转发到运行 Tunnel 的 pod 的端口 12345

  3. 运行诊断:

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

    如果 pod 运行着多个应用程序/服务,且 cloudflared 不是 pod 中的第一个,您必须指定容器 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,诊断发起实例)。例如,如果您的 Tunnel 在 Docker 容器中运行,则被诊断实例(diagnosee)是 Docker 实例,而诊断发起实例(diagnoser)是宿主机实例。

文件名 描述 实例
cli-configuration.json 启动 Tunnel 时使用的 Tunnel 运行参数 diagnosee
cloudflared_logs.txt Tunnel 日志文件[^1] diagnosee
configuration.json Tunnel 配置参数 diagnosee
goroutine.pprof pprof 提供的 goroutine 分析文件 diagnosee
heap.pprof pprof 提供的 heap(堆)分析文件 diagnosee
metrics.txt 诊断时 Tunnel 指标的快照 diagnosee
network.txt 使用 IPv4 和 IPv6 到 Cloudflare 全球网络的 JSON 格式 traceroute 结果 diagnoser
raw-network.txt 使用 IPv4 和 IPv6 到 Cloudflare 全球网络的原始 traceroute 结果 diagnoser
systeminformation.json 操作系统信息和资源使用情况 diagnosee
task-result.json 每个诊断任务的结果 diagnoser
tunnelstate.json 诊断时的 Tunnel 连接情况 diagnosee

[^1]:如果日志文件为空,您可能需要在启动 Tunnel 时 --loglevel 设置为 debug。只有当您从 CLI 使用 cloudflared tunnel run 命令运行 Tunnel 时,才需要 --loglevel 参数。如果 Tunnel 作为 Linux/macOS 服务运行,或者在 Docker/Kubernetes 中运行,则不需要此参数。

这篇文档对您有帮助吗?