news 2026/9/16 21:38:39

Coroot Node Agent 配置完全指南:eBPF 驱动的节点级遥测采集与导出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Coroot Node Agent 配置完全指南:eBPF 驱动的节点级遥测采集与导出

Coroot Node Agent 配置完全指南:eBPF 驱动的节点级遥测采集与导出

【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/coroot

Coroot-node-agent 是 Coroot 可观测性平台中负责节点侧数据采集的代理组件:它以 Prometheus 与 OpenTelemetry 兼容的方式,从宿主机上每一个容器以及节点自身收集指标、日志、链路追踪与性能剖析数据,并统一推送到 Coroot 服务端。本文以 docs/docs/configuration/coroot-node-agent.md 为主体,完整梳理该 Agent 的全部命令行参数、环境变量与容器级开关,并结合仓库内的部署清单与配套文档,给出可直接落地的安装与调优方案。

一、Agent 在 Coroot 架构中的定位

在 Coroot 的架构文档中,coroot-node-agent被定义为「由 eBPF 驱动的开源可观测性 Agent」,负责采集节点上所有容器的 metrics、logs、traces 与 profiles。它通常以 Kubernetes DaemonSet 形式在每个节点部署一份(见 kubernetes 安装文档),或在 Docker、Docker Swarm、裸机 Linux、Windows 主机上独立运行。因为 eBPF 监控、宿主机文件系统访问与容器检视都需要特权,Kubernetes 中若因 Pod Security 标准导致 Agent 无法启动,需要放行特权工作负载:

kubectl label ns coroot pod-security.kubernetes.io/enforce=privileged

从 deploy/docker-compose.yaml 中可以看到生产可用的最小部署形态——node-agent服务以 privileged + host PID 运行,挂载内核追踪与调试目录,并显式传入三个关键参数:

node-agent: restart: always image: ghcr.io/coroot/coroot-node-agent pull_policy: always privileged: true pid: "host" volumes: - /sys/kernel/tracing:/sys/kernel/tracing - /sys/kernel/debug:/sys/kernel/debug - /sys/fs/cgroup:/host/sys/fs/cgroup - node_agent_data:/data command: - '--collector-endpoint=http://coroot:8080' - '--cgroupfs-root=/host/sys/fs/cgroup' - '--wal-dir=/data'

这条清单已经体现了 Agent 配置的三大主题:导出目标--collector-endpoint)、宿主机资源路径--cgroupfs-root)与本地缓冲--wal-dir)。

二、四类遥测数据与导出协议

Agent 采集并导出的遥测数据共四类,协议各不相同:

遥测类型导出方式典型场景
MetricsPrometheus 文本格式被拉取(Pull),或通过 Prometheus Remote Write 协议推送(Push)资源用量、网络、应用层协议指标
Traces基于 eBPF 的网络与应用层追踪,经 OTLP/HTTP(OpenTelemetry 协议)发送未接入 OpenTelemetry 的存量服务的链路分析
Logs自动发现容器日志并经 OTLP/HTTP 发送容器 stdout/stderr、Journald、/var/log 文件
Profiles内置 Pyroscope eBPF profiler 采集 CPU 剖析,经自定义 HTTP 协议发送无侵入的 CPU 热点分析

其中 eBPF 追踪能力可以无代码改动地自动识别 HTTP、Postgres、MySQL、Redis、MongoDB、Memcached 等协议(见 eBPF-based tracing);eBPF 剖析器开箱即用,Java 应用建议追加-XX:+PreserveFramePointer、Node.js 建议追加--perf-basic-prof-only-functions --interpreted-frames-native-stack以提升符号化质量(见 eBPF-based profiling)。

三、配置方式:命令行参数与环境变量

coroot-node-agent支持两种等价的配置方式:命令行 Flag 与同名环境变量。Linux 上二者一一对应;Windows 上环境变量需加COROOT_前缀(详见第四节)。下面按功能域分组整理全部参数(即原文档配置表的完整内容)。

3.1 基础服务与宿主机路径

Flag环境变量默认值说明
--listenLISTEN0.0.0.0:80HTTP 监听地址(用于暴露自身/metrics
--cgroupfs-rootCGROUPFS_ROOT/sys/fs/cgroup宿主机 cgroup 文件系统根路径;容器内运行时需挂载宿主 cgroup 并指向挂载点(如--cgroupfs-root=/host/sys/fs/cgroup

3.2 采集功能开关

Flag环境变量默认值说明
--disable-log-parsingDISABLE_LOG_PARSINGfalse关闭容器日志解析
--disable-json-log-parsingDISABLE_JSON_LOG_PARSINGfalse关闭从 JSON 格式日志中提取 message、severity 与 attributes
--disable-pingerDISABLE_PINGERfalse关闭对上游的 ICMP ping。关闭后container_net_latency_seconds这类基于 ICMP 往返时延的指标将不可用
--disable-l7-tracingDISABLE_L7_TRACINGfalse关闭应用层(L7)追踪
--disable-gpu-monitoringDISABLE_GPU_MONITORINGfalse关闭 GPU 监控(NVML)

3.3 运行时插桩与动态分析

Flag环境变量默认值说明
--enable-java-tlsENABLE_JAVA_TLSfalse通过动态加载 Agent 开启 Java TLS 插桩
--enable-java-async-profilerENABLE_JAVA_ASYNC_PROFILERfalse通过 async-profiler 开启 Java 剖析(CPU、内存分配、锁竞争)。开启后才会产出container_jvm_alloc_bytes_totalcontainer_jvm_lock_contentions_total等指标(见 metrics/node-agent 参考)
--go-heap-profilerGO_HEAP_PROFILERenabledGo 堆剖析模式:disabledenabled(被动)或force(对所有 Go 应用强制开启剖析)
--instrumentation-delayINSTRUMENTATION_DELAY30s进程启动后延迟多久再启用 Python GIL 与 Node.js 事件循环插桩

--go-heap-profiler=force可确保即使应用自身未开启 profiling 也能采集到 Go 运行时分配数据(container_go_alloc_bytes_total/container_go_alloc_objects_total),在需要全量覆盖的场景下非常实用。

3.4 容器过滤与网络流量控制

Flag环境变量默认值说明
--container-allowlistCONTAINER_ALLOWLIST允许采集的容器列表(正则表达式)
--container-denylistCONTAINER_DENYLIST排除采集的容器列表(正则表达式)
--skip-systemd-system-servicesSKIP_SYSTEMD_SYSTEM_SERVICEStrue跳过已知的 systemd 系统服务(apt、motd、udev 等)
--exclude-http-requests-by-pathEXCLUDE_HTTP_REQUESTS_BY_PATH从指标与追踪中排除特定 HTTP 路径(用于过滤健康检查等高频噪音请求)
--track-public-networkTRACK_PUBLIC_NETWORK0.0.0.0/0需要追踪的公网 IP 网段
--ephemeral-port-rangeEPHEMERAL_PORT_RANGE32768-60999从连接追踪中排除的临时端口范围(内核分配的临时端口不属于业务连接)

3.5 云实例信息标签

这组参数用于向node_cloud_info指标注入云实例信息标签。Agent 本身会通过 sysfs 探测云厂商、调用各家 metadata 服务(AWS、GCP、Azure、Hetzner、Scaleway、DigitalOcean、Alibaba);对于不支持的云环境,可手动指定(详见 metrics/node-agent 参考 中node_cloud_info一节)。

Flag环境变量默认值说明
--providerPROVIDERnode_cloud_infoprovider标签
--regionREGIONnode_cloud_inforegion标签
--availability-zoneAVAILABILITY_ZONEnode_cloud_infoavailability_zone标签
--instance-typeINSTANCE_TYPEnode_cloud_infoinstance_type标签
--instance-life-cycleINSTANCE_LIFE_CYCLEnode_cloud_infoinstance_life_cycle标签

3.6 日志采集的速率与基数控制

Flag环境变量默认值说明
--log-per-secondLOG_PER_SECOND10.0日志每秒速率限制
--log-burstLOG_BURST100日志限流的最大突发量
--log-patterns-per-containerLOG_PATTERNS_PER_CONTAINER256每个容器每个 level 的最大日志模式数(用于自动日志聚类,对应container_log_messages_totalpattern_hash标签)
--log-pattern-extraction-limitLOG_PATTERN_EXTRACTION_LIMIT100每秒每个容器用于提取模式的日志条数上限;超限消息计入event was sampled模式(0表示不限)

日志限流与模式提取限制共同保护了服务端与 ClickHouse 存储,避免高日志量容器造成资源与基数爆炸。所有日志指标都带sourcejournald/stdout/stderr//var/log路径)、levelpattern_hashsample标签,便于在 Logs 页面按模式聚合检索。

3.7 指标基数与标签限制

Flag环境变量默认值说明
--max-fqdns-per-containerMAX_FQDNS_PER_CONTAINER50container_dns_requests_total中每个容器允许的唯一 FQDN 数量上限;超出部分归入domain="~other"
--max-label-lengthMAX_LABEL_LENGTH4096指标标签最大长度

--max-fqdns-per-container与 3.6 中的模式限制是控制**指标基数(cardinality)**的关键旋钮:DNS 域名与日志模式是典型的高基数来源,通过封顶与~other兜底桶,可以确保大规模集群下 Prometheus/ClickHouse 的序列数量保持可控。

3.8 数据导出:统一端点与分通道端点

Flag环境变量默认值说明
--collector-endpointCOLLECTOR_ENDPOINT遥测导出的统一基础 URL
--api-keyAPI_KEYCoroot API Key(多项目/多租户场景下用于区分项目)
--metrics-endpointMETRICS_ENDPOINT指标导出的自定义 URL
--traces-endpointTRACES_ENDPOINT链路导出的自定义 URL
--traces-samplingTRACES_SAMPLING1.0链路采样率(0.0 ~ 1.0)
--logs-endpointLOGS_ENDPOINT日志导出的自定义 URL
--profiles-endpointPROFILES_ENDPOINT剖析数据导出的自定义 URL
--profiles-prune-fractionPROFILES_PRUNE_FRACTION0.0025丢弃占剖析总量比例低于该值的非关键代码路径(0关闭裁剪)
--insecure-skip-verifyINSECURE_SKIP_VERIFYfalse跳过 TLS 证书校验(仅建议在测试环境使用)
--ca-fileCA_FILE自定义 CA 证书文件路径(用于自签名证书的采集端场景)

推荐配置方式:只设置--collector-endpoint+--api-key,让 Agent 把四类数据统一发往 Coroot;仅当需要将某一类数据分流到独立后端(例如把指标发往 VictoriaMetrics、链路发往自有 OTLP Collector)时,才覆盖对应的*_endpoint。在 Coroot 的多租户模式下,Agent 通过 Remote Write 将指标推送至 Coroot,由 Coroot 自动为每个指标附加coroot_project_id标签——这正是--api-key发挥作用的地方。

3.9 采集节奏与本地缓冲

Flag环境变量默认值说明
--scrape-intervalSCRAPE_INTERVAL15s内部指标采集频率
--wal-dirWAL_DIR/tmp/coroot-node-agentWAL 存储目录(容器化部署应挂载持久卷,见 docker-compose 中的/data
--max-spool-sizeMAX_SPOOL_SIZE500MB磁盘上 spool 的最大容量

WAL 与 spool 提供了「采集与导出解耦」的本地缓冲能力:即使 Coroot 服务端或网络短暂不可用,Agent 也会先把数据写入本地,恢复后再补传,避免数据丢失。

四、Windows 平台:COROOT_ 前缀与平台子集

Windows 版 Agent 复用相同的 Flag,但仅支持平台无关的子集。Linux 专属能力(eBPF L7 追踪与剖析、cgroups、Java/Python/Node.js 插桩、ICMP pinger、systemd 处理、trace/profile 导出)不适用。

关键差异:Flag 名称保持一致(如--scrape-interval),但环境变量一律加COROOT_前缀——因为 Windows 环境变量是全局的,前缀可以避免与其他软件冲突。例如SCRAPE_INTERVAL在 Windows 上写作COROOT_SCRAPE_INTERVAL

Flag环境变量说明
--collector-endpointCOROOT_COLLECTOR_ENDPOINTCoroot 实例的基础 URL
--api-keyCOROOT_API_KEY项目 API Key
--scrape-intervalCOROOT_SCRAPE_INTERVAL指标采集间隔
--metrics-endpoint/--logs-endpointCOROOT_METRICS_ENDPOINT/COROOT_LOGS_ENDPOINT自定义导出 URL
--insecure-skip-verifyCOROOT_INSECURE_SKIP_VERIFY跳过对采集端(collector)的 TLS 校验
--ca-fileCOROOT_CA_FILE自定义 CA 证书路径
--disable-log-parsingCOROOT_DISABLE_LOG_PARSING关闭 Windows Event Log 与容器日志采集
--disable-json-log-parsingCOROOT_DISABLE_JSON_LOG_PARSING关闭从 JSON 日志中提取 message、severity、attributes
--disable-gpu-monitoringCOROOT_DISABLE_GPU_MONITORING关闭 NVIDIA GPU 监控
--container-allowlist/--container-denylistCOROOT_CONTAINER_ALLOWLIST/COROOT_CONTAINER_DENYLIST需要包含 / 排除的服务正则
--provider/--region/--availability-zone/--instance-type/--instance-life-cycleCOROOT_PROVIDER覆盖node_cloud_info标签
--wal-dir/--max-spool-sizeCOROOT_WAL_DIR/COROOT_MAX_SPOOL_SIZEspool 目录与最大容量
--listenCOROOT_LISTEN本地/metrics监听地址

在 Windows 上通过 MSI 或机器级环境变量设置这些参数,可参考 Windows 安装指南。典型做法是:先用iwr -useb ...install.ps1 | iexCOROOT_COLLECTOR_ENDPOINT/COROOT_API_KEY完成首次安装,随后通过 PowerShell 修改机器级变量并重启服务:

[Environment]::SetEnvironmentVariable("COROOT_SCRAPE_INTERVAL", "30s", "Machine") Restart-Service coroot-windows-agent

五、容器级细粒度控制

除了全局配置,还可以在单个容器内部设置环境变量,由 Agent 从容器进程环境中读取,实现逐容器的采集开关(详见 eBPF profiling 文档中关于/proc/<pid>/environ检查机制的说明,见 ebpf-based-profiling.md):

环境变量说明
COROOT_EBPF_PROFILING=disabled关闭该容器的 eBPF 剖析
COROOT_LOG_MONITORING=disabled关闭该容器的日志监控与解析
COROOT_EBPF_TRACES=disabled关闭该容器的 eBPF 链路追踪

典型用法是在业务容器的environment中注入这些变量,例如对已知高噪音或敏感的容器显式排除剖析与日志采集,无需重启节点 Agent。

六、安装与部署实战

Docker Compose

最省事的方式是直接复用仓库内的 deploy/docker-compose.yaml:其中node-agent服务已配好 privileged、host PID 与全部挂载,Prometheus 也通过--web.enable-remote-write-receiver开启了 Remote Write 接收端。执行:

curl -fsS https://raw.githubusercontent.com/coroot/coroot/main/deploy/docker-compose.yaml | \ docker compose -f - up -d

Docker Swarm

Swarm 不支持 privileged 容器,需要在每个节点手动运行 Agent(见 quick-start/community-edition.md),将NODE_IP替换为集群中任意节点 IP:

docker run --detach --name coroot-node-agent \ --pull=always \ --privileged --pid host \ -v /sys/kernel/tracing:/sys/kernel/tracing:rw \ -v /sys/kernel/debug:/sys/kernel/debug:rw \ -v /sys/fs/cgroup:/host/sys/fs/cgroup:ro \ ghcr.io/coroot/coroot-node-agent \ --cgroupfs-root=/host/sys/fs/cgroup \ --collector-endpoint=http://NODE_IP:8080

Ubuntu / Debian 裸机

在安装 Coroot 服务端后,通过官方安装脚本在每个节点部署 Agent(见 ubuntu 安装文档):

curl -sfL https://raw.githubusercontent.com/coroot/coroot-node-agent/main/install.sh | \ COLLECTOR_ENDPOINT=http://127.0.0.1:8080 \ SCRAPE_INTERVAL=15s \ sh -

升级时重跑同一命令即可;卸载可执行/usr/local/bin/coroot-uninstall.sh

Kubernetes

在 Kubernetes 中 Agent 由 Coroot Operator 以 DaemonSet 形态自动部署到每个节点(见 kubernetes 安装文档),无需手工管理;只要不钉死镜像版本,升级 Coroot 时 Operator 会自动升级 node agent。

七、配置项与指标清单的对应关系

Agent 的配置最终都体现在指标输出上,二者结合阅读效果最佳。完整指标清单见 metrics/node-agent 参考,其中有几条与本文配置项直接呼应:

  • --disable-pingercontainer_net_latency_seconds(基于 ICMP 往返时延测量);
  • --max-fqdns-per-containercontainer_dns_requests_totaldomain标签封顶与~other桶;
  • --enable-java-async-profilercontainer_jvm_alloc_bytes_totalcontainer_jvm_lock_contentions_total等 async-profiler 派生指标;
  • --provider/--region/--availability-zone等 ↔node_cloud_infoproviderregionavailability_zoneinstance_typeinstance_life_cycle标签;
  • --log-pattern-extraction-limitcontainer_log_messages_totalevent was sampled模式;
  • --cgroupfs-root↔ 全部container_resources_*资源指标(CPU、内存、磁盘,数据来源为 cgroup 各子系统文件)。

八、深入阅读

  • 指标全集与标签语义:docs/docs/metrics/node-agent.md
  • 组件职责与数据流:docs/docs/installation/architecture.md
  • eBPF 追踪能力:docs/docs/tracing/ebpf-based-tracing.md
  • eBPF 剖析与运行时符号化:docs/docs/profiling/ebpf-based-profiling.md
  • Windows 部署与运维:docs/docs/installation/windows.md
  • 指标后端(Prometheus Remote Write / ClickHouse / 多租户):docs/docs/configuration/prometheus.md

【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/coroot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 21:36:08

VS2022 从零配置 Qt6 开发环境:安装、插件与避坑完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 21:32:47

Wireshark抓包实战:过滤器、TCP重传、TLS解密与RTP还原

抓包这件事&#xff0c;说难不难&#xff0c;说简单也真容易翻车。我第一次打开 Wireshark 的时候&#xff0c;满屏花花绿绿的包在滚&#xff0c;脑子里只有一个念头&#xff1a;这玩意儿到底是给谁看的&#xff1f;后来踩了几次坑才回过味来——Wireshark 本身不是"分析工…

作者头像 李华
网站建设 2026/9/16 21:31:53

System Prompt泄露实战指南:从路径分析到防御与止损

system_prompts_leaks 这个词最近在圈子里被反复刷到&#xff0c;很多人把它当成一场“热闹的抓马”在看。但作为长期做 LLM 应用的人&#xff0c;我第一反应不是吃瓜&#xff0c;而是想起自己踩过的一个坑&#xff1a;某次内部 Agent 试运行&#xff0c;用户只是多问了一句“把…

作者头像 李华
网站建设 2026/9/16 21:31:07

cc-switch 走 TaoToken 通道后,WSL 里 claude 对话验证通过

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华