
参数 | 说明 |
名称 | 集成名称,命名规范如下: 名称具有唯一性。 名称需要符合下面的正则:'^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$'。 |
用户名 | |
密码 | PostgreSQL 的密码。 |
地址 | PostgreSQL 的连接地址。 |
标签 | 给指标添加自定义 Label。 |
password,YAML 配置示例如下:apiVersion: v1kind: Secretmetadata:name: postgres-testtype: OpaquestringData:username: postgrespassword: you-guess #对应 PostgreSQL 密码
apiVersion: apps/v1kind: Deploymentmetadata:name: postgres-test # 根据业务需要调整成对应的名称,建议加上 PG 实例的信息namespace: postgres-test # 根据业务需要调整成对应的名称,建议加上 PG 实例的信息labels:app: postgresapp.kubernetes.io/name: postgresqlspec:replicas: 1selector:matchLabels:app: postgresapp.kubernetes.io/name: postgresqltemplate:metadata:labels:app: postgresapp.kubernetes.io/name: postgresqlspec:containers:- name: postgres-exporterimage: ccr.ccs.tencentyun.com/rig-agent/postgres-exporter:v0.8.0args:- "--web.listen-address=:9187" # export 开启的端口- "--log.level=debug" # 日志级别env:- name: DATA_SOURCE_USERvalueFrom:secretKeyRef:name: postgres-test # 对应上一步中的 Secret 的名称key: username # 对应上一步中的 Secret Key- name: DATA_SOURCE_PASSvalueFrom:secretKeyRef:name: postgres-test # 对应上一步中的 Secret 的名称key: password # 对应上一步中的 Secret Key- name: DATA_SOURCE_URIvalue: "x.x.x.x:5432/postgres?sslmode=disable" # 对应的连接信息ports:- name: http-metricscontainerPort: 9187
DATA_SOURCE_USER 和 DATA_SOURCE_PASS,使用户无法查看到明文的用户名密码。您还可以用 DATA_SOURCE_USER_FILE/DATA_SOURCE_PASS_FILE 从文件读取用户名密码,或使用 DATA_SOURCE_NAME 将用户名密码也放在连接串里,例如 postgresql://login:password@hostname:port/dbname。参数 | 参数说明 |
sslmode | 是否使用 SSL,支持的值如下: - disable:不使用 SSL。 - require:总是使用(跳过验证)。 - verify-ca:总是使用(检查服务端提供的证书是不是由一个可信的 CA 签发)。 - verify-full:总是使用(检查服务端提供的证书是不是由一个可信的 CA 签发,并且检查 hostname 是不是被证书所匹配)。 |
| |
| |
| |
| |
fallback_application_name | 一个备选的 application_name。 |
connect_timeout | 最大连接等待时间,单位秒。0值等于无限大。 |
sslcert | 证书文件路径。文件数据格式必须是 PEM。 |
sslkey | 私钥文件路径。文件数据格式必须是 PEM。 |
sslrootcert | root 证书文件路径。文件数据格式必须是 PEM。 |
参数 | 参数说明 | 环境变量 |
--web.listen-address | 监听地址,默认9487。 | PG_EXPORTER_WEB_LISTEN_ADDRESS |
--web.telemetry-path | 暴露指标的路径,默认 /metrics。 | PG_EXPORTER_WEB_TELEMETRY_PATH |
--extend.query-path | PG_EXPORTER_EXTEND_QUERY_PATH | |
--disable-default-metrics | 只使用通过 queries.yaml 提供的指标。 | PG_EXPORTER_DISABLE_DEFAULT_METRICS |
--disable-settings-metrics | 不抓取 pg_settings 相关的指标。 | PG_EXPORTER_DISABLE_SETTINGS_METRICS |
--auto-discover-databases | 是否自动发现 Postgres 实例上的数据库。 | PG_EXPORTER_AUTO_DISCOVER_DATABASES |
--dumpmaps | 打印内部的指标信息,除了 debug 不要使用,方便排查自定义 queries 相关的问题。 | - |
--constantLabels | 自定义标签,通过 key=value 的形式提供,多个标签对使用 , 分隔。 | PG_EXPORTER_CONSTANT_LABELS |
--exclude-databases | 需要排除的数据库,仅在 --auto-discover-databases 开启的情况下有效 | PG_EXPORTER_EXCLUDE_DATABASES |
--log.level | 日志级别 debug/info/warn/error/fatal。 | PG_EXPORTER_LOG_LEVEL |
curl http://exporter:9187/metrics 无法获取 Postgres 实例运行时间。我们可以通过自定义一个 queries.yaml 来获取该指标:queries.yaml 的 ConfigMap。--extend.query-path 来使用 ConfigMap,将上述的 Secret 以及 Deployment 进行汇总,汇总后的 YAML 如下所示。# 注意: 以下 document 创建一个名为 postgres-test 的 Namespace,仅作参考apiVersion: v1kind: Namespacemetadata:name: postgres-test# 以下 document 创建一个包含用户名密码的 Secret---apiVersion: v1kind: Secretmetadata:name: postgres-test-secretnamespace: postgres-testtype: OpaquestringData:username: postgrespassword: you-guess# 以下 document 创建一个包含自定义指标的 queries.yaml---apiVersion: v1kind: ConfigMapmetadata:name: postgres-test-configmapnamespace: postgres-testdata:queries.yaml: |pg_postmaster:query: "SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time()"master: truemetrics:- start_time_seconds:usage: "GAUGE"description: "Time at which postmaster started"# 以下 document 挂载了 Secret 和 ConfigMap ,定义了部署 Exporter 相关的镜像等参数---apiVersion: apps/v1kind: Deploymentmetadata:name: postgres-testnamespace: postgres-testlabels:app: postgresapp.kubernetes.io/name: postgresqlspec:replicas: 1selector:matchLabels:app: postgresapp.kubernetes.io/name: postgresqltemplate:metadata:labels:app: postgresapp.kubernetes.io/name: postgresqlspec:containers:- name: postgres-exporterimage: wrouesnel/postgres_exporter:latestargs:- "--web.listen-address=:9187"- "--extend.query-path=/etc/config/queries.yaml"- "--log.level=debug"env:- name: DATA_SOURCE_USERvalueFrom:secretKeyRef:name: postgres-test-secretkey: username- name: DATA_SOURCE_PASSvalueFrom:secretKeyRef:name: postgres-test-secretkey: password- name: DATA_SOURCE_URIvalue: "x.x.x.x:5432/postgres?sslmode=disable"ports:- name: http-metricscontainerPort: 9187volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: postgres-test-configmap
curl http://exporter:9187/metrics 命令后,即可通过自定义的 queries.yaml 查询到 Postgres 实例启动时间指标。示例如下:# HELP pg_postmaster_start_time_seconds Time at which postmaster started# TYPE pg_postmaster_start_time_seconds gaugepg_postmaster_start_time_seconds{server="x.x.x.x:5432"} 1.605061592e+09
PodMonitors 来定义 Prometheus 抓取任务,YAML 配置示例如下:apiVersion: monitoring.coreos.com/v1kind: PodMonitormetadata:name: postgres-exporter # 填写一个唯一名称namespace: cm-prometheus # 按量实例: 集群的 namespace; 包年包月实例(已停止售卖): namespace 固定,不要修改spec:namespaceSelector:matchNames:- postgres-testpodMetricsEndpoints:- interval: 30spath: /metricsport: http-metrics # 前面 Exporter 那个 Container 的端口名relabelings:- action: labeldropregex: __meta_kubernetes_pod_label_(pod_|statefulset_|deployment_|controller_)(.+)- action: replaceregex: (.*)replacement: postgres-xxxxxxsourceLabels:- instancetargetLabel: instanceselector:matchLabels:app: postgres


psql -h <host> -p <port> -U <username> -d <database>

CREATE USER monitor WITH PASSWORD 'monitor';ALTER USER monitor SET SEARCH_PATH TO monitor,pg_catalog;GRANT CONNECT ON DATABASE postgres TO monitor;

GRANT pg_monitor to monitor;

psql -h <host> -p <port> -U <username> -d <database>

CREATE USER monitor WITH PASSWORD 'monitor';ALTER USER monitor SET SEARCH_PATH TO monitor,pg_catalog;GRANT CONNECT ON DATABASE postgres TO monitor;

CREATE SCHEMA monitor;GRANT USAGE ON SCHEMA monitor TO monitor;CREATE OR REPLACE FUNCTION get_pg_stat_activity() RETURNS SETOF pg_stat_activity AS$$ SELECT * FROM pg_catalog.pg_stat_activity; $$LANGUAGE sqlVOLATILESECURITY DEFINER;CREATE OR REPLACE VIEW monitor.pg_stat_activityASSELECT * from get_pg_stat_activity();GRANT SELECT ON monitor.pg_stat_activity TO monitor;CREATE OR REPLACE FUNCTION get_pg_stat_replication() RETURNS SETOF pg_stat_replication AS$$ SELECT * FROM pg_catalog.pg_stat_replication; $$LANGUAGE sqlVOLATILESECURITY DEFINER;CREATE OR REPLACE VIEW monitor.pg_stat_replicationASSELECT * FROM get_pg_stat_replication();GRANT SELECT ON monitor.pg_stat_replication TO monitor;CREATE EXTENSION pg_stat_statements;CREATE OR REPLACE FUNCTION get_pg_stat_statements() RETURNS SETOF pg_stat_statements AS$$ SELECT * FROM public.pg_stat_statements; $$LANGUAGE sqlVOLATILESECURITY DEFINER;CREATE OR REPLACE VIEW monitor.pg_stat_statementsASSELECT * FROM get_pg_stat_statements();GRANT SELECT ON monitor.pg_stat_statements TO monitor;





文档反馈