ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vector 的 PostgreSQL Metrics 数据源深度解析:配置、指标字典与源码实现

Vector 的 PostgreSQL Metrics 数据源深度解析:配置、指标字典与源码实现 Vector 的 PostgreSQL Metrics 数据源深度解析配置、指标字典与源码实现【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector导读本文以 Vector 官方文档postgresql_metrics数据源source为线索完整梳理该组件的定位、工作原理、全部配置参数与权限要求并基于当前仓库的 CUE 元数据与 Rust 源码逐条解读其输出的指标语义与实现细节。读者学完后将能独立配置 Vector 对 PostgreSQL 实例进行周期性指标采集理解include_databases/exclude_databases的正则过滤机制、TLS 连接方式、版本兼容边界以及每个指标的来源视图与单位换算规则。说明本文所依据的官方文档页面 postgresql_metrics.md 本身是一个由模板自动生成的占位文件其真实内容由 postgresql_metrics.cue组件元数据与 generated/postgresql_metrics.cue配置定义两份 CUE 数据生成下文内容均以这两份数据与 源码实现 为准。组件定位与基本特性postgresql_metrics是 Vector 内置的指标类数据源component_kind: source用于从 PostgreSQL 数据库周期性地采集统计信息并转换为 Vector 的 metric 事件流。其元数据定义位于 postgresql_metrics.cue关键特性如下特性维度取值说明deliveryat_least_once至少一次投递语义但该组件本身can_acknowledge返回false不支持端到端确认deployment_rolesdaemon、sidecar可作为守护进程或边车sidecar部署developmentstable稳定级组件egress_methodbatch批量输出statefulfalse无状态组件不支持检查点collect.checkpointdisabled不启用检查点机制collect.from.service.versions9.6-13官方声明支持的 PostgreSQL 版本范围为 9.6 ~ 13collect.from.interface.socketoutgoing / tcp unix / ssl optional通过 TCP 或 Unix Socket 主动外连TLS 可选采集协议上该组件通过 PostgreSQL 原生前端/后端协议tokio-postgres以出站outgoing方式连接数据库支持 TCP 与 Unix Socket 两种传输SSL 为可选与sslmode参数联动。从源码看PostgresqlMetrics::new会解析 endpoint 并取出唯一主机Host::Tcp或Host::Unix若 URI 中包含多个 host 则直接报错MultipleHostsNotSupported因此每个 endpoint 只能指向单一实例src/sources/postgresql_metrics.rs。工作原理与数据来源按 CUE 文档 的how_it_works说明该组件通过向配置的 PostgreSQL 服务器发起 SQL 查询来收集指标。核心工作流程在 build 方法 中体现启动时为每个 endpoint 建立连接并校验版本以scrape_interval_secs为周期驱动tokio::time::interval定时器每个周期内使用join_all并发地对所有 endpoint 执行collect结果合并成一个 metric 批次通过send_batch一次性投递给下游 sink。单次collect_metrics会并发执行三组查询collect_metrics查询来源视图用途说明pg_stat_database数据库级统计每个数据库一行输出 20 个左右指标pg_stat_database_conflicts恢复冲突统计每个数据库一行输出 5 个冲突计数器pg_stat_bgwriter后台写进程统计全局一行输出 11 个指标每次采集结束后如果任一查询失败该 endpoint 会输出up 0的指标并记录内部错误事件而不是中断整个管道全部成功则输出up 1并继续输出其余指标collect。配置指南postgresql_metrics的配置项定义于 generated/postgresql_metrics.cue同时在 PostgresqlMetricsConfig 中由configurable_component宏生成。所有配置项如下配置项类型必填默认值说明endpointsarraystring是—要抓取的 PostgreSQL 实例列表每个元素必须是 libpq 连接 URI 格式scrape_interval_secsuint否15两次抓取之间的间隔单位秒namespacestring否postgresql覆盖该 source 输出指标的默认命名空间include_databasesarraystring否—用 POSIX 正则匹配datname列只采集匹配数据库的指标不设置则采集所有数据库exclude_databasesarraystring否—用 POSIX 正则匹配datname列跳过匹配数据库的指标tlsobject否—连接 PostgreSQL 时的 TLS 配置tls.ca_filestring是配置 tls 时—附加 CA 证书文件的绝对路径证书须为 DER 或 PEMX.509格式一个最小可运行的配置示例sources: postgresql_metrics: type: postgresql_metrics endpoints: - postgresql://postgres:vectorlocalhost:5432/postgres scrape_interval_secs: 15完整配置示例含数据库过滤与 TLSsources: postgresql_metrics: type: postgresql_metrics endpoints: - postgresql://postgres:vectorlocalhost:5432/postgres - postgresql:///postgres?host/var/run/postgresqluservectorpasswordvector scrape_interval_secs: 30 namespace: postgresql include_databases: - ^postgres$ - ^vector$ - ^foo exclude_databases: - ^template.* tls: ca_file: certs/ca.pem要点说明endpoints支持 TCPpostgresql://user:passhost:port/dbname与 Unix Socketpostgresql:///dbname?host/path/to/socket两种形式include_databases与exclude_databases可同时使用先按 include 过滤出候选库再用 exclude 剔除见下文源码分析在include_databases/exclude_databases列表中指定空字符串可匹配datname为NULL的行即共享对象相关的统计行配置tls时可通过 URI 中的sslmoderequire等参数指定加密策略ca_file用于校验证书链。将指标接入下游sinks: prometheus: type: prometheus_exporter inputs: [postgresql_metrics] address: 0.0.0.0:9598 default_namespace: postgresql数据库账号权限要求按 CUE 文档的 Required Privileges 一节采集账号必须被允许对以下视图执行 SELECT 查询pg_stat_databasepg_stat_database_conflictspg_stat_bgwriter实际部署中可以创建一个只读监控账号并授予相应权限例如CREATE USER vector_monitor WITH PASSWORD vector; GRANT CONNECT ON DATABASE postgres TO vector_monitor; GRANT pg_monitor TO vector_monitor; -- PostgreSQL 10 推荐涵盖统计视图只读访问pg_monitor内置角色的引入属于 PostgreSQL 自身能力若使用 9.6 等旧版本需改用对上述三个视图的显式 GRANT。输出指标字典所有指标默认命名空间均为postgresql均带endpoint如postgresql:///postgres?hostlocalhostport5432与host两个必选标签凡来源于pg_stat_database/pg_stat_database_conflicts的指标额外带db数据库名标签。全部指标定义位于 CUE 元数据的 output.metrics 部分。存活探针指标类型标签说明upgaugeendpoint, hostPostgreSQL 服务器是否在线采集成功为 1失败为 0pg_stat_database系列带db标签指标类型说明pg_stat_database_datidgauge该数据库的 OID共享对象行为 0pg_stat_database_numbackendsgauge当前连接到该数据库的后端进程数唯一反映当前状态的列其余均为自上次重置以来的累计值pg_stat_database_xact_commit_totalcounter已提交事务数pg_stat_database_xact_rollback_totalcounter已回滚事务数pg_stat_database_blks_read_totalcounter磁盘块读取次数pg_stat_database_blks_hit_totalcounter缓冲区缓存命中次数仅统计 PostgreSQL 缓冲池命中不含操作系统文件系统缓存pg_stat_database_tup_returned_totalcounter查询返回的行数pg_stat_database_tup_fetched_totalcounter查询取回的行数pg_stat_database_tup_inserted_totalcounter插入行数pg_stat_database_tup_updated_totalcounter更新行数pg_stat_database_tup_deleted_totalcounter删除行数pg_stat_database_conflicts_totalcounter因恢复冲突被取消的查询数仅备库出现pg_stat_database_temp_files_totalcounter临时文件创建数无论成因是排序/哈希也不受log_temp_files影响pg_stat_database_temp_bytes_totalcounter写入临时文件的总字节数pg_stat_database_deadlocks_totalcounter检测到的死锁数pg_stat_database_checksum_failures_totalcounter数据页校验和失败次数未启用数据校验和时为 0PostgreSQL 12 才输出pg_stat_database_checksum_last_failuregauge最近一次校验和失败的时间戳未启用时为 0PostgreSQL 12 才输出pg_stat_database_blk_read_time_seconds_totalcounter后端读取数据文件块耗时毫秒单位换算为秒未开启track_io_timing时为 0pg_stat_database_blk_write_time_seconds_totalcounter后端写入数据文件块耗时毫秒单位换算为秒未开启track_io_timing时为 0pg_stat_database_stats_resetgauge这些统计信息最近一次被重置的时间pg_stat_database_conflicts系列带db标签指标类型说明pg_stat_database_conflicts_confl_tablespace_totalcounter因表空间被删除而取消的查询数pg_stat_database_conflicts_confl_lock_totalcounter因锁超时被取消的查询数pg_stat_database_conflicts_confl_snapshot_totalcounter因快照过旧被取消的查询数pg_stat_database_conflicts_confl_bufferpin_totalcounter因缓冲页被钉住被取消的查询数pg_stat_database_conflicts_confl_deadlock_totalcounter因死锁被取消的查询数pg_stat_bgwriter系列无db标签指标类型说明pg_stat_bgwriter_checkpoints_timed_totalcounter定时触发的检查点次数pg_stat_bgwriter_checkpoints_req_totalcounter请求触发的检查点次数pg_stat_bgwriter_checkpoint_write_time_seconds_totalcounter检查点处理中写文件到磁盘的总耗时毫秒换算为秒pg_stat_bgwriter_checkpoint_sync_time_seconds_totalcounter检查点处理中同步文件到磁盘的总耗时毫秒换算为秒pg_stat_bgwriter_buffers_checkpoint_totalcounter检查点期间写入的缓冲页数pg_stat_bgwriter_buffers_clean_totalcounter后台写进程写入的缓冲页数pg_stat_bgwriter_maxwritten_clean_totalcounter后台写进程因写入过多缓冲页而停止清理扫描的次数pg_stat_bgwriter_buffers_backend_totalcounter后端直接写入的缓冲页数pg_stat_bgwriter_buffers_backend_fsync_totalcounter后端自行执行 fsync 的次数正常由后台写进程处理pg_stat_bgwriter_buffers_alloc_totalcounter已分配的缓冲页数pg_stat_bgwriter_stats_resetgauge这些统计信息最近一次被重置的时间源码级实现细节版本检测与兼容边界连接建立后客户端会执行SHOW server_version_num并将结果解析为整数若小于90600即 PostgreSQL 9.6则返回InvalidVersion错误并拒绝采集build_client。这与 CUE 中声明的versions: 9.6-13一致。此外checksum_failures与checksum_last_failure两个指标仅在client_version 120000PostgreSQL 12时才被采集因为pg_stat_database视图的这两列是 PG 12 新增的collect_pg_stat_database。include_databases/exclude_databases的动态 SQLDatnameFiltersrc/sources/postgresql_metrics.rs负责把正则列表编译成针对pg_stat_database与pg_stat_database_conflicts的WHERE子句每个 include 模式生成datname ~ $nPOSIX 正则匹配用OR连接后整体括号包裹每个 exclude 模式生成NOT (datname ~ $n ...)include 与 exclude 之间用AND组合先 include 后 exclude列表中的会被单独提取include 含时追加datname IS NULL用OR合并exclude 含时追加datname IS NOT NULL用AND合并且优先级高于 include。所有模式均通过参数化查询$1、$2…传入避免 SQL 注入。集成测试test_host_include_databases_and_exclude_databases验证了include: [template\\d]exclude: [template0]最终只会留下template1的结果src/sources/postgresql_metrics.rs。单位换算与端点脱敏blk_read_time、blk_write_time、checkpoint_write_time、checkpoint_sync_time在 PostgreSQL 中单位是毫秒源码统一除以 1000转换为秒后输出如 collect_pg_stat_databaseendpoint标签并非原始 URI而是经过config_to_endpoint重写、剔除用户名/密码等敏感信息后的脱敏连接串如postgresql:///postgres?hostlocalhostport5432同时仅保留非默认参数如sslmoderequire、target_session_attrsread-write等默认值会被省略config_to_endpoint。错误处理与内部可观测性采集失败时通过 PostgresqlMetricsCollectError 发出PostgreSQL query error.内部事件stagereceivingerror_typerequest_failed并累加component_errors_total计数器成功路径则分别发出EndpointBytesReceived、EventsReceived与CollectionCompleted事件用于观测抓取字节数、事件量与耗时。组件自身的遥测指标为collect_completed_total与collect_duration_seconds见 CUE telemetry 定义。若下游send_batch返回错误管道关闭会发出StreamClosedError并终止采集循环。测试验证除单元测试generate_config外源码底部包含一组需要postgresql_metrics-integration-testsfeature 启用的集成测试src/sources/postgresql_metrics.rs覆盖了本文提到的核心行为test_hostTCP 连接 完整指标采集断言up 1、命名空间为postgresql、存在endpoint/host标签且三类查询均有代表性指标输出test_localUnix Socket 连接postgresql:///postgres?host...uservectorpasswordvectortest_host_sslsslmoderequireca_file的 TLS 连接test_host_include_databases/test_host_exclude_databases/test_host_exclude_databases_empty/test_host_include_databases_and_exclude_databases验证正则过滤与空串匹配 NULL 的行为。这些测试依赖 test_util 中的 postgres 辅助函数pg_url、pg_socket提供测试库连接信息。总结与最佳实践postgresql_metrics组件以轻量的 SQL 抓取方式将 PostgreSQL 的pg_stat_database、pg_stat_database_conflicts、pg_stat_bgwriter三大统计视图转化为带统一endpoint/host/db标签的指标流。实战中建议限定权限为监控账号只授予对上述三个视图的 SELECT或直接授予pg_monitor善用数据库过滤用include_databases/exclude_databases精确控制采集范围避免template库等无关库产生噪声关注版本差异9.6 以下不支持12 以下无 checksum 相关指标若需要 I/O 耗时指标需在 PostgreSQL 侧开启track_io_timing配置告警以up 0作为连接失败的即时信号配合pg_stat_replication等指标如需要可另行采集完善数据库可观测体系。更完整的组件文档页面可在 postgresql_metrics.md 模板 与其生成源 postgresql_metrics.cue 中查阅。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表