免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Helm 部署 Prometheus Postgres Exporter 全指南:从数据源配置到自定义查询指标

Helm 部署 Prometheus Postgres Exporter 全指南:从数据源配置到自定义查询指标 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本篇技术指南以 charts 仓库中 stable/prometheus-postgres-exporter 这一 Helm Chart 为核心系统讲解如何在 Kubernetes 集群中通过 Helm 一键部署 postgres_exporter将 PostgreSQL 的运行指标连接数、表读写、复制延迟、语句性能等暴露给 Prometheus 抓取。读完本文你将掌握该 Chart 的全部配置参数、数据源连接方式、自定义 SQL 查询指标、与 Prometheus Operator 的 ServiceMonitor 集成以及从模板源码层面理解其实现原理与部署细节。一、Chart 简介与适用场景postgres_exporter 是 Prometheus 官方生态中最常用的 PostgreSQL 指标导出器该 Chart 负责在 Kubernetes 上以 Deployment 形式启动它并封装了 Service、ConfigMap、Secret、ServiceAccount、RBAC 乃至 ServiceMonitor 等配套资源。其核心价值在于一键部署 exporter 并自动生成连接配置免去手工编写 YAML 的繁琐通过 values.yaml 集中管理数据源地址、账号密码、查询配置等所有可调参数内置多组 PostgreSQL 官方推荐查询复制延迟、表统计、IO 统计、数据库大小、语句性能开箱即用可直接对接 Prometheus Operator 的 ServiceMonitor实现自动化采集。从 Chart.yaml 可以看到该 Chart 的元信息名称prometheus-postgres-exporter、版本1.3.1、appVersion: 0.8.0对应 postgres_exporter 镜像wrouesnel/postgres_exporter:v0.8.0。需要说明的是该 Chart 已在 Chart.yaml 中标记deprecated: true官方维护已迁移至 prometheus-community 的 helm-charts 仓库但作为经典实现其配置逻辑与模板设计仍极具参考价值本指南以当前仓库内的实际代码为准。二、快速开始一行命令部署最简安装方式TL;DR$ helm install stable/prometheus-postgres-exporter执行后即会在集群默认配置下创建 exporter Deployment 及其关联资源。默认情况下exporter 会使用 values.yaml 中的默认数据源配置主机为空、用户postgres、密码somepassword、端口5432、sslmodedisable因此生产环境必须先修改数据源配置见下文第四节否则采集的是默认示例连接。三、安装与卸载以发布名my-release安装$ helm install --name my-release stable/prometheus-postgres-exporter注意--name是 Helm 2 的语法若使用 Helm 3请改用helm install my-release stable/prometheus-postgres-exporter。卸载并删除发布$ helm delete my-release该命令会移除 Chart 关联的所有 Kubernetes 组件Deployment、Service、ConfigMap、Secret、RBAC 等并删除该发布记录。安装完成后NOTES.txt 会根据service.type输出访问入口提示ClusterIP通过kubectl port-forward pod 8080:80在本机访问http://127.0.0.1:8080NodePort通过$NODE_IP:$NODE_PORT访问LoadBalancer通过$SERVICE_IP访问等待 LB IP 就绪可执行kubectl get svc -w release-prometheus-postgres-exporter。四、配置参数详解4.1 参数总表以下参数继承自 README.md 并对照 values.yaml 校准默认值参数说明默认值image.repository镜像仓库wrouesnel/postgres_exporterimage.tag镜像标签v0.8.0image.pullPolicy镜像拉取策略IfNotPresentservice.annotationsService 注解{}service.typeService 类型ClusterIPservice.portService 对外端口80service.targetPort容器内目标端口9187service.nameService 端口名httpservice.labelsService 附加标签{}serviceMonitor.enabled是否创建 Prometheus Operator 的 ServiceMonitorfalseserviceMonitor.namespaceServiceMonitor 所在命名空间未设置随 ReleaseserviceMonitor.intervalPrometheus 抓取频率未设置serviceMonitor.telemetryPath抓取路径未设置默认/metricsserviceMonitor.labels传给 ServiceMonitor 的标签{}serviceMonitor.timeout抓取超时未设置resources容器资源限制/请求{}config.datasource.hostPostgreSQL 主机空config.datasource.user数据库用户postgresconfig.datasource.password数据库密码与passwordSecret二选一somepasswordconfig.datasource.passwordSecret密码来源 Secretname/key{}config.datasource.port数据库端口5432config.datasource.database数据库名空config.datasource.sslmodeSSL 模式disableconfig.datasourceSecret数据源完整连接串来源 Secretname/key{}config.disableDefaultMetrics是否仅使用queries.yaml中的指标falseconfig.disableSettingsMetrics是否禁用设置类指标falseconfig.autoDiscoverDatabases是否自动发现所有数据库falseconfig.excludeDatabases自动发现时需要排除的数据库列表[]config.queriesexporter 执行的 SQL 查询定义内置六组查询见第五节rbac.create是否创建 RBAC 资源truerbac.pspEnabled是否创建 PodSecurityPolicytrueserviceAccount.create是否创建 ServiceAccounttrueserviceAccount.nameServiceAccount 名称空由 fullname 模板生成tolerationsPod 容忍度[]nodeSelector节点选择标签{}affinity节点/Pod 亲和性{}annotationsDeployment 注解{}podLabelsPod 附加标签{}extraContainers附加 sidecar 容器如 cloudsql-proxyextraVolumes附加卷供 sidecar 使用securityContextPod 安全上下文{}replicaCount副本数1说明README 参数表中imageTag/imagePullPolicy为旧版扁平命名当前 values.yaml 已统一为嵌套结构image.repository、image.tag、image.pullPolicy且镜像 tag 已从表中记录的v0.5.1升级为v0.8.0配置时以 values.yaml 结构为准。4.2 通过 --set 指定参数$ helm install --name my-release \ --set serviceAccount.namepostgres \ stable/prometheus-postgres-exporter4.3 通过 values 文件指定参数$ helm install --name my-release -f values.yaml stable/prometheus-postgres-exporter-f可叠加多个文件后指定的文件优先级更高适合将环境差异开发/生产拆分为不同 values 文件管理。五、连接 PostgreSQL 数据源两种配置方式5.1 方式一结构化字段 config.datasourcevalues.yaml 提供结构化配置config: datasource: host: my-postgres user: postgres password: somepassword # passwordSecret: # name: db-secret # key: password port: 5432 database: appdb sslmode: disable模板会将其组装为连接 URI。在 _helpers.tpl 中定义了data_source_uri模板host:port/database?sslmodessl最终在 deployment.yaml 中转换为三个环境变量注入容器DATA_SOURCE_URIhost:port/database?sslmode...DATA_SOURCE_USER数据库用户名DATA_SOURCE_PASS数据库密码其中密码优先从passwordSecret指定的 Secret 中读取secretKeyRef否则由 secrets.yaml 自动创建名为release-prometheus-postgres-exporter的 Secret将config.datasource.password经b64enc编码存入data_source_password键。源码校验若同时定义了passwordSecret与passworddeployment.yaml 顶部会直接执行fail中断渲染并报错ERROR: only one of .Values.config.datasource.passwordSecret and .Values.config.datasource.password must be defined强制二选一避免歧义。5.2 方式二完整连接串 config.datasourceSecret当数据源较多或希望以标准 URL 形式集中管理时可使用datasourceSecretconfig: datasourceSecret: name: pg-conn key: connectionSecret 的值须为连接串格式postgresql://login:passwordhostname:port/dbname?sslmodedisable支持用逗号分隔多个连接串来配置多个 PostgreSQL 数据库。此时 deployment.yaml 不再使用结构化字段而是通过secretKeyRef将 Secret 的值注入单一环境变量DATA_SOURCE_NAME。这也是 postgres_exporter 官方支持多数据源的标准方式。六、自定义查询指标config.queries 深度解析6.1 查询配置文件如何生效config.queries是一段 YAML 字符串它被写入 configmap.yaml 生成的 ConfigMap 中键名为config.yaml并通过卷挂载到容器内/etc/config.yaml见 deployment.yaml 的volumeMounts使用subPath: config.yaml精确挂载单文件。容器启动时携带参数--extend.query-path/etc/config.yaml即告诉 postgres_exporter 额外加载此查询文件生成自定义指标。此外ConfigMap 内容变化会通过checksum/config注解值为sha256sum触发 Pod 滚动更新保证查询配置修改后无需手动重启。6.2 内置默认查询集values.yaml 内置了从 postgres_exporter 官方 queries.yaml 提取的六组查询覆盖最常用的监控维度① pg_replication复制延迟pg_replication: query: SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp())) as lag master: true metrics: - lag: usage: GAUGE description: Replication lag behind master in secondsmaster: true表示仅主库执行用于备库复制延迟告警。② pg_postmaster实例启动时间pg_postmaster: query: SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time() master: true metrics: - start_time_seconds: usage: GAUGE description: Time at which postmaster started③ pg_stat_user_tables用户表统计含 vacuum/analyze查询返回seq_scan、seq_tup_read、idx_scan、idx_tup_fetch、n_tup_ins/upd/del/hot_upd、n_live_tup、n_dead_tup、n_mod_since_analyze以及last_vacuum、last_autovacuum、last_analyze、last_autoanalyze和vacuum_count、autovacuum_count、analyze_count、autoanalyze_count。其中datname、schemaname、relname作为LABEL维度其余计数指标按 COUNTER/GAUGE 语义暴露。④ pg_statio_user_tables表 IO 统计涵盖heap_blks_read/hit、idx_blks_read/hit、toast_blks_read/hit、tidx_blks_read/hit用于分析缓冲命中率与磁盘 IO。⑤ pg_database数据库大小pg_database: query: SELECT pg_database.datname, pg_database_size(pg_database.datname) as size FROM pg_database master: true cache_seconds: 30 metrics: - datname: usage: LABEL description: Name of the database - size_bytes: usage: GAUGE description: Disk space used by the databasecache_seconds: 30表示结果缓存 30 秒避免pg_database_size反复执行带来的开销。⑥ pg_stat_statements语句性能分析依赖pg_stat_statements扩展输出calls、total_time_seconds、min/max/mean/stddev_time_seconds、rows、共享/本地缓冲命中与读写、临时块读写、块读写耗时等指标按rolname、datname、queryid打标签。该查询仅当数据库启用pg_stat_statements扩展且有对应权限时才能返回数据。6.3 自定义查询的写法用户可按同一格式追加自己的查询块config: queries: |- my_custom_metric: query: SELECT count(*) as total FROM my_table master: true metrics: - total: usage: GAUGE description: Total rows in my_table指标usage支持GAUGE、COUNTER、LABEL三种类型数值型用GAUGE/COUNTER用于分组的维度列用LABEL。配置即改即生效ConfigMap 变更触发滚动更新。6.4 指标开关默认指标与设置指标config.disableDefaultMetrics: true仅采集config.queries中定义的指标忽略 exporter 内置默认指标对应启动参数--disable-default-metrics见 deployment.yaml。config.disableSettingsMetrics: true禁用设置类指标如pg_settings_*对应--disable-settings-metrics可显著减少指标基数。七、数据库自动发现config.autoDiscoverDatabases: true时exporter 会自动发现实例上的所有数据库并逐一采集启动参数为--auto-discover-databases配合config.excludeDatabases排除不需要监控的库如系统库postgres、template0/1等config: autoDiscoverDatabases: true excludeDatabases: - postgres - template0 - template1模板会将列表以逗号拼接后通过--exclude-databases参数传入见 deployment.yaml 第 44-50 行。八、与 Prometheus Operator 集成ServiceMonitor当集群安装了 Prometheus Operator 且serviceMonitor.enabled: true时servicemonitor.yaml 会创建monitoring.coreos.com/v1的 ServiceMonitor 资源。模板以Capabilities.APIVersions.Has monitoring.coreos.com/v1判断 API 是否可用避免在不支持时渲染失败。serviceMonitor: enabled: true namespace: monitoring interval: 30s telemetryPath: /metrics timeout: 10s labels: release: prometheus-operator对应生成spec.endpoints[].targetPort指向 Service 端口名httpinterval/scrapeTimeout抓取频率与超时path抓取路径exporter 默认/metricsjobLabel取 fullnamenamespaceSelector.matchNames锁定 Release 所在命名空间selector.matchLabels按apprelease标签选中目标 Service。提示若你的 Prometheus Operator 通过prometheusSpec.serviceMonitorSelector选择 ServiceMonitor需通过serviceMonitor.labels打上对应标签如release: prometheus-operator否则无法被发现。九、服务暴露与访问验证service.yaml 生成的 Service 默认类型ClusterIP端口80→ 容器9187端口名http。exporter 健康检查见 deployment.yamllivenessProbe/readinessProbe均通过httpGet请求/路径、http端口。部署完成后可验证指标输出$ kubectl port-forward svc/my-release-prometheus-postgres-exporter 8080:80 $ curl http://127.0.0.1:8080/metrics返回体中应包含pg_up 1连接成功标志以及上文各查询块生成的指标。若要变更暴露方式设置service.type: NodePort或LoadBalancer即可。十、RBAC、ServiceAccount 与安全role.yaml 在rbac.create: true且rbac.pspEnabled: true时创建 Role授予对该 Chart 生成的 PodSecurityPolicy 的use权限PSP 定义见 podsecuritypolicy.yaml绑定关系见 rolebinding.yaml。serviceaccount.yaml 在serviceAccount.create: true时创建专属 ServiceAccount名称未指定时由 _helpers.tpl 的serviceAccountName模板生成默认default兜底。Deployment 通过serviceAccountName引用它。securityContext可配置 Pod 级安全上下文例如在 values.yaml 中放开注释启用只读文件系统或指定runAsUser: 65534nobodysecurityContext: runAsUser: 65534十一、调度、资源与扩展nodeSelector/affinity/tolerations将 exporter 固定到特定节点或按亲和性调度resources显式声明 CPU/内存 requests 与 limits默认{}不限制适合 Minikube 等小环境annotations/podLabels向 Deployment/Pod 注入自定义注解与标签extraContainers/extraVolumes以字符串形式追加 sidecar 容器与卷典型用途是搭配 Google CloudSQL Proxy 等数据库代理实现经由代理连接云数据库的采集拓扑。十二、从模板源码看整体部署拓扑综合各模板文件一次helm install实际生成的资源链路如下configmap.yaml承载config.queries查询定义secrets.yaml承载明文配置的数据库密码deployment.yaml组装连接环境变量、挂载查询文件、注入启动参数与探针并做password/passwordSecret互斥校验service.yaml暴露9187指标端口servicemonitor.yaml对接 Prometheus Operatorserviceaccount.yaml、role.yaml、rolebinding.yaml、podsecuritypolicy.yaml完成权限与安全策略。其中连接串拼装逻辑集中在 _helpers.tpl 的data_source_uri定义中改动连接格式只需维护这一处模板其余资源通过fullname/name/chart/release/heritage标准标签形成关联体现了 Helm 模板复用的设计惯例。十三、弃用说明与迁移提示如 Chart.yaml 所标注该 Chart 已deprecated: true且不再维护官方将其迁移至 prometheus-community 的 helm-charts 仓库。当前仓库内的实现镜像 tagv0.8.0、appVersion 0.8.0仍可正常安装使用迁移到新仓库时本节所述的config.datasource、config.queries、serviceMonitor等核心配置语义基本保持一致可平滑对照迁移。若在旧版 Kubernetes 集群使用请注意 PSP 等资源随集群版本演进可能需要调整。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Wand-Enhancer 免费解除 Wand 2 小时限制本地补丁加手机远程面板Wand Enhancer 免费解除 Wand 2 小时限制本地补丁加手机远程面板 Wand前名 WeMod免费版每次只能玩 2 小时AI 攻略还锁在专桌面应用前端使用 prometheus-redis-exporter Helm Chart 采集 Redis 指标部署、配置与 Prometheus Operator 集成实战使用 prometheus redis exporter Helm Chart 采集 Redis 指标部署、配置与 Prometheus Operator 集fhEVM Coprocessor SQL Exporter用 Helm sql_exporter 把 Postgres 指标接入 Prometheus 的完整指南fhEVM Coprocessor SQL Exporter用 Helm sql_exporter 把 Postgres 指标接入 Prometheus密码学隐私计算区块链后端上一篇ticket-purchase 大麦安卓端 V2 抢票自动化Appium 驱动、索引定位与极速点击实战下一篇如何免费解锁QQ音乐、网易云音乐加密文件Unlock-Music音频解密工具完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表