docker-ce 指标采集实践指南:go-metrics 统一 Prometheus 度量约定的原理与实战
容器运行时云原生【免费下载链接】docker-ce:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:项目地址https://gitcode.com/gh_mirrors/do/docker-ce点击查看免费下载go-metrics 是 Docker 官方为规范自身项目指标采集而封装的一个轻量库它并不是 Prometheus Go 客户端的替代品而是在其之上强制统一的命名、标签与单位约定让 Docker 生态中各模块导出的指标风格一致、易于检索与聚合。本文以本仓库components/engine/vendor/github.com/docker/go-metrics下的文档与源码为主线系统讲解其核心 API、最佳实践约定并结合 docker-ce 引擎内 daemon、builder、logger 等模块的真实用法帮助读者在自己的 Docker 组件或 Prometheus 集成中快速落地这套度量规范。一、go-metrics 是什么约定优先的 Prometheus 封装从包内docs.go的定义可以读出它的定位This package is small wrapper around the prometheus go client to help enforce convention and best practices for metrics collection in Docker projects.docs.go即这是一个“约定与最佳实践执行器”。它不是Prometheus client 的替代品而是用于保证不同 Docker 项目采集的指标在命名上保持一致的约束层。README 明确建议如果还没读过 Prometheus 官方关于命名与标签的最佳实践应当先补齐这部分知识而本库的目标是让“Docker 项目内所有指标”遵循同一套规则。从依赖关系看go.mod 声明模块为github.com/docker/go-metrics唯一运行时依赖是github.com/prometheus/client_golang再次印证它只是 Prometheus 客户端之上的薄封装。整个包的结构非常精简共 8 个源码文件职责划分清晰文件职责namespace.goNamespace类型与各指标类型的构造方法核心入口unit.go标准单位常量Unit类型counter.goCounter / LabeledCounter 接口与实现timer.goTimer / LabeledTimer 接口与实现基于 Histogramgauge.goGauge / LabeledGauge 接口与实现handler.goHTTP 指标采集的包装与默认分桶配置register.go全局注册与反注册helpers.go内部数值累加辅助函数二、Namespace 与 Subsystem统一指标命名空间README 第一条规则是Namespace 和 Subsystem。go-metrics提供一个Namespace类型允许为同一批指标指定相同的 namespace 与 subsystem。文档中的示例ns : metrics.NewNamespace(engine, daemon, metrics.Labels{ version: dockerversion.Version, commit: dockerversion.GitCommit, })在上例中engine是 namespacedaemon是 subsystem即采集指标所在的包。此时创建的所有指标其完整 Prometheus 名称会被拼成namespace_subsystem_name_unit。对照源码namespace.go 中NewNamespace(name, subsystem string, labels Labels)会构造Namespace结构体并缓存 name、subsystem 与常量标签func NewNamespace(name, subsystem string, labels Labels) *Namespace { if labels nil { labels make(map[string]string) } return Namespace{ name: name, subsystem: subsystem, labels: labels, } }名称拼接逻辑集中在makeName与NewDesc两处namespace.gofunc (n *Namespace) NewDesc(name, help string, unit Unit, labels ...string) *prometheus.Desc { name makeName(name, unit) namespace : n.name if n.subsystem ! { namespace fmt.Sprintf(%s_%s, namespace, n.subsystem) } name fmt.Sprintf(%s_%s, namespace, name) return prometheus.NewDesc(name, help, labels, prometheus.Labels(n.labels)) }可见 subsystem 为空时不会产生多余的_分隔符——builder命名空间即采用此写法见下文第九节。三、常量标签Const Labels让版本与提交信息随指标输出Namespace的另一个能力是附加常量标签。README 指出这通常用于携带应用版本号、git commit 等“每个数据点都相同”的信息避免在每个指标上重复录入。上述示例中version与commit会被自动注入该命名空间下创建的所有指标。源码实现上构造prometheus.CounterOpts/HistogramOpts/GaugeOpts时统一携带ConstLabels: prometheus.Labels(n.labels)见 namespace.go 的newCounterOpts等方法。此外Namespace.WithConstLabels(labels)返回一个合并了额外常量标签的新Namespacenamespace.go。值得注意的边界行为只有使用返回的新 Namespace创建的指标才会获得新增的常量标签新 Namespace 必须单独注册标签合并由mergeLabels完成后面的标签覆盖前面同名键namespace.go。四、将指标声明集中到单一文件README 第二条规则尽量把全部指标声明集中在一个文件里。这样其他人一眼就能看到 Namespace 上定义了哪些常量标签、各个指标又各自带哪些标签便于审计与维护。这一约定在 docker-ce 引擎中被严格贯彻daemon包把所有引擎级指标集中在 daemon/metrics.gobuilder的指标集中在 builder/dockerfile/metrics.gologger的指标集中在 daemon/logger/metrics.go全部以包级var声明 init()注册的结构组织。五、用标签代替多个指标LabeledTimer 实战README 第三条规则优先用标签而不是创建多个指标。文档示例围绕“容器动作耗时”展开——若想分别采集 create、start、delete 的耗时正确做法是定义一个container_actions指标用action标签区分动作类型containerActions ns.NewLabeledTimer(container_actions, The number of milliseconds it takes to process each container action, action)最后一个参数即标签名key。写入数据点时通过WithValues指定具体的actioncontainerActions.WithValues(create).UpdateSince(start)这条示例与 docker-ce 引擎的真实用法几乎完全一致。看 daemon/metrics.go 的init()ns : metrics.NewNamespace(engine, daemon, nil) containerActions ns.NewLabeledTimer(container_actions, The number of seconds it takes to process each container action, action) for _, a : range []string{ start, changes, commit, create, delete, } { containerActions.WithValues(a).Update(0) }注意这里文档说“milliseconds”而引擎实际把 help 文案写为 “The number of seconds…”。这是因为 Timer 底层是 PrometheusHistogramUpdate/UpdateSince内部会调用Observe(duration.Seconds())即观测值统一换算为秒见 timer.go。也就是说Timer 在 go-metrics 中即直方图适合分析延迟分布而不是单一均值。而for循环预置各 label 值是为了让系列在采集侧尽早暴露、避免首次请求后才出现的标签组合。引擎中WithValues(...).UpdateSince(start)的组合调用随处可见例如 daemon/info.go 与 daemon/info.go 用metrics.StartTimer(hostInfoFunctions.WithValues(system_info))()配合defer统计docker system info的耗时StartTimer的实现在 timer.go记录起始时刻并返回一个done func()调用时自动Update(time.Since(start))是“耗时指标”最省心的写法。六、Always use a unit单位命名约定README 第四条规则指标名必须体现计量单位。Timer 的标准单位是秒secondsCounter 的标准单位是 totalGauge 则必须显式指定单位。go-metrics 内置了一套标准单位unit.goNanoseconds Unit nanoseconds Seconds Unit seconds Bytes Unit bytes Total Unit total这套单位不只是“文档约定”而是直接参与指标命名。makeName(name, unit)namespace.go会把单位拼成后缀Counter自动追加_total见newCounterOpts中Name: makeName(name, Total)Timer自动追加_seconds见newTimerOptsGauge后缀取决于构造时传入的 Unit如metrics.Bytes→_bytes。README 建议如果确实没有现成单位可用优先在包内已有的 seconds / nanoseconds 中二选一而不是引入毫秒之类的近似单位确需新增时通过 PR 补充进包而不是各项目自行扩散。看引擎实际产生的指标名就一目了然daemon/metrics.goengine_cpus→ns.NewGauge(engine_cpus, …, metrics.Unit(cpus))daemon/metrics.goengine_memory→ns.NewGauge(engine_memory, …, metrics.Bytes)对外为engine_daemon_engine_memory_bytesdaemon/events/metrics.goeventsCounter与events_subscribersGauge单位metrics.Totaldaemon/logger/metrics.go三个失败/丢弃计数的 Counter七、四种基础指标类型与接口设计Namespace上提供了成对出现的“普通”与“带标签”构造方法均返回 go-metrics 自定义接口而非 Prometheus 原生类型构造方法返回接口底层 Prometheus 类型NewCounter/NewLabeledCounterCounter/LabeledCounterprometheus.Counter/CounterVecNewTimer/NewLabeledTimerTimer/LabeledTimerprometheus.Histogram/HistogramVecNewGauge/NewLabeledGaugeGauge/LabeledGaugeprometheus.Gauge/GaugeVecCountercounter.go接口方法Inc(vs ...float64)无参时对计数器 1有参时累加sumFloat64(vs...)helpers.go因此也支持一次性累加多个增量。Gaugegauge.go提供Inc(...float64)、Dec(...float64)、Add(float64)、Set(float64)其中Dec通过加负数实现。引擎用它表达当前状态量如 daemon/events/metrics.go 的events_subscribers当前事件订阅者数与 daemon/metrics.go 借助NewDescAdd(stateCtr)自定义的container_states统计各状态容器计数。Timertimer.goUpdate(duration)、UpdateSince(t)统一以秒为观测单位配合StartTimer使用体验最佳。LabeledXxx系列都遵循“先WithValues(...)填标签、后操作”的模式未填标签前不可直接写入数据这从接口设计上杜绝了漏填标签的低级错误。八、HTTP Metrics一行代码插桩 HTTP 处理器README 给出了把任意http.Handler变为可观测处理的完整示例namespace : metrics.NewNamespace(docker_distribution, http, metrics.Labels{handler: your_http_handler_name}) httpMetrics : namespace.NewDefaultHttpMetrics() metrics.Register(namespace) instrumentedHandler metrics.InstrumentHandler(httpMetrics, unInstrumentedHandler)README 同时强调创建 Namespace 时必须提供handler标签。需要提醒的是这段示例基于早期 API。当前 vendor 内的源码中NewDefaultHttpMetrics的签名已演进为需要传入 handler 名称参数namespace.gofunc (n *Namespace) NewDefaultHttpMetrics(handlerName string) []*HTTPMetric { return n.NewHttpMetricsWithOpts(handlerName, HTTPHandlerOpts{ DurationBuckets: defaultDurationBuckets, RequestSizeBuckets: defaultResponseSizeBuckets, ResponseSizeBuckets: defaultResponseSizeBuckets, }) }handler 名称会在构造各子指标时写入labels[handler]例如 namespace.go 的NewInFlightGaugeMetric。因此按当前源码正确的调用是namespace.NewDefaultHttpMetrics(your_http_handler_name)。一次NewDefaultHttpMetrics会生成5 类指标namespace.go指标名类型附加标签ns_sub_in_flight_requestsGaugehandlerns_sub_requests_totalCounterVechandler, code, methodns_sub_request_duration_secondsHistogramVechandler, methodns_sub_request_size_bytesHistogramVechandlerns_sub_response_size_bytesHistogramVechandler默认分桶配置定义在 handler.godefaultDurationBuckets []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10, 25, 60} defaultRequestSizeBuckets prometheus.ExponentialBuckets(1024, 2, 22) //1K to 4G defaultResponseSizeBuckets defaultRequestSizeBuckets即延迟桶从 5ms 到 60s请求/响应大小桶按 2 的幂从 1KB 覆盖到 4GB。若默认桶不满足需求可改用NewHttpMetrics(handlerName, durationBuckets, requestSizeBuckets, responseSizeBuckets)自定义或使用更细粒度的NewHttpMetricsWithOpts三者对空桶数组都会直接panic如 namespace.go属于有意的防御设计。InstrumentHandler(metrics, handler)handler.go会依据每个HTTPMetric.handlerType依次包裹promhttp.InstrumentHandlerResponseSize、InstrumentHandlerRequestSize、InstrumentHandlerDuration、InstrumentHandlerCounter、InstrumentHandlerInFlight返回一个http.HandlerFunc原始 handler 逻辑零侵入。此外 handler.go 的Handler()直接返回promhttp.Handler()即标准的/metrics抓取端点。docker-ce 引擎的 metrics HTTP 服务正是这样搭建的见 cmd/dockerd/metrics.gomux : http.NewServeMux() mux.Handle(/metrics, metrics.Handler())九、注册与反注册把 Namespace 挂到全局 Registry创建好指标后必须注册才会被 Prometheus 采集。register.go提供两个极简函数func Register(n *Namespace) { prometheus.MustRegister(n) } func Deregister(n *Namespace) { prometheus.Unregister(n) }由于Namespace自身实现了Describe/Collectnamespace.go它本身就是一个prometheus.Collector注册时会把内部维护的所有指标批量暴露Register使用MustRegister若注册重复的 collector 会直接 panic把配置错误尽早暴露在init()阶段。Deregister常用于热卸载场景。docker-ce 引擎的各个模块都在自己的init()中完成注册例如 daemon/logger/metrics.gologgerMetrics : metrics.NewNamespace(logger, , nil) logWritesFailedCount loggerMetrics.NewCounter(log_write_operations_failed, Number of log write operations that failed) logReadsFailedCount loggerMetrics.NewCounter(log_read_operations_failed, Number of log reads from container stdio that failed) totalPartialLogs loggerMetrics.NewCounter(log_entries_size_greater_than_buffer, Number of log entries which are larger than the log buffer) metrics.Register(loggerMetrics)注意这里NewNamespace(logger, , nil)的 subsystem 为空最终指标名即为logger_log_write_operations_failed_total等。同样builder/dockerfile/metrics.go 用metrics.NewNamespace(builder, , nil)声明了builds_triggered与带reason标签的builds_failed并在init()中预注册 8 种失败原因Dockerfile 语法错误、空 Dockerfile、命令不支持、错误处理指令、目标不可达、缺失 onbuild 参数、未知指令、构建被取消这与container_actions的预置标签是同一套路。十、Additional Metrics包级贡献通用指标README 最后一部分指出本包还定义了一些Prometheus 客户端本身没有的额外指标如果某个自定义指标足够通用、可被多个项目复用就应定义在本包中而不是各自复制。例如引擎 vendor 里的 distribution/metrics/prometheus.go 就复用了 go-metrics 的Namespace机制定义registry_storage命名空间用于 blob/缓存相关的存储操作指标go-metrics 包内的StartTimer、HTTPHandlerOpts、各接口类型等均属这类“通用能力”避免每个项目各自发明一套。十一、在 docker-ce 中如何查看与配置这些指标以上所有指标最终通过 daemon 的 metrics HTTP 端点对外暴露配置项是--metrics-addrJSON 配置键为metrics-addr。定义见 cmd/dockerd/config.goflags.StringVar(conf.MetricsAddress, metrics-addr, , Set default address and port to serve the metrics api on)并在 daemon/config/config.go 中声明为 daemon 配置结构体字段。实际启停由 cmd/dockerd/daemon.go 的startMetricsServer(cli.Config.MetricsAddress)触发地址为空时不启动。典型启用方式dockerd --metrics-addr 127.0.0.1:9323 curl http://127.0.0.1:9323/metrics即可在/metrics看到engine_daemon_*、builder_*、logger_*等命名空间下的全部指标。此外daemon 在 Linux 上还会在ExecRoot下监听metrics.sockdaemon/metrics_unix.go并把 socket 以只读方式挂载进MetricsCollector类型的插件容器/run/docker/metrics.sock从而支持第三方指标采集插件通过 daemon/metrics.go 中的StartMetrics/StopMetrics生命周期接入——这是 go-metrics 约定在引擎层面的完整延伸。十二、实践要点小结命名三要素namespace_subsystem_name_unit通过NewNamespace一次性固定前两段避免各模块自由发挥常量标签放 Namespace可变维度放指标版本/commit 用常量标签动作类型、失败原因等用LabeledXxx的标签能用标签就不要造指标一组动作共用一个 LabeledTimer配合WithValues(...).UpdateSince(start)或StartTimer记录耗时单位必须显式Counter 自动带_total、Timer 自动带_secondsGauge 必须手动指定 Unit集中声明、预置标签把全部指标收敛到一个文件并在init()中预注册常见标签组合HTTP 服务一键插桩NewDefaultHttpMetrics(handlerName)InstrumentHandler即可获得请求数、延迟、大小、并发五类指标无需侵入业务代码。这套约定帮助 docker-ce 在 daemon、builder、logger、events、image 等数十个模块间维持一致的度量语义也让任何熟悉 Prometheus 的开发者拿到指标名即可读懂其含义。参考本仓库的 go-metrics 源码 与 引擎 daemon 指标注册示例你可以快速在自己的 Go 服务中复刻同样的度量体系。赞分享容器运行时云原生【免费下载链接】docker-ce:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:项目地址https://gitcode.com/gh_mirrors/do/docker-ce点击查看免费下载相关推荐Octant 项目中的 Docker go-metrics 实践用 Prometheus 约定统一 Kubernetes 平台指标采集Octant 项目中的 Docker go metrics 实践用 Prometheus 约定统一 Kubernetes 平台指标采集 导读 go metri云原生后端前端运维可观测性开发工具AWX 子系统指标Subsystem Metrics原理与实战从 Redis 存储到 Prometheus 采集AWX 子系统指标Subsystem Metrics原理与实战从 Redis 存储到 Prometheus 采集 导读 AWX 的子系统指标Subsys后端运维任务调度go-metrics 实战指南用 Prometheus 规范容器平台指标采集KubeSphere 仓库中的 Docker go-metrics 封装解析go metrics 实战指南用 Prometheus 规范容器平台指标采集KubeSphere 仓库中的 Docker go metrics 封装解析后端云原生容器编排微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Arco Design Switch 开关组件基础用法详解:从最小示例到受控原理

Arco Design Switch 开关组件基础用法详解:从最小示例到受控原理

UI组件前端设计系统 【免费下载链接】arco-design A comprehensive React UI components library based on Arco Design 项目地址: https://gitcode.com/gh_mirrors/ar/arco-design 点击查看 免费下载 开关(Switch)是 Arco Design 数据输入类…

2026/10/13 10:06:25 阅读更多 →
Spring Cloud Gateway 配置绑定失败:Failed to bind properties 排查与修复

Spring Cloud Gateway 配置绑定失败:Failed to bind properties 排查与修复

遇到过Failed to bind properties under to org.springframework.cloud.gateway这个报错的朋友,估计当时心态都有点崩。前面一大堆启动日志,翻到最后就看到这么一句,既没有具体的属性名,也没有行号,看起来像配置有问题…

2026/10/13 10:06:25 阅读更多 →
视频封面有宽高为什么仍是空图

视频封面有宽高为什么仍是空图

视频已经读出了宽高和时长,拿它画封面却得到一张空图。这次我测了不同加载阶段的绘制结果,才把这个看着矛盾的现象拆开。样本是同一段冰岛海浪素材转出的两种格式,规格相同:6秒长、宽640px、高360px。尺寸能读出来。绘制也没报错。…

2026/10/13 10:05:23 阅读更多 →

最新新闻

Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

1. 从"能跑"到"敢上线":Agent 交付的最后一公里到底卡在哪做过 Agent 项目的人大概都有过这种体验:本地 Demo 跑得飞起,工具调用、多轮对话、RAG 检索全都正常,演示给同事看的时候掌声一片。可真到了要往生产…

2026/10/13 12:57:09 阅读更多 →
泰坦尼克生存分析:从数据清洗到业务决策的完整链路

泰坦尼克生存分析:从数据清洗到业务决策的完整链路

1. 这不是“电影彩蛋”,而是一份真实世界的生存决策模型“titanic生存率数据分析”——这六个字背后,藏着的不是沉船故事的怀旧回响,而是数据科学入门者真正踩进现实泥地的第一步。它不靠炫技的算法堆砌,也不依赖昂贵的GPU集群&am…

2026/10/13 12:57:09 阅读更多 →
Codex智能体实战:从零构建AI应用的核心循环与工程落地

Codex智能体实战:从零构建AI应用的核心循环与工程落地

开头 我一直觉得,2025年之后学编程,最大的分水岭不是会不会写代码,而是会不会“指挥代码”。标题里这个“闪学it-Codex智能体实战”,说白了就是教你一件事:把AI从“聊天机器人”变成“能干活的下属”。我从零开始踩了一…

2026/10/13 12:57:09 阅读更多 →
OGG Opus音频编码与容器格式解析实践

OGG Opus音频编码与容器格式解析实践

1. 音频编码技术背景与OGG Opus协议概述在实时音频传输领域,编码效率与音质平衡始终是核心技术挑战。2012年由IETF标准化的Opus编码器凭借其独特的多模式架构,在语音和音乐场景中均展现出卓越性能。而OGG作为Xiph.Org基金会推出的开源容器格式&#xff0…

2026/10/13 12:57:09 阅读更多 →
用Go从零写一个本地记账工具:SQLite+命令行实战

用Go从零写一个本地记账工具:SQLite+命令行实战

1. 为什么我劝你用Go写一个属于自己的收支记账工具1.1 从一张Excel表说起:记账这件事到底难在哪我身边有不少朋友,记账这件事前前后后启动过不下五次。第一次是下载某个记账App,记了三天,嫌广告多、启动慢,卸载了。第二…

2026/10/13 12:57:09 阅读更多 →
AI+低代码:元数据驱动与工程化兜底,如何让AI生成的应用真正可交付

AI+低代码:元数据驱动与工程化兜底,如何让AI生成的应用真正可交付

聊到AI和低代码结合,很多人第一反应是:是不是用自然语言说一句“给我做个进销存”,平台就能把页面、逻辑、数据库一次性生成。我做了多年低代码平台,看到这个说法的第一反应其实是警惕——AI生成页面这个事,很早就有各…

2026/10/13 12:56:07 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →