Prometheus Blackbox Exporter Helm Chart 实战指南:安装部署、配置详解与二进制探测模块避坑方案
【免费下载链接】helm-chartsPrometheus community Helm charts项目地址https://gitcode.com/gh_mirrors/he/helm-charts点击查看免费下载本指南以 Prometheus Community 官方仓库中的 prometheus-blackbox-exporter Helm Chart当前版本 11.20.0对应 blackbox_exporter v0.29.0为核心系统讲解其安装、升级、卸载全流程逐一拆解 values.yaml 中的核心配置项并深入剖析二进制协议探测模块PostgreSQL SSL、LDAP STARTTLS 等配置被toYaml静默破坏这一经典陷阱及其基于 Secret 的解决方案。读完本文你将能独立完成 blackbox-exporter 在 Kubernetes 上的生产级部署并能正确配置 HTTP、TCP、ICMP 等各类探测模块。一、Chart 概览blackbox-exporter 是什么Blackbox Exporter 是 Prometheus 生态中负责黑盒探测的组件它不关心目标服务的内部状态而是从外部主动发起 HTTP、HTTPS、TCP、ICMPping、DNS 等探测请求将探测结果如 HTTP 状态码、响应时间、TLS 证书有效期以指标形式暴露给 Prometheus 抓取。本仓库中的 prometheus-blackbox-exporter Chart 将其封装为 Kubernetes 原生工作负载Chart 类型applicationapiVersion: v2Helm 3 规范镜像来源默认quay.io/prometheus/blackbox-exportertag 默认取 Chart 的appVersionv0.29.0由 renovate 与上游同步默认工作负载Deployment可通过kind: DaemonSet切换单副本暴露端口容器与 Service 默认均为9115提供/metrics与/probe端点。二、前置条件与安装2.1 前置条件根据 README.md 与 Chart.yamlKubernetes1.8Chart.yaml 中进一步声明kubeVersion: 1.21.0-0且从 11.0.0 起已移除extensions/v1beta1等废弃 APIHelm 3.0。2.2 获取 Chart 的两种途径该 Chart 同时以 OCI 制品与经典 Helm 仓库两种方式分发OCI 制品oci://ghcr.io/prometheus-community/charts/prometheus-blackbox-exporterHelm 仓库https://prometheus-community.github.io/helm-chartsChart 名为prometheus-blackbox-exporter2.3 安装helm install [RELEASE_NAME] oci://ghcr.io/prometheus-community/charts/prometheus-blackbox-exporter安装前可用helm show values预览全部可配置项及注释helm show values oci://ghcr.io/prometheus-community/charts/prometheus-blackbox-exporter如需自定义配置可先导出默认值再修改helm show values oci://ghcr.io/prometheus-community/charts/prometheus-blackbox-exporter values.yaml helm install [RELEASE_NAME] oci://ghcr.io/prometheus-community/charts/prometheus-blackbox-exporter -f values.yaml2.4 卸载helm uninstall [RELEASE_NAME]该命令会移除 Chart 创建的所有 Kubernetes 组件并删除对应 release。2.5 升级helm upgrade [RELEASE_NAME] [CHART] --install--install表示若 release 不存在则直接创建便于在 CI 中幂等地应用最新配置。三、升级路径与破坏性变更速查README 以To X.0.0的形式记录了历次破坏性变更升级前务必对照排查。以下为关键节点版本破坏性变更应对措施11.0.0移除废弃 Kubernetes APIextensions/v1beta1、networking.k8s.io/v1beta1、rbac.authorization.k8s.io/v1beta1升级集群到支持稳定 API 的版本10.0.0extraEnvFromSecret被extraEnvFrom取代extraEnv改为K8s env 定义的 map 列表参照 values.yaml 的新格式改写9.0.0移除已废弃的 Pod Security Policy改用 Pod 级securityContext8.0.0默认镜像改为quay.io/prometheus/blackbox-exporterimage.repository拆分为image.registryimage.repository想恢复旧行为image.registry: 仅用image.repository7.0.0引入securityContext/podSecurityContext移除allowICMP见下文 3.1 的 ICMP 配置6.0.0ServiceMonitor 的additionalRelabeling由metricRelabelings改为relabelings按新字段书写5.0.0移除 Helm 2 支持ingress 配置结构变更按 values.yaml 中的示例调整4.0.0默认创建 ServiceAccount新增可选 PSPpspEnabled: true默认行为即安全基线2.0.0移除podDisruptionBudget.enabled默认值改为{}见下文 3.21.0.0引入推荐标签recommended labels升级前需删除旧 Deployment见下文 3.33.1 7.0.0 之后如何开启 ICMPping探测7.0.0 起allowICMP选项被移除改用标准securityContext能力控制。values.yaml 默认已drop: [ALL]要恢复 ICMP 探测需显式添加NET_RAWsecurityContext: readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: add: [NET_RAW]对照 values.yaml 可见默认securityContext已包含runAsUser: 1000、runAsGroup: 1000、readOnlyRootFilesystem: true、runAsNonRoot: true、allowPrivilegeEscalation: false注释中即标注# Add NET_RAW to enable ICMP。3.2 2.0.0 之后如何配置 PodDisruptionBudget删除旧的podDisruptionBudget.enabled字段直接给出podDisruptionBudget内容podDisruptionBudget: maxUnavailable: 03.3 1.0.0 升级注意事项1.0.0 引入了新的推荐标签升级前需先删除旧 Deployment会造成短暂停机kubectl delete deployment [RELEASE_NAME]-prometheus-blackbox-exporter四、核心配置详解values.yaml 全解本节以 values.yaml 为蓝本按功能域分组讲解最常用的配置项。4.1 镜像与工作负载形态image: registry: quay.io repository: prometheus/blackbox-exporter tag: # 缺省取 {{ printf v%s .Chart.AppVersion }}即 v0.29.0 pullPolicy: IfNotPresent digest: # 设置后以 digest 方式拉取 kind: Deployment # 或改为 DaemonSet replicas: 1 restartPolicy: Always strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate revisionHistoryLimit: 10 hostNetwork: false镜像拼接逻辑见 _helpers.tplregistry/repository:tagdigest其中 registry 可被global.imageRegistry覆盖便于私有镜像仓库场景。kind决定渲染 deployment.yaml 还是 daemonset.yaml二者共用 _helpers.tpl 中定义的podSpec。CI 目录中的 daemonset-values.yml 展示了仅用kind: DaemonSet一行即可切换工作负载形态。4.2 探测模块配置config 与 configPathconfig: modules: http_2xx: prober: http timeout: 5s http: valid_http_versions: [HTTP/1.1, HTTP/2.0] follow_redirects: true preferred_ip_protocol: ip4该配置会被 configmap.yaml 以data.blackbox.yaml写入默认挂载路径为/config/blackbox.yaml。容器启动参数见 deployment.yaml当config非空时传--config.file/config/blackbox.yaml可通过configPath覆盖为其他路径若config为空则回退到镜像内置的/etc/blackbox_exporter/config.yml。extraArgs可附加 blackbox-exporter 自身参数例如--web.listen-address:9115、--history.limit1000见 values.yaml 注释。4.3 配置热加载configReloader 与 checksumChart 提供两条配置变更生效路径默认无 configReloaderPod 模板注解checksum/config: {{ toYaml .Values.config | sha256sum }}见 deployment.yaml配置变更会触发滚动重启。启用 configReloaderconfigReloader.enabled: true注入 prometheus-config-reloader 边车通过--reload-urlhttp://127.0.0.1:9115/-/reload调用 blackbox-exporter 的/-/reload端点热加载配置无需重启见 _helpers.tpl。启用方式只需一行参照 config-reloader-values.yamlconfigReloader: enabled: true4.4 环境变量注入10.0.0 起extraEnv使用标准 K8s env 定义list of mapsextraEnvFromSecret更名为extraEnvFromextraEnv: - name: GOMAXPROCS valueFrom: resourceFieldRef: resource: limits.cpu divisor: 1 - name: HTTP_PROXY value: http://superproxy.com:3128 extraEnvFrom: - configMapRef: name: configMapOne - secretRef: name: secretOne渲染逻辑见 _helpers.tplextraEnv输出到envextraEnvFrom输出到envFrom。4.5 网络与流量入口Serviceservice.yamlservice: type: ClusterIP port: 9115 # 对外端口 containerPort: 9115 # 容器端口仅改容器端口不影响应用监听需配合 extraArgs 修改 --web.listen-address hostPort: 0 # 需要 host 暴露时设置DaemonSet 场景有用Ingress默认关闭ingress: enabled: false className: annotations: {} hosts: - host: chart-example.local paths: - path: / pathType: ImplementationSpecific tls: []HTTPRouteGateway APIroute.main.enabled: true可渲染 Gateway API 的 HTTPRoute 资源支持parentRefs、hostnames、matches默认PathPrefix /、filters及httpsRedirectHTTP 301 跳转 HTTPS等字段见 values.yaml。4.6 安全相关配置automountServiceAccountToken: false serviceAccount: create: true name: # 缺省由 fullname 模板生成 annotations: {} podSecurityContext: {} # fsGroup: 1000 securityContext: runAsUser: 1000 runAsGroup: 1000 readOnlyRootFilesystem: true runAsNonRoot: true allowPrivilegeEscalation: false capabilities: drop: [ALL] # add: [NET_RAW] # 开启 ICMP 时取消注释automountServiceAccountToken: false用于最小权限场景如挂载 oauth2-proxy 等边车时。此外 Chart 还支持networkPolicy.enabled配合allowMonitoringNamespace限制仅监控命名空间可访问、priorityClassName、hostAliases、dnsPolicy/dnsConfig等见 values.yaml。4.7 额外资源与通用扩展卷挂载extraVolumes、extraVolumeMounts、extraConfigmapMounts、extraSecretMounts用于 CA 证书、凭据文件等场景容器扩展extraInitContainers、extraContainers数组或模板字符串两种模式参见 values.yaml 中 oAuth2-proxy 边车示例水平扩展resources、verticalPodAutoscaler含updateMode: Auto、minAllowed/maxAllowed、topologySpreadConstraints通用资源extraManifests可附加任意自定义 K8s 清单。五、Prometheus 集成ServiceMonitor 与 PodMonitoring5.1 按目标批量生成 ServiceMonitorChart 的核心集成能力是通过serviceMonitor.targets为每个探测目标生成一个独立的 ServiceMonitor渲染逻辑见 servicemonitor.yamlserviceMonitor: enabled: true defaults: interval: 30s scrapeTimeout: 30s module: http_2xx path: /probe scheme: http targets: - name: example # 在 Prometheus/AlertManager 中显示的名称 url: http://example.com/healthz # blackbox 实际探测的目标 URL hostname: example.com # HTTP 探测可设置 Host 头与 TLS SNI labels: {} interval: 60s scrapeTimeout: 60s module: http_2xx additionalMetricsRelabels: {} additionalRelabeling: []每个生成的 ServiceMonitor 端点会携带params.module与params.target查询参数并通过metricRelabelings将instance、target标签重写为目标 URL 与名称见 servicemonitor.yaml。注意 6.0.0 变更additionalRelabeling现在渲染在relabelings而非metricRelabelings下——这对那些需要根据目标动态改写标签的场景至关重要。模板化支持target 的url等字段支持 Helmtpl渲染CI 中的 service-monitor-tpl-values.yaml 展示了通过.Values.myDomain拼接探测 URL 的用法每次探测的target参数在渲染时即被展开为最终 URL。5.2 自监控selfMonitorserviceMonitor.selfMonitor.enabled: true会为 blackbox-exporter 自身/metrics生成 ServiceMonitor见 selfservicemonitor.yaml若同时启用 configReloader还会追加对 config-reloader/metrics端点的抓取端点。若使用 Google Managed Prometheus可用podMonitoring.selfMonitor生成对应的 PodMonitoring CR见 podmonitoring.yaml。5.3 告警规则prometheusRule.enabled: true配合prometheusRule.rules可生成 PrometheusRule CR将探测失败转化为告警。5.4 与 kube-prometheus-stack 开箱即用将releaseLabel: true设为 true 即可为资源添加release: release-name标签使 kube-prometheus-stack 的 ServiceMonitor 选择器能够直接匹配本 Chart 生成的资源见 values.yaml 注释。六、二进制协议模块配置的经典陷阱与解决方案这是 README 重点强调、也最容易在helm install时无感知失败的一个问题值得单独成节。6.1 问题根源toYaml对!!binary的破坏某些探测模块需要在探测报文中发送二进制负载例如PostgreSQL SSL 协商sslmode探测LDAP STARTTLS 握手。这类配置无法通过values.yaml的config:字段配置原因在于渲染链configmap.yaml 使用{{ toYaml .Values.config | indent 4 }}将配置写入 ConfigMaptoYaml会把值送入 Helm 的 YAML 解析器做一次往返round-tripYAML 解析器将!!binary标签解码后又按 UTF-8 字符串重新编码任何 0x80的字节即非 ASCII 二进制内容会被静默丢弃或损坏。关键在于失败发生在探测时刻helm install和helm template都不会报错直到运行时才表现为难以排查的字节不匹配byte-mismatch错误。6.2 解决方案外部 Secret configExistingSecretName第一步将二进制配置以独立文件形式创建为 Kubernetes Secret绕过整个toYaml管线kubectl create secret generic blackbox-binary-config \ --from-fileblackbox.yaml./blackbox.yamlSecret 中必须包含blackbox.yaml这个 key。第二步在 values.yaml 中引用该 SecretconfigExistingSecretName: blackbox-binary-config第三步部署后验证。此时 configmap.yaml 的条件and .Values.config (eq .Values.configExistingSecretName )不满足不会渲染配置 ConfigMap而 _helpers.tpl 的 volume 定义分支会把config卷指向secret.secretName: blackbox-binary-config配置原样verbatim挂载到容器二进制内容得以完整保留。6.3 补充以 Secret 形式托管普通配置即使没有二进制需求若配置包含敏感信息如含凭据的探测配置也可通过secretConfig: true将 Chart 生成的配置对象从 ConfigMap 切换为 Secret见 secret-values.yaml 与 configmap.yaml 的kind分支并结合secretAnnotations附加注解如 SealedSecret 场景。七、实战检查清单完成部署后建议逐项核对helm template输出无extensions/v1beta1等废弃 APIkubectl get pods中 blackbox-exporter 处于Running/-/healthy探针通过kubectl exec查看挂载配置cat /config/blackbox.yaml确认模块定义完整使用curl http://service:9115/probe?modulehttp_2xxtargethttps://example.com手工触发一次探测观察probe_success指标若配置包含二进制负载确认已改用configExistingSecretName而非config:若开启 ServiceMonitor确认releaseLabel: true或匹配的 release 标签已配置Prometheus 能正常发现目标。八、参考文件导航使用指南README.md完整配置项及注释values.yamlChart 元数据与版本Chart.yaml配置渲染configmap.yaml工作负载与共享 PodSpecdeployment.yaml、daemonset.yaml、_helpers.tpl抓取集成servicemonitor.yaml、selfservicemonitor.yaml、podmonitoring.yamlCI 验证样例config-reloader-values.yaml、secret-values.yaml、service-monitor-tpl-values.yaml、daemonset-values.yml赞分享【免费下载链接】helm-chartsPrometheus community Helm charts项目地址https://gitcode.com/gh_mirrors/he/helm-charts点击查看免费下载相关推荐Prometheus Blackbox Exporter Helm Chart 实战指南安装、配置与监控集成Prometheus Blackbox Exporter Helm Chart 实战指南安装、配置与监控集成 Blackbox Exporter 是 PromPrometheus Consul Exporter Helm Chart 部署与配置实战指南Prometheus Consul Exporter Helm Chart 部署与配置实战指南 导读 Consul Exporter 是 PrometheusPHP-CS-Fixer 的 phpdoc_readonly_class_comment_to_keyword 规则把 readonly 类注解一键迁移为原生 readonly 关键字PHP CS Fixer 的 phpdoc_readonly_class_comment_to_keyword 规则把 readonly 类注解一键迁移为原上一篇MediaCrawler 爬虫10 分钟跑通小红书抖音等 7 平台数据采集下一篇极速上手5分钟搞定GitHub全界面汉化的完整方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

直流牵引供电系统谐波治理:单调谐无源滤波器设计与Simulink仿真验证

直流牵引供电系统谐波治理:单调谐无源滤波器设计与Simulink仿真验证

接手这个直流牵引供电系统谐波治理任务的时候,我的第一反应并不是“滤除11次和13次谐波要选多大电容”,而是“把单调谐无源谐波滤波器挂上去之后,别在别的频率上又惹出新麻烦”。这是每一个做过无源滤波器设计的人都会有的警觉。整个项目围绕…

2026/10/10 5:52:43 阅读更多 →
Unison 类型更新实战:将数据构造函数重构为 Smart Constructor(以 `unique type Foo` 为例)

Unison 类型更新实战:将数据构造函数重构为 Smart Constructor(以 `unique type Foo` 为例)

编程语言编译器语言运行时开发工具 【免费下载链接】unison A friendly programming language from the future 项目地址: https://gitcode.com/gh_mirrors/un/unison 点击查看 免费下载 本指南围绕 unison-src/transcripts/idempotent/update-type-turn-construct…

2026/10/10 5:51:43 阅读更多 →
Steve Brunton | Reinforcement Learning | 笔记 | Lecture 1 | 强化学习:机器学习与控制理论的交汇

Steve Brunton | Reinforcement Learning | 笔记 | Lecture 1 | 强化学习:机器学习与控制理论的交汇

目录前言1. 引言2. 强化学习概述3. 强化学习的数学基础4. 马尔可夫决策过程5. 信用分配问题6. 强化学习的优化技术7. 强化学习示例8. Q-Learning9. 事后经验回放结语参考前言 学习 Steven Brunton 讲授的强化学习入门概述视频,本篇文章记录第一讲:强化学…

2026/10/10 5:51:43 阅读更多 →

最新新闻

小学组C++算法赛初赛备考指南:从真题拆解到避坑技巧

小学组C++算法赛初赛备考指南:从真题拆解到避坑技巧

简介:这份资源是2024年信息素养大赛C算法创意实践挑战赛小学组初赛的真题解析文档,面向小学阶段对编程有兴趣、已具备一定C基础的学习者,也适合指导教师作为教学参考。内容覆盖单选题与判断题两种题型,涉及变量定义、运算符、布尔…

2026/10/11 10:56:27 阅读更多 →
为什么 Local Studio 要维护双引擎栈?engines 与 compute 架构及 ComputeBridge 桥接实现解析

为什么 Local Studio 要维护双引擎栈?engines 与 compute 架构及 ComputeBridge 桥接实现解析

【免费下载链接】local-studio Control panel for VLLM, Sglang, llama.cpp, exllamav3 项目地址: https://gitcode.com/gh_mirrors/vl/local-studio 点击查看 免费下载 Local Studio 是一款本地优先的 LLM 推理控制台,统一管理 vLLM、SGLang、llama.cp…

2026/10/11 10:56:27 阅读更多 →
每日算法题2

每日算法题2

链接:LCR 170. 交易逆序对的总数 - 力扣(LeetCode) 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record&#xff0c…

2026/10/11 10:56:27 阅读更多 →
如何用电脑键盘操控手机终端:OpenClaw on Android搭配Termux的SSH远程配置完全指南

如何用电脑键盘操控手机终端:OpenClaw on Android搭配Termux的SSH远程配置完全指南

移动开发AI 应用CLI开发工具 【免费下载链接】openclaw-android Run OpenClaw on Android with a single command — no proot, no Linux 项目地址: https://gitcode.com/gh_mirrors/op/openclaw-android 点击查看 免费下载 OpenClaw on Android 让你在手机上运行 …

2026/10/11 10:56:27 阅读更多 →
Mesh 还是 Focus?Cell Architecture Studio 双视图模式与截面透视实战指南

Mesh 还是 Focus?Cell Architecture Studio 双视图模式与截面透视实战指南

【免费下载链接】cell-architecture-studio Interactive 3D cell architecture gallery built with React and Three.js 项目地址: https://gitcode.com/gh_mirrors/ce/cell-architecture-studio 点击查看 免费下载 Cell Architecture Studio 是一款基于 React 和 …

2026/10/11 10:56:27 阅读更多 →
【AI 和未来】工作(1)

【AI 和未来】工作(1)

原文链接:https://www.ibm.com/cn-zh/think/insights/ai-and-the-future-of-work 概述 人工智能融入职场是重大技术变革,开启人机协作时代。叠加全球技能短缺、后疫情远程办公、企业数据爆炸等背景,AI成为企业解决业务难题、打造个性化员工体…

2026/10/11 10:55:27 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →