Harbor 导入官方 Grafana 仪表盘可视化 Exporter 监控指标
【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor
Harbor 自带一个 Exporter 组件,通过 Prometheus 格式的/metrics端点暴露组件健康、项目配额、任务队列、Core/Registry 请求等指标,仓库在contrib/grafana-dashboard/目录下随源码提供了一份官方 Grafana 仪表盘。本文的任务是:先让 Harbor 开启并验证 Exporter 指标输出,再把仓库中的metrics-example.json导入 Grafana,让指标以面板形式可视化。
适用前提:
- Harbor 已通过 install 脚本(docker compose 方式)部署并可正常访问;
- 已有一套 Grafana 实例。仓库
contrib/grafana-dashboard/README.md明确说明该仪表盘基于Grafana v8制作,可能不兼容更早的 Grafana 版本; - 仪表盘内各面板引用的是 Prometheus 类型数据源,因此需要一个已配置好的 Prometheus 数据源(或已指向 Harbor 指标的 Prometheus 实例)供导入时选择。
仪表盘截图(来自仓库文档,尺寸偏高,仅作面板参考):
一、在 harbor.yml 中开启 Exporter
Harbor 安装目录下的harbor.yml中有一段默认注释掉的 metric 配置(见 make/harbor.yml.tmpl):
# metric: # enabled: false # port: 9090 # path: /metrics取消注释并按需修改:
metric: enabled: true port: 9090 path: /metricsport与path即上面模板注释中给出的默认值(9090、/metrics)。Exporter 是否随实例启动完全由metric.enabled决定:prepare 脚本只有在config_dict['metric'].enabled为真时才会渲染 exporter 配置并写入 docker-compose,compose 模板中的 exporter 服务同样包裹在{% if metric.enabled %}条件里(见 docker-compose.yml.jinja)。
修改harbor.yml后重新执行 Harbor 的安装/更新脚本使配置生效(离线安装脚本为install.sh,与harbor.yml位于同一目录)。副作用提示:该脚本会重新 prepare 配置并重启各组件容器,执行前确认harbor.yml中其他项(数据库密码、证书路径等)无误。
二、验证 Exporter 与 /metrics 端点
确认容器与默认参数
开启后 compose 中会多出如下服务(模板渲染结果):
exporter: image: goharbor/harbor-exporter:<版本> container_name: harbor-exporter env_file: - ./common/config/exporter/env restart: always depends_on: - core可用docker ps | grep harbor-exporter确认容器在运行。Exporter 的关键默认值由 env.jinja 生成:
| 环境变量 | 默认值 | 用途 |
|---|---|---|
HARBOR_EXPORTER_PORT | 8080 | Exporter 监听端口 |
HARBOR_EXPORTER_METRICS_PATH | /metrics | 指标路径 |
HARBOR_EXPORTER_MAX_REQUESTS | 30 | 限制请求数 |
HARBOR_EXPORTER_CACHE_TIME | 23 | 指标缓存时间(秒) |
HARBOR_SERVICE_HOST/HARBOR_SERVICE_PORT | core/ 8080(启用 internal_tls 时为 https:8443) | Exporter 回调 Harbor core 的地址 |
Exporter 连接 core、数据库与 Redis 采集数据,注册的采集器包括 health、system info、project、job service、statistics(见 exporter.go)。/路径返回一个简单的 HTML 页,页面内有指向 metrics 路径的链接,可用浏览器打开做连通性检查。
从 metrics 端点核对指标名
仓库的 API 测试 test_verify_metrics_enabled.py 给出了端点用法:向 metrics 地址发起请求,不带参数返回 exporter 指标,带comp=core、comp=registry、comp=jobservice参数分别代理对应组件的指标。以 Harbor 对外地址为例(<harbor>替换为你的 Harbor 主机名/IP,端口为harbor.yml中metric.port的值,默认 9090):
# exporter 自身指标 curl http://<harbor>:9090/metrics # core / registry / jobservice 组件指标 curl "http://<harbor>:9090/metrics?comp=core" curl "http://<harbor>:9090/metrics?comp=registry" curl "http://<harbor>:9090/metrics?comp=jobservice"返回文本中应能看到 exporter 侧的指标名,例如:harbor_up、harbor_health、harbor_system_info、harbor_project_total、harbor_project_quota_usage_byte、harbor_task_concurrency、harbor_task_queue_size、harbor_artifact_pulled,以及 Go 运行时基础指标(go_gc_duration_seconds、go_goroutines等)。这些名称与上文 curl 输出的对应关系来自该测试用例的断言列表。若某个指标缺失,先回到上一步确认metric.enabled: true已生效、harbor-exporter容器存活。
三、导入官方 Grafana 仪表盘
- 打开 Grafana 的 Dashboards → New → Import。
- 上传仓库中的仪表盘文件 contrib/grafana-dashboard/metrics-example.json(Grafana v8 导出的 JSON,
schemaVersion: 36,标题为Harbor)。 - 导入时选择 Prometheus 数据源。注意:该 JSON 没有
__inputs/templating变量定义,但面板里引用了${datasource}、${DS_PROMETHEUS}这类数据源占位写法,导入后需要把面板/行级数据源指向你的 Prometheus 数据源(Grafana 导入界面通常会提示替换数据源;若界面不提示,则进入仪表盘编辑逐个检查面板的数据源设置)。 - 保存仪表盘。
导入后仪表盘包含的分组与面板(与该 JSON 中panels定义一致):
- Info:
component up status(基于harbor_up)、Quota Usage(基于harbor_project_quota_usage_byte); - 项目维度:
project members、Project repo total、artifacts pulled; - Core Metrics:
harbor core request rate、API request time 0.9、harbor core inflight requests; - General metrics:
Process opened fd、Process CPU time、go threads、goroutines、Go heap objects、go allocated memory、go next gc bytes、go gc time分位面板; - JobService Metrics:
task latency、task concurrency、task queue pending size、tasks per minute、number of running scheduled jobs; - Registry Metric:
Registry request inflight、Registry request rate、registry request time 0.9、registry request size 0.9、registry response size 0.9。
四、结果验证与边界
验证方式是打开导入后的仪表盘,确认各分组面板出现曲线或数值而不是 "No data"。判断方法:
component up status面板应有组件记录,对应指标为harbor_up(第二步 curl/metrics能取到即说明数据链已通);- Core/Registry 分组面板依赖
comp=core、comp=registry路径上的指标(harbor_core_http_request_total、registry_http_requests_total等),有推拉流量后面板才会上数; - 若所有面板均无数据,依次检查:Prometheus 数据源配置(Scrape 是否覆盖第二步的 metrics 地址)、
harbor-exporter容器状态、harbor.yml中metric.enabled是否已生效。
需要留意的边界:
- Grafana 版本低于 v8 时该仪表盘可能无法正常工作,这是仓库 README 的明确说明;
- Exporter 指标带缓存(
HARBOR_EXPORTER_CACHE_TIME默认 23 秒,缓存清理间隔默认 14400 秒),面板数值刷新存在延迟属预期行为; - 仪表盘只覆盖上述 exporter/core/registry/jobservice 指标面板,未包含告警规则或通知渠道配置,这些需在 Grafana 中自行添加。
【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考