版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PostgreSQL集群监控系统方案 Pigsty技术创新,变革未来监控系统是智能化管理与自动化运维的基石,可以为资源规划, 故障排查,性能优化提供至关重要的数据支持。PostgreSQL是世界上最先进的开源关系型数据库,但在其生态中 缺少一个“足够好用”的开源监控系统。Pigsty旨在弥补这一缺憾,这是一个基于开源生态自研的监控系统,专为大规模PostgreSQL集群监控管理而设计,指标丰 富程度与覆盖率一骑绝尘,在实际生产环境中久经考验,并提供 试用的开源版本与可选的商业支持。概述需求与候选12概览3指标覆盖4集群监控5演示与说明目录CONTENTS针对 PostgreSQL 的监控系统,
2、而非通用DB监控的大路货色指标全面详实充分反映系统状态,而非以简单指标+OS指标凑数 针对大规模集群管理,而非仅关注单个实例使用通用开源监控基础设施,可与其他监控集成,不绑定供应商。 自动适配集群扩缩容与高可用切换,无需人工维护干预。需求与痛点1候选产品指标不够丰富,大多只有标准指标缺少集群监控,大多只有单实例监控Sometimes Naive其他产品:PgAdmin4, PGCluu等不再列出名称公司模式技术栈指标pgwatchCyberTech免费+收费InfluxDB, Grafana只有基本指标pgmonitorCrunchyData免费Prometheus, Grafana不错,指标
3、覆盖中等datadogDatadog收费DataDog美观,集成度高,基本指标pgDashRapidLoop收费专有美观,指标简单ClusterControlCyberTech收费专有 + Grafana美观,集成部署方案,指标简单pganalyzeDuboce收费专有兼有日志与慢查分析,指标简单Aliyun RDSAlibaba云Unknown基本指标AWS RDSAmazon云Unknown指标比较丰富Azure RDSMicrosoft云Unknown基本指标pgmonitor/documentation/pgmonitor/latest/CrunchyData出品,基于Grafana与
4、Prometheus,可复用监控基础设施,便于与其他系统集成,开源免费完成度不错,覆盖常用指标,有告警配置,仅针对单实例使用pgwatchcybertech收费,但有免费版本pgdash收费,界面做的不错只能针对单个实例 指标覆盖率一般pganalyzePublic Demo:/databases/6界面美观清晰,有一个不错的日志浏览器与可视化的慢查询Explain工具但是只能针对单实例使用,指标丰度一般,且收费Aliyun RDSAWS RDS云厂商RDS的监控指标云厂商没有合适的怎么办?自己造!针对大规模集群设计 (100+实例)指标全面覆盖(约700类,每实例3000+)多层次洞察:全局
5、,分片,集群,服务,实例等 基于Grafana, Prometheus,便于集成无绑定自动适配集群/实例新增、下线、切换长时间的生产环境验证Demo: Pigsty针对大规模数据库集群监控与管理而设计,提 供简单便利的高可用数据库供给方案与一流的图形化 监控管理界面。概览2Postgres In Graphic STYleProject Repo: /Vonng/pigstyPublic Demo: 概览 - UIPigsty的UI基于Grafana开发可惜这里太小,画不下概览 - 架构Pigsty 基 于自研 pg_exporter 收集数据库与连接池指标 (开源)开源 Prometheus
6、 收集时序数据指标 (定制大量引申指标)开源 Grafana 展示监控信息(深度定制的几十个看板,几千个面板) 开源 Consul / etcd 配置自动服务发现 (可选)基于业界监控最佳实践,完全基于开源组件定制开发拒绝绑定供应商,便于集成其他监控系统,实现应用全链路监控。概览 - 模型Pigsty 的监控模型 围绕以下5个层次进行组织:概览(Overview)(包含全局概览与分片概览,主题为多个集群之间的指标横向对比)集群(Cluster) (集群信息汇总,包括成员,汇总,指标横向对比,各类主题面板)服务(Service) (集群内的服务指标:主从、读写、流量、切换、路由,健康等)实例(I
7、nstance) (Node实例,PG实例,PGB实例,Exporter实例,HAProxy实例等)数据库(Database)(包括数据库层面的监控指标,以及数据库内的查询、表、对象)概览 - 指标Pigsty旨在提供最全面的监控指标单个数据库实例有约3000几万个不等的时间序列指标,依数据库表数量而异。单个数据库实例,有约1000类不同的指标同时还有约450类规则定义的聚合衍生指标#QPS (Pgbouncer)# QPS realtime (irate1m)record: pg:db:qps_realtimeexpr: irate(pgbouncer_stat_total_query_co
8、unt1m)record: pg:ins:qps_realtimeexpr: sum without(datname) (pg:db:qps_realtime)record: pg:svc:qps_realtimeexpr: sum by(cls, role) (pg:ins:qps_realtime)record: pg:cls:qps_realtimeexpr: sum by(cls) (pg:ins:qps_realtime)record: pg:all:qps_realtime expr: sum(pg:cls:qps_realtime)# qps (rate1m)record: pg
9、:db:qpsexpr: pgbouncer_stat_avg_query_countdatname!=pgbouncerrecord: pg:ins:qpsexpr: sum without(datname) (pg:db:qps)record: pg:svc:qpsexpr: sum by (cls, role) (pg:ins:qps)record: pg:cls:qpsexpr: sum by(cls) (pg:ins:qps)record: pg:all:qps expr: sum(pg:cls:qps)# qps avg30mrecord: pg:db:qps_avg30mexpr
10、: avg_over_time(pg:db:qps30m)record: pg:ins:qps_avg30mexpr: avg_over_time(pg:ins:qps30m)record: pg:svc:qps_avg30mexpr: avg_over_time(pg:svc:qps30m)record: pg:cls:qps_avg30mexpr: avg_over_time(pg:cls:qps30m)record: pg:all:qps_avg30mexpr: avg_over_time(pg:all:qps30m)# qps record: pg:db:qps_muexpr: avg
11、_over_time(pg:db:qps_avg30m30m)record: pg:ins:qps_muexpr: avg_over_time(pg:ins:qps_avg30m30m)record: pg:svc:qps_muexpr: avg_over_time(pg:svc:qps_avg30m30m)record: pg:cls:qps_muexpr: avg_over_time(pg:cls:qps_avg30m30m)record: pg:all:qps_muexpr: avg_over_time(pg:all:qps_avg30m30m)# qps : stddev30m qps
12、record: pg:db:qps_sigmaexpr: stddev_over_time(pg:db:qps30m)record: pg:ins:qps_sigmaexpr: stddev_over_time(pg:ins:qps30m)record: pg:svc:qps_sigmaexpr: stddev_over_time(pg:svc:qps30m)record: pg:cls:qps_sigmaexpr: stddev_over_time(pg:cls:qps30m)record: pg:all:qps_sigmaexpr: stddev_over_time(pg:all:qps3
13、0m)# query rt (1m avg)record: pg:db:query_rtexpr: pgbouncer_stat_avg_query_timedatname!=pgbouncer / 1000000record: pg:ins:query_rtexpr: sum without(datname) (rate(pgbouncer_stat_total_query_time1m) / sum without(datname) (rate(pgbouncer_stat_total_query_countrecord: pg:svc:query_rtexpr: sum by (cls,
14、 role) (rate(pgbouncer_stat_total_query_time1m) / sum by (cls, role) (rate(pgbouncer_stat_total_query_count1m)# query_rt avg30mrecord: pg:db:query_rt_avg30mexpr: avg_over_time(pg:db:query_rt30m)record: pg:ins:query_rt_avg30mexpr: avg_over_time(pg:ins:query_rt30m)record: pg:svc:query_rt_avg30mexpr: a
15、vg_over_time(pg:svc:query_rt30m)# query_rt record: pg:db:query_rt_muexpr: avg_over_time(pg:db:query_rt_avg30m30m)record: pg:ins:query_rt_muexpr: avg_over_time(pg:ins:query_rt_avg30m30m)record: pg:svc:query_rt_muexpr: avg_over_time(pg:svc:query_rt_avg30m30m)# query_rt : stddev30mrecord: pg:db:query_r
16、t_sigmaexpr: stddev_over_time(pg:db:query_rt30m)record: pg:ins:query_rt_sigmaexpr: stddev_over_time(pg:ins:query_rt30m)record: pg:svc:query_rt_sigmaexpr: stddev_over_time(pg:svc:query_rt30m)以QPS类指标为例 不同层次的聚合、 统计量、衍生指标规则就有37条概览 - 报警以及直观的呈现方式Pigsty基于AlertManger进行报警 Pigsty提供了久经考验的预制报警规则集#=#Error / Aliv
17、eness# #=# cluster size change triggers a P0 alert (warn: auto heal in 5min)- alert: PG_CLUSTER_SHRINKexpr: delta(pg:cls:size5m) 0 for: 15slabels:severity: P1 annotations:summary: delta(pg:cls:sizeins= $labels.ins 5m) = $value | printf %.0f 0 description: |/d/pg-cluster/pg-cluster?var-cls= $labels.c
18、ls &fullscreen&panelId=186&from=now-10m&to=now# postgres down for 15s triggers a P0 alert- alert: PG_DOWN expr: pg_up = 0 labels:severity: P0 annotations:summary: P0 PG_DOWN: $labels.ins $value description: |pg_upins= $labels.ins = $value = 0http:/grafana.pigsty/d/pg-instance/pg-instance?var-ins=$la
19、bels.ins&from=now-5m&to=now# pgbouncer down for 15s triggers a P0 alert- alert: PGBOUNCER_DOWNexpr: pgbouncer_up = 0 labels:severity: P0 annotations:summary: P0 Pgbouncer Down: $labels.ins $value description: |pgbouncer_upins= $labels.ins = $value = 0http:/grafana.pigsty/d/pg-instance/pg-instance?va
20、r-ins=$labels.ins&from=now-5m&to=now# pg/pgbouncer exporter down for 1m triggers a P1 alert- alert: PG_EXPORTER_DOWNexpr: upinstance=.*:(9630|9631)$ = 0 for: 1mlabels:severity: P1 annotations:summary: P1 PG/PGB Exporter Down: $labels.ins $labels.instance $value description: |upinstance= $labels.inst
21、ance = $value = 0http:/grafana.pigsty/d/pg-instance/pg-instance?var-ins= $labels.ins &fullscreen&panelId=262&from=now-5m&to=now概览 - 服务发现Pigsty基于DCS实现服务发现 (consul / etcd)服务发现维护了实例等身份信息,包括集群,实例标识,角色等 并集成了健康检查,服务发现,DNS解析,配置管理等功能很多监控方案只关注少数几个关键指标,这对于故障预警是充分的,但无法进 一步提供对系统的洞察力。全知即全能,Pigsty专注于提高指标覆盖率,几乎收纳了
22、PostgreSQL中一切有 价值的相关信息。包括:Metrics : 时间序列类指标,最主要的监控数据Catalog: 数据库系统目录,变动不频繁,但包含数据对象的重要信息。Log:数据库日志,与日志衍生指标指标覆盖3指标覆盖: Metrics指标前缀数量数据库pg_229连接池pgbouncer_48PG衍生pg:344节点node_281节点衍生node:83负载均衡haproxy170总计1155PostgreSQL本身的监控指标 PostgreSQL日志中的统计指标 PostgreSQL系统目录信息 Pgbouncer连接池中间价的指标 PgExporter指标数据库工作节点Node
23、的指标 负载均衡器Haproxy指标Blackbox探活指标 DCS(Consul)工作指标 监控系统自身工作指标按类型划分指标数量指标类型数量,并不是时间序列的数量如右图所示,同一个指标指标 pg_table_idx_scan一个实例上有多少张表,就有多少个时间序列一个实例有约1000+类指标,但可能拥有5k到上万个时间序列。指标覆盖: CatalogCatalog 是数据库本身的 系统目录,收录了关于对象的重要信息。Pigsty可以直接,或通过FDW代理访问目标数据库的系统目录。探索挖掘数据目录十分便捷,用户可以直接从页面上即时获取感兴趣的表、 索引、函数、以及其他数据库对象的信息。这一机
24、能可用于构建大规模数据库集群的全局数据字典。(Or next generation of PgAdmin)指标覆盖: Log整合pgbadger,自动生成每天的日志汇总摘要,迅速定位慢查询与异常。基于mtail的日志指标生成,每分钟日志数,错误数,事件等 基于file_fdw的日志解析与归档工具,自动将csvlog入库 使用PG SQL分析PG日志从日志中提取DDL变更事件从日志中提取维护任务详情指标收集:Exporter/Vonng/pg_exporter完全自研的 pg_exporter, 用于收集postgres与pgbouncer的指标:支持PostgreSQL 9.4 13版本,Pg
25、bouncer 1.8+版本几乎所有指标都通过配置文件以SQL的形式获取,完全定制化,提供热重载功能 指标收集器可以根据类似Kubernetes的方式调度执行(例如只在从库上执行,只在带有tag启动标签的节点执行,只在安装特定扩展的实例上执行等)带有灵活的指标缓存策略,自动超时取消,最小化监控系统对数据库的性能影响。 提供健康检查,就绪探针,主从角色检查等功能,可用于流量分发$ curl -sSL xxxxxxxxxx:9630/metrics | grep -v # | grep pg | tail -n15 pg_table_vacuum_countdatname=data,nspname
26、=public,relname=covid_country_data 0pg_table_vacuum_countdatname=data,nspname=public,relname=monetary 0pg_table_vacuum_countdatname=data,nspname=public,relname=spatial_ref_sys 0pg_table_vacuum_countdatname=data,nspname=public,relname=tour_exif 0pg_table_vacuum_countdatname=data,nspname=public,relnam
27、e=weights 0 pg_timestamp 1.605020161918609e+09pg_up 1pg_uptime 266913.514888pg_version 130000pg_wait_countdatname=data,event=Client 2pg_wait_countdatname=isd,event=Client 1 pg_write_lsn 7.0106515912e+10pg_xact_xmax 1022pg_xact_xmin 1022pg_xact_xnum 0指标来源: 系统视图Postgres提供了非常丰富的监控信息,下面仅仅列出涉及到的一部分系统视图。数
28、据库的指标都是,通过SQL的形式定义与收集的,因此可以轻松进行定制。 不同版本的数据库会有相应的收集器,实现多版本兼容。右图是一个指标收集器的配置定义,用于获取PG9.4 - PG12中的查询指标很多监控方案都有这个问题:只关注单个实例的监控,不见全局; 同时针对数据库内部的活动细节也缺少洞察力,难以让人满意。Pigsty旨在解决这一问题,无论是指标还是界面,都提供了多个层次上的聚合:全局、分片、集群、服务、实例、数据库、连接池、对象、查询各个层次之间可以方便地跳转,下钻,上卷。既可鸟瞰全景,又能洞察入微。掌控全局3集群监控:多层次组织Pigsty 基于以下数据模型进行组织集群(Cluster
29、)是基本的业务自治单元,能够作为一个整体组织对外提供服务,集群标识作为顶层命名空间。集群在硬件层面上包含节点(Node),即物理机或虚机或Pod,可以通过IP唯一标识。 集群在软件层面上包含实例(Instance),即软件服务器,可以通过IP:Port唯一标识。集群在服务层面上包含服务(Service),即可访问的域名与端点,可以通过域名唯一标识。一个数据库实例(Instance)包含多个数据库(Database),同一集群不同实例上的相同数据库内容相同。数据库(Database)中存在查询(Query)数据库(Database)中存在表(Table),及索引,函数等各类对象 数据库(Data
30、base)对应一个或多个连接池(Pool)当多个集群以水平拆分的形式服务于同一个目的时,称这一组集群为分片(Shard)所有的集群状态汇总摘要构成系统的总览(Overview)将分片这一程次层次并入总览,将数据库以下层次并入数据库层次,最终监控的层级定为五层。集群监控:命名模式概念及其命名是非常重要的东西,命名风格体现了工程师对系统架构的认知。定义不清的概念将导致沟通困惑,随意设定的名称将产生意想不到的额外负担。集群(Cluster)是基本自治单元,由用户指定唯一标识,表达业务含义,作为顶层命名空间。集群在硬件层面上包含一系列的节点(Node),即物理机,虚机(或Pod),可以通过IP唯一标识
31、。 集群在软件层面上包含一系列的实例(Instance),即软件服务器,可以通过IP:Port唯一标识。集群在服务层面上包含一系列的服务(Service),即可访问的域名与端点,可以通过域名唯一标识。Cluster命名可以使用任意满足DNS域名规范的名称,但不能带点(a-zA-Z0-9-+)。Node/Pod命名采用Cluster名称前缀,后接-连接一个从0开始分配的序号,(与k8s保持一致)实例命名通常与Node保持一致,即$cluster-$seq的方式,这种方式隐含着节点与实例1:1部署的假设。Service命名采用Cluster名称前缀,后接-连接服务具体内容,如primary, st
32、andby集群监控:身份管理当我们为系统中的实体对象进行命名标址后,如何将这些标识符关联到监控数据上呢?以Metrics为例,Metrics从 pg_exporter 收集而来,但如果没有其他的外部元数据,监控系统是无从得知这一监控目标到底是属于哪个集群,扮演什么角色,集群内的标号是多少。 监控系统需要将标识符 Attach 到 监控对象上,这通常是通过服务发现 来实现的,例如Consul。当然,使用手工维护的监控对象配置文件也是一种选择。服务注册的模板服务注册的样例服务发现的结果集群监控:聚合指标 Pigsty是针对大规模集群的多层次全方位监控,关键指标会在56个不同的层级上进行聚合例如下面
33、的 活跃Server数指标,就包括六个层次:连接池,数据库,实例,服务,集群,全局# active serversrecord: pg:pool:active_serversexpr: pgbouncer_pool_active_serversdatname!=pgbouncerrecord: pg:db:active_serversexpr: sum without(user) (pg:pool:active_servers)record: pg:ins:active_serversexpr: sum without(user, datname) (pg:pool:active_server
34、s)record: pg:svc:active_serversexpr: sum by (cls, role) (pg:ins:active_servers)record: pg:cls:active_serversexpr: sum by (cls) (pg:ins:active_servers)record: pg:all:active_servers expr: sum(pg:cls:active_servers)部分聚合指标如右图所示集群监控:性能与开销 丰富的监控指标当然也会对数据库产生额外的开销,但对于生产环境几乎可以忽略不计。例如下面这个高负载状态下的数据库(约几十张表,共2TB
35、,2万QPS),一次完整抓取也不过20ms对于极端场景(几十万张表与几万种查询),一次抓取最多可能耗费秒级的时长。好在所有指标收集器都是可选关闭的,且pg_exporter 允许为收集器配置主动超时取消(默认100ms)单Prometheus节点可以支持几百个实例的监控,约几百万个时间序列(Dell R740 64 Core / 400GB Mem/ 3TB PCI-E SSD)更大规模的集群可以通过Prometheus级联、联邦或分片实现伸缩。例如为每一个数据库集群部署一个Prometheus,并使用上级Prometheus统筹抓取并计算衍生指标如果您有多个Prometheus同时抓取目标对
36、象,可以使用 pg_exporter 内置的缓存功能,通过配置TTL您可以最小化重复抓取对数据库的性能影响,更可以通过灵活的TTL配置避免频繁执行开销较大的指标查询(例如表膨胀率估算)几千张表的一个库,Exporter查询耗时。尖刺是因为某些查询的缓存过期进行了实际查询Prometheus的抓取频率建议采用1015秒,并配置适当的超时。 演示或特殊情况也可以配置的更精细(例如2秒,5秒等)集群监控 - 应用:水位与健康度Pigsty指标不仅仅可以用于监控报警,还可以用于:资源水位评估评估集群的资源利用率,消耗总量(如流量,IOPS等),水位等,提供扩缩容的数据支撑 亦可用于计量计费集群健康评估
37、根据一系列规则(慢查询,扫表,大表,无用索引)给出集群的整体健康度评价Pigsty亦旨在提高监控系统的易用性,降低PostgreSQL数据库的使用管理门槛。Pigsty带有一套Provision方案,能够直接通过“修改配置,一键拉起”的方式在几分钟内 构建出一套完整的环境:包括高可用数据库集群,以及配套基础设施,与监控系统。无论是本地笔记本上的虚拟机沙箱,还是远程虚拟机,或者是生产物理服务器。都可以 使用同样的机制拉起整套Pigsty环境。提供近乎Kubernetes的丝滑感受。Pigsty提供了一个基于Vagrant与Virtualbox的沙箱环境,用户可以在本地轻松复刻一个完整的演示案例。亦可访问公开的Demo直接尝鲜(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 睡眠改善计划及睡眠质量提升方案
- 新闻内容信审核查案例分析
- 二级建造师矿业工程个人简历优化与求职技巧
- 度电商部门整体运营计划与目标分解
- 社区文化建设与业主活动策划计划书
- 项目助理项目前期准备与协调工作安排
- 创新创业大赛参赛策略与准备
- 好用手册初级康复辅助技术咨询师的工作安排
- 做好水土保持监测数据的分析总结
- 高级粮食检验员参与标准制修订工作的流程与要求
- 实验小学教育数字化转型十五五规划
- 脑卒中康复治疗教案
- JG/T 388-2012风机过滤器机组
- 口腔科消毒管理制度
- 2025年1月浙江省普通高校招生选考科目高考英语真题试卷(浙江卷 含答案)
- 动物疫苗采购管理制度
- T/CECS 10220-2022便携式丁烷气灶及气瓶
- 2025徐州生物工程职业技术学院辅导员考试试题及答案
- 采购交期管理指导手册
- 路面混凝土切割合同协议
- 委托矿山开采合同协议
评论
0/150
提交评论