Coroot 开源可观测性与 AI 根因分析平台:零插桩监控、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 是一个开源的云原生可观测性与 APM(应用性能监控)平台,核心定位是把"采集指标、日志、追踪"升级为"直接给出可执行的洞察"。本文以仓库根目录 README.md 为主线,结合 main.go、deploy/docker-compose.yaml、config/config.go 等源码,系统讲解它的功能体系、数据接入方式、部署与配置方法,帮助你理解并落地一套从零插桩采集到 AI 根因分析的完整观测方案。
项目定位:不只是采集,而是把数据变成洞察
Coroot 的出发点非常明确——"收集指标、日志和追踪本身并不会让应用变得可观测(Collecting metrics, logs, and traces alone doesn't make your applications observable),Coroot 会把这些数据转化为你可以直接行动的洞察"。
从仓库结构看,Coroot 是一个单体 Go 服务(入口 main.go,模块覆盖 api、collector、auditor、constructor、watchers、db、clickhouse、prom 等),后端自带一套 Vue 3 前端(front),所有静态资源通过go:embed直接嵌入二进制(见 main.go),因此它可以作为单个 Docker 容器或单个 Deployment 部署到任意 Kubernetes 集群。
它提供的能力覆盖四种遥测数据(metrics、logs、traces、profiles),并在此基础上叠加了 SLO 告警、预置检查项(Inspections)、部署追踪与成本监控,最后通过 AI 驱动的原因分析(RCA)把问题收敛到根因。该版本为 Community Edition(见 main.go)。
核心功能体系
1. 零插桩可观测性(Zero-instrumentation observability)
这是 Coroot 最核心的差异化能力:
- 通过 eBPF 自动采集指标、日志、追踪与性能剖析数据,无需修改业务代码;
- 提供覆盖 100% 系统的 Service Map(服务地图),不留盲区;
- 预置的 Inspections(检查项)无需任何配置即可对每个应用进行审计。
这里的 Service Map 对应前端视图 ServiceMap.vue 与后端 api/views/overview/service_map.go,它会自动发现集群内的应用、中间件及其调用关系。
2. 应用健康摘要(Application Health Summary)
面对成百上千个服务时,Coroot 提供:
- 应用健康状态总览(对应前端 AppHealth.vue 与 model/status.go 中的状态模型);
- 应用日志的自动洞察,无需逐个手动排查(日志聚类与模式识别见 model/log.go);
- SLO(服务级别目标)跟踪,对应 model/sli.go 与前端 CheckConfigSLOAvailabilityForm.vue。
3. 分布式追踪:一键下钻任何异常请求
- 任何异常只需一次点击即可调查;
- 基于 OpenTelemetry 的中立厂商插桩标准;
- 对于无法插桩的遗留系统或第三方服务,Coroot 的 eBPF 采集可以在不改代码的情况下捕获请求。
从源码看,追踪数据链路包括 OTLP gRPC 服务(collector/grpc.go 注册了LogsService与TraceService)、HTTP 接收端/v1/traces(main.go)以及 ClickHouse 中的追踪存储(clickhouse/traces.go),前端对应 TracingTrace.vue 与 Traces.vue。
4. 日志洞察:扫一眼即可掌握关键信息
- Log patterns:开箱即用的事件聚类(见 model/log.go 与前端 LogPattern.vue);
- 日志到追踪的无缝关联(logs-to-traces correlation);
- 基于 ClickHouse 的极速全文搜索(存储实现见 clickhouse/logs.go,前端见 Logs.vue)。
5. 一键性能剖析(Profiling)
- 将任何 CPU 或内存的意外尖峰分析到具体的代码行;
- 不靠猜测,精确知道资源花在了哪里;
- 通过与系统基线行为对比,轻松调查任何异常。
剖析数据的采集与存储见 collector/profiles.go,火焰图展示见前端 FlameGraph.vue,界面入口为 Profiling.vue。
6. 内置专家系统(Built-in expertise)
- Coroot 能够自动识别大部分常见问题(官方宣称可自动识别超过 80% 的问题——该数值来自 README 的官方表述);
- 当应用未达到 SLO 时,Coroot 会发送一条包含所有相关检查结果的告警;
- 你可以针对单个应用或整个项目轻松调整任意检查项。
这一能力由 auditor 模块(审计/检查器)和 watchers 模块共同实现:watchers.Start会定期构建系统模型并调用auditor.Audit(见 watchers/watchers.go),审计结果驱动告警与事件。检查项涵盖 CPU、内存、网络、存储、JVM、Python、Node.js、MySQL、PostgreSQL、Redis、MongoDB、Memcached、GPU、SLO 等领域,完整清单见 auditor 目录。
7. 部署追踪(Deployment Tracking)
- 自动发现并监控 Kubernetes 集群中的每一次应用发布(rollout);
- 无需与 CI/CD 流水线集成;
- 每个版本自动与上一版本对比,不会错过任何细微的性能劣化;
- 结合成本监控,开发者可以跟踪每次变更对云账单的影响。
实现位于 watchers/deployments.go 与 model/application_deployment.go,前端对应 Deployments.vue。
8. 成本监控(Cost Monitoring)
- 把云成本细化到具体应用;
- 不需要访问你的云账号,也不需要任何额外配置;
- 支持 AWS、GCP、Azure。
成本计算由 cloud-pricing 模块(价格目录管理器)与 model/costs.go 实现,价格数据缓存于data/cloud-pricing目录(见 main.go)。
系统架构与数据链路
从 main.go 的启动流程可以还原出整体架构:
- 配置加载:
config.Load()读取 YAML 配置文件与命令行参数(config/config.go); - 元数据库初始化:默认使用 SQLite(数据目录
data_dir下),配置了pg-connection-string时改用 PostgreSQL(main.go); - Bootstrap:创建默认项目、写入 bootstrap 的 Prometheus / ClickHouse 集成配置(config/bootstrap.go);
- 指标缓存:
cache.NewCache建立 Prometheus/ClickHouse 查询缓存(TTL 默认 30 天,config/config.go); - gRPC + Collector:
grpc.NewServer启动 OTLP gRPC 接收端(默认:4317),collector.New注册日志/追踪 gRPC 服务,并将数据批量写入 ClickHouse(批大小上限 10000 条、超时 5 秒,见 collector/collector.go); - 审计与告警:
watchers.Start按缓存更新事件触发constructor.New(构建系统世界模型)→auditor.Audit(执行检查)→ incidents / deployments / alerts 三个并行的评估器(watchers/watchers.go); - HTTP 服务:gorilla/mux 路由同时承载 UI 静态资源、
/api/*管理接口、/v1/*遥测接收接口、Prometheus HTTP API 兼容代理(/api/project/{project}/prom/api/v1/*)以及 MCP(Model Context Protocol)OAuth 端点。
多副本部署时,watchers通过数据库锁GetPrimaryLock保证同一时间只有一个副本执行审计/告警任务(watchers/watchers.go)。
安装部署
Coroot 可以以 Docker 容器方式运行,也可以部署到任意 Kubernetes 集群。这里以仓库自带的 deploy/docker-compose.yaml 为完整参考,它一次拉起 6 个组件:coroot 主服务、node-agent、cluster-agent、prometheus、clickhouse。
name: coroot services: coroot: restart: always image: ghcr.io/coroot/coroot${LICENSE_KEY:+-ee} # 定义 LICENSE_KEY 时使用 coroot-ee 镜像 pull_policy: always user: root volumes: - coroot_data:/data ports: - 8080:8080 command: - '--data-dir=/data' - '--bootstrap-prometheus-url=http://prometheus:9090' - '--bootstrap-refresh-interval=15s' - '--bootstrap-clickhouse-address=clickhouse:9000' environment: - LICENSE_KEY=${LICENSE_KEY:-} depends_on: clickhouse: condition: service_healthy prometheus: condition: service_healthy各组件职责如下:
| 组件 | 镜像 | 作用 |
|---|---|---|
| coroot | ghcr.io/coroot/coroot | 主服务,提供 UI、API、OTLP 接收端与审计引擎 |
| node-agent | ghcr.io/coroot/coroot-node-agent | 节点级 eBPF 采集器,privileged: true并挂载/sys/kernel/tracing、/sys/kernel/debug、cgroupfs,通过--collector-endpoint=http://coroot:8080上报 |
| cluster-agent | ghcr.io/coroot/coroot-cluster-agent | 集群级指标采集器,15 秒抓取一次指标并写入本地 WAL |
| prometheus | prom/prometheus:v2.53.5 | 指标存储,开启了--web.enable-remote-write-receiver接收 remote write |
| clickhouse | clickhouse/clickhouse-server:24.3 | 日志、追踪、剖析数据的存储 |
Docker Compose 快速启动
git clone https://gitcode.com/GitHub_Trending/co/coroot cd coroot/deploy docker compose up -d启动后访问http://<主机>:8080。首次启动默认管理员账号的初始密码定义在 db/db.go 的AdminUserDefaultPassword常量中,可通过--auth-bootstrap-admin-password或环境变量AUTH_BOOTSTRAP_ADMIN_PASSWORD覆盖,也可以运行coroot set-admin-password命令交互式设置(见 main.go)。
生产环境注意事项(从 compose 文件推导)
- Prometheus 与 ClickHouse 的端口默认只绑定在
127.0.0.1,避免把存储端口直接暴露到公网; - coroot 以
user: root运行并挂载数据卷coroot_data,这是为了持久化元数据库、指标缓存与云价格数据; - ClickHouse 通过 configs 注入配置关闭了自身的 query log 等内部日志表(见 deploy/docker-compose.yaml),减少存储开销。
Kubernetes 部署
将 Coroot 部署到 Kubernetes 时,可直接使用仓库中的 manifests/coroot.yaml 作为起点(包含 Deployment、Service 等基本资源),并按需补充 PVC 与 Ingress。更多安装方式(k8s-operator、Docker Swarm、RHEL、Ubuntu、Windows 等)可参考仓库 docs/docs/installation 下的安装文档。
配置参数详解
Coroot 同时支持三种配置来源:YAML 配置文件(--config或环境变量CONFIG)、命令行参数、环境变量。配置合并与校验逻辑见 config/config.go,命令行参数定义见 config/flags.go。常用参数如下:
| 参数 / 环境变量 | 默认值 | 说明 |
|---|---|---|
--listen/LISTEN | :8080 | HTTP 监听地址 |
--https-listen/HTTPS_LISTEN | 空 | HTTPS 监听地址,需配合 TLS 证书 |
--url-base-path/URL_BASE_PATH | / | 部署在子路径时使用,如/coroot/ |
--data-dir/DATA_DIR | ./data | 数据目录(SQLite 元数据库、缓存、价格数据) |
--default-time-range/DEFAULT_TIME_RANGE | 1h | UI/API 默认时间范围(如 30m、1h、3h,须为整分钟) |
--cache-ttl/CACHE_TTL | 30d | 指标缓存 TTL |
--traces-ttl/TRACES_TTL | 7d | 追踪数据 TTL |
--logs-ttl/LOGS_TTL | 7d | 日志数据 TTL |
--profiles-ttl/PROFILES_TTL | 7d | 剖析数据 TTL |
--metrics-ttl/METRICS_TTL | 7d | 指标数据 TTL |
--pg-connection-string/PG_CONNECTION_STRING | 空 | PostgreSQL 连接串;不设置则使用 SQLite |
--auth-anonymous-role/AUTH_ANONYMOUS_ROLE | 空 | 关闭认证并给匿名用户分配 Admin/Editor/Viewer 角色 |
--auth-bootstrap-admin-password/AUTH_BOOTSTRAP_ADMIN_PASSWORD | 内置默认值 | 默认 Admin 用户密码 |
--do-not-check-for-deployments | false | 关闭部署自动追踪 |
--do-not-check-for-updates | false | 关闭新版本检查 |
--disable-usage-statistics | false | 关闭匿名使用统计 |
--disable-builtin-alerts | false | 关闭所有内置告警规则 |
--bootstrap-prometheus-url | 空 | 引导默认项目的 Prometheus 地址 |
--bootstrap-refresh-interval | 空 | 引导 Prometheus 的抓取刷新间隔(compose 示例为 15s) |
--bootstrap-clickhouse-address | 空 | 引导默认项目的 ClickHouse 地址(native 协议,如clickhouse:9000) |
--grpc-listen/GRPC_LISTEN | :4317 | OTLP gRPC 接收端监听地址 |
--global-prometheus-*/GLOBAL_PROMETHEUS_* | 空 | 全局 Prometheus 集成(URL、账号、自定义请求头、remote-write、use-clickhouse 等) |
--global-clickhouse-*/GLOBAL_CLICKHOUSE_* | 空 | 全局 ClickHouse 集成(地址、账号、TLS 等) |
值得注意的两个细节(依据 config/config.go 与 config/config.go 的校验逻辑):
- ClickHouse 地址校验:
address必须包含 host 与 port(例如clickhouse:9000),否则启动失败; - Prometheus 校验:
refresh_interval必须大于 0;URL 必须带http://或https://协议前缀;extra_selector会被校验为合法的 Prometheus 标签选择器。
此外,配置文件支持os.ExpandEnv展开环境变量(config/config.go),因此 YAML 中可以直接写${VAR}形式的占位符。
多项目与配置文件驱动的进阶使用
Coroot 支持在配置文件中定义多个项目(Project),适用于多租户或多集群场景(config/project.go)。每个项目可声明:
name:项目名;apiKeys/api_keys:接入遥测数据的 API Key(校验逻辑要求项目必须定义 API Key,除非使用memberProjects或remoteCoroot);memberProjects:成员项目,用于聚合多个集群为一个多集群项目;remoteCoroot:把另一套 Coroot 实例作为数据源(通过其 API Key 读取指标与日志);notificationIntegrations:Slack、PagerDuty、Opsgenie、Teams、Webhook 等通知集成(实现见 notifications 目录);applicationCategories:应用分类;customApplications:自定义应用;alertingRules:告警规则(支持对内置规则按 id 覆盖名称、severity、for、模板等,合并逻辑见 config/project.go);inspectionOverrides:SLO 可用性/延迟检查的覆盖(objectivePercent、objectiveThreshold)。
这些配置在启动时通过cfg.Bootstrap写入数据库并标记为只读(见 config/bootstrap.go),其中syncConfigAlertingRules会按 id 对内置告警规则执行"存在则更新、缺失则新建"的同步策略(config/bootstrap.go)。
数据接入方式汇总
综合 main.go 与 collector/grpc.go,Coroot 提供以下接入通道:
- OTLP gRPC(首选):
:4317端口接收 OpenTelemetry 的 Trace 与 Log 导出(标准 OTLP 协议,项目识别通过 gRPC metadata 中的X-API-Key头,见 collector/grpc.go); - HTTP 接收端:
/v1/metrics、/v1/traces、/v1/logs、/v1/profiles、/v1/config(main.go),供 coroot-node-agent / coroot-cluster-agent 上报; - eBPF 零插桩采集:node-agent(
privileged容器 + 内核 tracing/debug 挂载)自动捕获节点级指标、请求与剖析数据; - Prometheus 集成:支持抓取既有 Prometheus 或使用其 remote-write 能力(
use_clickhouse模式可直接把指标存进 ClickHouse); - Prometheus HTTP API 兼容代理:Coroot 自身暴露
/api/project/{project}/prom/api/v1/*与/api/v1/query_range等端点,可用 API Key 认证后对接 Grafana 等下游工具(main.go)。
遥测数据最终批量写入 ClickHouse(每次最多 10000 条或 5 秒内刷出,collector/collector.go),并受各 TTL 参数约束;当 ClickHouse 磁盘使用率超过阈值(默认 70%,可配clickhouse_space_manager_usage_threshold)时,空间管理器会自动清理旧分区(config/config.go)。
小结
Coroot 的价值在于把观测的三层闭环"采集 → 关联 → 洞察"中的最后一步自动化:通过 eBPF 实现零插桩采集,用 Service Map 建立全量拓扑,用 Inspections 完成内置专家审计,用 SLO 告警收敛噪音,再用部署追踪和成本监控把每次变更的影响量化。仓库中的 README.md 给出了功能全貌,而 deploy/docker-compose.yaml 提供了一条开箱即用的落地路径——克隆仓库后执行docker compose up -d,即可在几分钟内体验完整的可观测性平台。若需深入源码,建议从 main.go 的启动链路入手,依次阅读 config、collector、constructor、auditor 与 watchers 五个模块。
【免费下载链接】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),仅供参考