资讯动态

OneUptime Profiles Monitor 指南:用连续性能分析数据驱动告警的配置与实现原理

发布时间:2026/9/20 21:05:19 来源:尧图企业网站定制
OneUptime Profiles Monitor 指南用连续性能分析数据驱动告警的配置与实现原理【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime本指南讲解 OneUptime 中的Profiles Monitor性能分析监控如何基于应用上报的连续性能分析Continuous Profiling数据按 Profile 数量与模式触发告警并配置服务范围、Profile 类型、自定义属性和时间窗口等过滤条件。读完本文你将掌握在 OneUptime Dashboard 中创建 Profiles Monitor 的完整流程、每个配置项的含义与默认值、六种告警判断条件的使用方法并能从源码层面理解Profile 计数这一检查项背后的查询与评估机制。一、什么是 Profiles MonitorProfiles Monitor 是 OneUptime 监控体系中针对连续性能分析数据Continuous Profiling的一类监控器。与日志监控Logs、链路监控Traces、指标监控Metrics并列Profile 监控负责对应用的函数级 CPU 耗时、内存分配等性能数据进行计数与过滤并在满足条件时触发告警。OneUptime 会在一个**时间窗口Time Window**内评估来自遥测服务的 Profile 数据从而帮助你监控应用的连续性能分析数据是否持续上报按 Profile 类型CPU、内存、Goroutines 等过滤数据跟踪 Profile 的数量与模式volume and patterns对性能分析异常如 Profile 数据中断、数量骤变发出告警基于自定义 Profile 属性attributes进一步缩小过滤范围。从源码结构看Profile 数据在 OneUptime 中存储在 ClickHouse 的Profile分析表中对应 Profile.ts该表采用 MergeTree 引擎以projectId / startTime / primaryEntityId / profileType为排序键与主键并按toYYYYMMDD(startTime)分区。每个 Profile 记录包含profileType如cpu、wall、alloc_objects、alloc_space、goroutine、attributesProfile 级属性 Map、entityKeys服务、主机、Pod、容器等 OpenTelemetry 实体键数组、sampleCount、startTime/endTime等字段。Profiles Monitor 正是围绕这张表做条件查询与计数。二、创建 Profiles Monitor在 OneUptime Dashboard 中创建一个 Profiles Monitor 的步骤如下进入Monitors监控器页面点击Create Monitor创建监控器在监控器类型中选择Profiles性能分析选择要监控的遥测服务Telemetry Services按需配置Profile 过滤器与监控标准Criteria。创建完成后监控器会按配置的监控间隔monitoring interval周期性执行评估。后端调度与评估链路从源码角度Profiles Monitor 属于遥测监控器Telemetry Monitor家族。Worker 进程中的 MonitorTelemetryMonitor.ts 负责每周期扫描到期监控器并入队评估任务当monitorType MonitorType.Profiles时会调用内部的monitorProfile()函数——它把监控步骤中的 Profile 配置通过MonitorStepProfileMonitorUtil.toQuery()编译成查询再交给ProfileService.countBy()统计符合条件的数据条数最终封装为ProfileMonitorResponse含profileCount与profileQuery见 ProfileMonitorResponse.ts。该计数值随后会被 Criteria 评估器与六种过滤条件比较决定是否触发告警。三、配置选项详解Profiles Monitor 的配置由 MonitorStepProfileMonitor.ts 定义主要包含以下部分。3.1 遥测服务Telemetry Services选择一个或多个服务作为 Profile 数据的来源。这些服务必须正在通过 OpenTelemetry 向 OneUptime 上报连续性能分析数据具体接入方式见本文第六节。源码中对应字段为telemetryServiceIdsArrayObjectID。在toQuery()中它会被编译为query.primaryEntityId new Includes(monitorStepProfileMonitor.telemetryServiceIds);即按primaryEntityIdProfile 归属的资源 ID通常是服务 ID做 IN 匹配限制只统计所选服务上报的 Profile。3.2 实体键Entity Keys这是源码中新增的可选过滤维度entityKeys?: Arraystring。实体键是每条遥测信号所属 OpenTelemetry 实体的稳定标识如 service、host、k8s.pod、container 等。从注释可以看出它用于将监控器限定在entityKeys列中携带这些键中任意一个的 Profile 上服务端会编译为hasAny(entityKeys, [...])的数组包含判断。兼容性说明该字段是可选的在此字段出现之前保存的监控器该字段为undefined不会被过滤行为与旧版本一致。3.3 Profile 过滤器Profile Filters下表汇总了可用的 Profile 过滤器参数说明结合了 MonitorStepProfileMonitor.ts 的实现过滤器说明是否必填Profile 类型Profile Types按 Profile 类型名称过滤例如 CPU、memory、goroutines否属性Attributes用于过滤自定义 Profile 属性的键值对否时间窗口Time Window向前回溯搜索 Profile 的时间范围单位秒默认60否各过滤器的源码实现MonitorStepProfileMonitorUtil.toQuery()Profile 类型支持两种写法。profileTypes数组编译为query.profileType new Includes(profileTypes)即WHERE profileType IN (...)用于精确指定多个原始类型profileType单个字符串编译为query.profileType new Search(profileType)即模糊搜索匹配。属性当attributes非空时query.attributes monitorStepProfileMonitor.attributes对 Profile 的 attributes Map 做键值对精确匹配。这让你可以按业务自定义标签如region、deployment、service.version圈定数据范围。时间窗口lastXSecondsOfProfiles决定回溯多远。实现上以当前时间 - lastXSecondsOfProfiles作为窗口起点、当前时间为终点const endDate: Date OneUptimeDate.getCurrentDate(); const startDate: Date OneUptimeDate.addRemoveSeconds( endDate, monitorStepProfileMonitor.lastXSecondsOfProfiles * -1, ); query.startTime new InBetween(startDate, endDate);即对startTime做闭区间过滤。getDefault()给出的默认值为lastXSecondsOfProfiles: 60对应文档中的默认 60 秒。3.4 与 Profile 类型选择器的一致性在 Dashboard 中Profile 类型的选择与 ProfileTypeSelector.tsx 和 ProfileUtil.ts 保持一致主选择器以类别Everything / CPU time / Memory / Locks为心智模型高级下拉框提供具体原始类型CPU samples、Wall time、inuse_objects、inuse_space、alloc_objects、alloc_space、Heap memory、Goroutines、Mutex contention、Lock contention、Blocking operations。类别会被展开为具体类型再参与过滤getQueryProfileTypescpu→[cpu, samples]memory→[inuse_space, alloc_space, heap]仅字节计值类型避免与对象计数值混加产生无意义总和locks→[mutex, contention, block]wall→[wall]goroutines→[goroutine]。这解释了为何 profiles.md 中cpu/samples、inuse_space、goroutine等会作为 OneUptime UI 中的一级类型展示。四、监控标准Monitoring Criteria4.1 可用的检查项当前 Profiles Monitor 只提供一种检查维度检查类型说明Profile 数量Profile Count在时间窗口内匹配你过滤条件的 Profile 数量对应的枚举值定义在 CriteriaFilter.ts 中CheckOn.ProfileCount Profile Count。在 Dashboard 的表单逻辑中MonitorType.Profiles会把检查项下拉框锁定为唯一的CheckOn.ProfileCount见 CriteriaFilter.ts与后端 Worker 中monitorProfile()返回的profileCount一一对应。4.2 六种过滤条件Profile 数量可以与以下六种条件进行比较对应FilterType枚举Greater Than大于— Profile 数量超过阈值Less Than小于— Profile 数量低于阈值Greater Than or Equal To大于等于— Profile 数量高于或等于阈值Less Than or Equal To小于等于— Profile 数量低于或等于阈值Equal To等于— Profile 数量恰好等于阈值Not Equal To不等于— Profile 数量不等于阈值。这六种条件由 CriteriaFilter.ts 中的FilterType枚举定义并被所有使用数值阈值的监控器类型共用。4.3 示例5 分钟内未收到任何 Profile 即告警这是文档中给出的典型场景——用于检测某个服务的性能分析数据断流。配置如下时间窗口Time Window300 秒5 分钟检查项Check OnProfile CountProfile 数量过滤条件Filter TypeEqual To等于值Value0。该配置的含义是评估器在最近 300 秒窗口内统计符合条件的 Profile 数量若数量恰好为 0则判定满足告警条件并触发告警。当你想确认性能分析采集管线仍在正常运行时这是最直观的心跳式heartbeat监控手段。五、评估与告警的完整闭环综合源码一个 Profiles Monitor 从配置到告警的完整链路如下配置持久化监控步骤中的profileMonitor子配置保存telemetryServiceIds、entityKeys、profileTypes/profileType、attributes、lastXSecondsOfProfiles等字段周期调度Worker 的 MonitorTelemetryMonitor.ts 根据监控间隔轮询到期监控器将评估任务写入 Telemetry 队列查询编译MonitorStepProfileMonitorUtil.toQuery()将配置编译为 ClickHouse 查询服务 IN 匹配、实体键包含、属性精确匹配、类型 IN / 搜索、startTime窗口过滤计数ProfileService.countBy()在Profile分析表上执行计数得到profileCount标准评估profileCount与用户配置的过滤条件如 Equal To 0比较生成评估结果ProfileMonitorResponse中还可携带evaluationSummary资源处理MonitorResourceUtil.monitorResource(response)依据评估结果更新监控器状态、创建告警/事件。由于 Profile 数据本身还支持火焰图可视化、函数列表、Trace 关联等能力详见 profiles.mdProfiles Monitor 与这些可视化能力共享同一数据源因此你可以在告警后直接跳转到对应时间段的火焰图定位热点函数。六、前置要求向 OneUptime 上报连续性能分析数据使用 Profiles Monitor 的前提是你的应用正在向 OneUptime 上报连续性能分析数据。OneUptime 暴露了Pyroscope 兼容的摄入 API——任何能向 Pyroscope 服务端推送数据的组件Grafana Alloy eBPF 分析器或 Pyroscope 语言 SDK都可以向 OneUptime 推送。主要接入方式详见 telemetry/profiles.mdGrafana Alloy eBPF推荐零代码侵入通过 eBPF 采集 Linux 主机上每个进程的 CPU Profile无需改造应用代码配置pyroscope.ebpf与pyroscope.write组件将接收端指向 OneUptime 的/pyroscope端点并通过x-oneuptime-token请求头携带遥测摄入令牌Pyroscope 语言 SDK进程内分析在 Go、Node.js、Python、.NET、Ruby、Rust 等应用内启动 Pyroscope SDK将ServerAddress指向https://oneuptime.com/pyroscope自托管部署则指向http(s)://YOUR-ONEUPTIME-HOST/pyroscope并把摄入令牌作为AuthToken/auth_token传入格式支持pprofGo/Node.js/.NET SDK 与 Alloy与 folded/collapsed 文本Python/Ruby/Rust SDK均已支持JFRJava Flight Recorder暂未接入Java 服务请使用 Grafana Alloy eBPF 方案。验证上报是否成功可以在Products Performance Profiles页面查看火焰图是否出现——Alloy 默认 15 秒采集间隔下通常一分钟内即可看到首批数据。只有数据持续上报Profiles Monitor 的计数与告警才有意义。七、小结Profiles Monitor 把连续性能分析这一观测数据源变成了可告警的监控信号通过服务选择、Profile 类型、自定义属性与时间窗口的组合过滤再配合 Profile Count 检查项和六种数值比较条件你可以实现对性能分析数据断流Profile 数量异常等场景的自动化告警。其底层由 ClickHouse 的Profile分析表、Worker 的monitorProfile()计数逻辑与通用的 Criteria 评估框架协同完成配置上的每个字段都能在源码MonitorStepProfileMonitor.ts、CriteriaFilter.ts、Profile.ts中找到对应实现方便你在排查告警误报或扩展自定义过滤器时快速定位。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价