You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取GitLab CI作业的correlation ID?

GitLab CI Runner 获取请求 Correlation ID 可行方案

你之前在CI作业里配的CURL_TRACE=1、GIT_CURL_VERBOSE=1这类参数不生效,根本原因是这些环境变量只对作业容器里启动的git、curl进程有用,Runner守护进程自己的内置HTTP客户端(基于libcurl实现)是作业启动前就运行的,根本不会加载作业内设置的环境变量,自然打不出对应的trace日志,别在这上面耗时间。

实际可操作的方案按优先级从高到低如下:

方案1:开启Runner全局Debug日志(适用于追踪Runner内置请求)

这个方案可以拿到Runner所有内置操作(拉取代码、调用GitLab API、上传制品、缓存同步等)的请求头,包含你需要的x-request-id(即correlation ID):

  • 修改Runner配置:要么在Runner部署机器的config.toml里,找到对应Runner的配置块,加一行log_level = "debug";要么启动Runner的时候直接带上--debug启动参数。
  • 别去CI作业的网页控制台找日志,debug日志是输出到Runner服务自己的运行日志里的:
    • 要是Runner是用systemd托管的,直接跑journalctl -u gitlab-runner -f实时追日志就行
    • 要是是用容器部署的Runner,直接查看Runner容器的标准输出即可
  • 触发你要调试的作业,直接在Runner日志里搜x-request-id关键词,就能找到对应请求绑定的correlation ID。

方案2:作业内手动透传Correlation ID(适用于追踪作业脚本内发起的请求)

如果你没权限修改Runner全局配置,只需要追踪作业脚本里自己发起的服务请求,可以直接在作业里手动抓取ID并透传:
GitLab链路支持识别客户端主动传入的X-Request-Id头作为correlation ID,你可以在作业脚本最开头先发个预检请求,从响应头里把ID抠出来存成变量,后面自己发的所有请求都带上这个头即可,示例代码:

# 从GitLab API响应头抓取当前链路的correlation ID
CORRELATION_ID=$(curl -v -H "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}" 2>&1 | grep -i "< x-request-id:" | awk '{print $3}' | tr -d '\r')
echo "当前作业Correlation ID: ${CORRELATION_ID}"

# 后续所有业务请求主动携带该ID
curl -H "X-Request-Id: ${CORRELATION_ID}" https://你的目标服务地址

注意:这个方法拿不到Runner自动执行的操作(比如自动拉代码、上传制品、同步缓存)的correlation ID,这类请求必须用方案1获取。

方案3:流量抓包兜底

如果前两个方法都因为权限限制无法实施,可以直接在Runner部署节点抓出口流量兜底:

  1. 执行tcpdump命令抓取Runner发往目标服务的流量:
tcpdump -i any host 你的目标服务域名 and port 443 -w runner_capture.pcap
  1. 触发对应作业后停止抓包,用wireshark打开生成的runner_capture.pcap文件,过滤HTTP/HTTPS请求,直接查看请求/响应头中的x-request-id字段即可。

如果是HTTPS加密流量,可以提前在Runner启动配置中加SSLKEYLOGFILE环境变量导出TLS密钥,配合wireshark解密流量后查看头信息;嫌操作麻烦也可以临时切换到HTTP测试环境抓包,省了解密步骤。

内容的提问来源于stack exchange,提问作者jhfrontz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:42:14