关于postgresql:PostgreSQL-导入-SLS从业务到监控数据

107次阅读

共计 5903 个字符,预计需要花费 15 分钟才能阅读完成。

日志服务 SLS 数据导入简介

日志服务 SLS 是云原生观测和剖析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。日志服务是提供一站式数据采集、加工、查问与剖析、可视化、告警、生产与投递等性能。全面晋升在研发、运维、经营、平安等场景的数字化能力。SLS 在数据导入方面提供了丰盛的数据源,如 OSS 导入、MaxCompute、MySQL、SQL Server 等数据源。

PostgreSQL 是一款收费的对象 - 关系数据服务器,在互联网和物联网畛域都有宽泛的利用场景,PostgreSQL 也自称是最弱小的开源关系型数据库系统,SLS 也在近期上线了 PostgreSQL 数据源导入性能。本文将介绍如何把 PostgreSQL 的数据导入 SLS,并且从可观测性的角度来介绍下非业务类数据导入的场景。

PostgreSQL 业务数据导入

这里以电商零碎的订单表为例,如下是订单表 orders 的构造,存储了用户 ID、价格、优惠券之类的字段,接下来能够通过简略的配置将订单数据导入到 SLS。

CREATE TABLE IF NOT EXISTS orders (
  id serial primary key,
  user_id BIGINT NOT NULL,
  sku_id BIGINT,
  sku_category VARCHAR(100),
  sku_count INT,
  sku_price INT,
  total_price INT,
  supplier_type VARCHAR(100),
  pay_id VARCHAR(50),
  pay_channel VARCHAR(20),
  pay_amount INT,
  coupon_id INT DEFAULT 0,
  buy_channel VARCHAR(50) DEFAULT '',
  state INT NOT NULL,
  client_ip VARCHAR(15) DEFAULT '',
  create_time timestamp(6) DEFAULT current_timestamp,
  update_time timestamp(6) DEFAULT current_timestamp 
);

数据导入

依据曾经创立好的 Project、Logstore,开展 Logstore 的配置,抉择数据导入,抉择 + 按钮

PostgreSQL 数据导入

在疾速数据导入页面,抉择 PostgreSQL – 数据导入;

数据源配置

在数据源设置页面,填写配置名称、数据库连贯地址等,如果应用 VPC 地址,须要勾选 VPC 地址,输出数据库所在的 VPC 实例 ID。

下述示例中查问语句应用了 SELECT * FROM orders WHERE id > $1 ORDER BY id,其中 $1 示意占位符,用来做 CheckPoint 应用。

高级配置

高级配置中,抉择 CheckPoint 字段为 id,CheckPoint 字段初始值为 0,在初始执行 SQL 的过程中,第一次会将查问语句中的 $1 换成 0,即:SELECT * FROM orders WHERE id > 0 ORDER BY id。

每次导入最大行数为 0,示意不限度拉取行数,在第一次执行后会将最初一条数据的 id 替换掉 $1,这样就能够做到下次执行时和上次的数据不反复,两次执行的工夫距离即导入距离。

导入距离配置

导入距离,能够抉择特定的工夫距离或者自定义工夫距离。

导入实现

在日志服务的 Logstore 查问控制台,能够看到导入后的数据,依据数据库字段配置索引,对数据进行查问剖析,做剖析订单趋势、订单分类、下单客户区域散布等剖析,在 SLS 控制台能够创立仪表盘,对于剖析高深莫测,同时对于异样数据还能够反对告警等配置。

配置索引

查问数据

仪表盘展现

对于仪表盘的配置和查问剖析,在上一篇文章《MySQL 到 SLS:一站式查问剖析可视化场景介绍》有过比拟具体的介绍,这里不再赘述。能够看下仪表盘的示例。

除了业务数据,还能够导哪些数据?

除了业务数据存储在 PostgreSQL 外,咱们往往也须要关注 PostgreSQL 服务器自身的运行状态,对服务自身的监控,Prometheus 社区也提供了 postgres_exporter,其原理也是通过拉取 PostgreSQL 的零碎表或者视图来进行数据的观测,其次要关注在指标层面,PostgreSQL 还有一些元数据表,对于数据治理也是不可短少的局部,接下来来看下哪些指标或者元数据能够导入到 SLS 来进行剖析。

PostgreSQL 可观测性

和 MySQL 相似,PostgreSQL 也蕴含各类零碎表,零碎表中记录这数据库的一些数据库元信息和诊断信息,通过这些表或视图能够监控零碎的状态,查问执行打算的状态和服务器治理状态,从某种程度上来说,这些表的信息能够反映 PostgreSQL 的可观测性。

在 PostgreSQL 的 Monitoring Database Activity,对如何监控 PostgreSQL 进行了介绍,次要包含:

  • 规范的 Unix 工具
  • 统计数据收集器
  • 查看锁
  • 进度报告
  • 动静追踪

其中统计数据收集器是收集和报告服务行为的子系统,能够对表和索引的拜访次数进行计数,也能够追踪每张表的行数,和表的垃圾回收信息,统计用户自定义函数的调用次数和调用工夫。同样反对 PostgreSQL 上正在执行的动静信息,包含服务器中正在执行的确切命令等。

开启统计数据采集,能够有 postgresql.conf 中的四个参数来管制:

  • track_activities:用来跟踪每个会话执行的命令和开始执行的工夫。
  • track_counts:统计表和索引的拜访次数。
  • track_functions:统计自定义函数调用。
  • track_io_timing:统计块 IO 的读写次数。

除了以上的参数外,还有其余的参数能够用来开启统计监控。

统计视图 (Statistics Views)

PostgreSQL 内置了一些统计视图可供间接应用,次要包含两局部:

  1. 动静统计视图 (Dynamic Statistics Views)
  • pg_stat_activity
  • pg_stat_replication
  • pg_stat_wal_receiver
  • pg_stat_subscription
  • pg_stat_ssl….
  1. 已收集统计信息视图 (Collected Statistics Views)
  • pg_stat_archiver
  • pg_stat_bgwriter
  • pg_stat_wal
  • pg_stat_database
  • pg_stat_database_conflicts
  • pg_stat_all_tables….

这些统计视图对于数据库的运行状态诊断有很重要的作用,比方慢 SQL 查问诊断,沉闷的客户端查看,举个例子,咱们通过 SQL 语句来查问执行工夫长的语句:

select
       current_timestamp - query_start as runtime,
       datname,
       usename,
       query
    from pg_stat_activity
    where query <> '' 
    order by runtime desc

后果如下,能够看到某些执行工夫较长的语句。

runtime        | datname  |  usename   |                                            query                                            
----------------------+----------+------------+---------------------------------------------------------------------------------------------
 1 day 13:27:48.46965 |          | replicator | START_REPLICATION 0/3000000 TIMELINE 1
 00:00:56.034221      | postgres | aurora     | select slot_name client, pg_walfile_name(restart_lsn) wal, active from pg_replication_slots
(2 rows)

通过将这些后果导入到日志服务,能够进行剖析统计、仪表盘配置和告警。

零碎表

Postgresql 零碎表扮演着数据字典的角色,保留了数据库的元数据,蕴含所有对象和属性的形容信息,对象之间的关系信息。罕用的零碎表包含:

  • pg_namespace:存储命名空间,属性包含 nspname、nspowner、nspacl 等。
  • pg_tablespace:存储表空间信息,属性包含 spcname、spcowner、spclocation、spcacl 等。
  • pg_database:存储数据库信息,属性包含 datname、datdba、encoding、datcollate 等。
  • pg_class:存储数据库对象信息,包含索引、序列、视图等。
  • pg_type:存储数据类型信息。
  • pg_index:存储索引的具体信息。

以上数据系统表记录的数据库元信息,对于数据治理中有很重要的作用,将这些数据导出到数据分析平台就能够进行剖析和继续的观测,比方须要观测数据字段的变更,举个例子:

SELECT relname,attname,typname,attnum FROM pg_class c,pg_attribute a,pg_type t 
WHERE c.relname = 'orders' AND c.oid = attrelid AND atttypid = t.oid AND attnum > 0;

咱们能够通过 pg_class、pg_attribute、pg_type 三个表的连贯,获取数据库表的字段信息,这里示例中以 orders 表为例,能够失去后果如下:

relname |    attname    |  typname  | attnum 
---------+---------------+-----------+--------
 orders  | id            | int4      |      1
 orders  | user_id       | int8      |      2
 orders  | sku_id        | int8      |      3
 orders  | sku_category  | varchar   |      4
 orders  | sku_count     | int4      |      5
 orders  | sku_price     | int4      |      6
 orders  | total_price   | int4      |      7
 orders  | supplier_type | varchar   |      8
 orders  | pay_id        | varchar   |      9
 orders  | pay_channel   | varchar   |     10
 orders  | pay_amount    | int4      |     11
 orders  | coupon_id     | int4      |     12
 orders  | buy_channel   | varchar   |     13
 orders  | state         | int4      |     14
 orders  | client_ip     | varchar   |     15
 orders  | create_time   | timestamp |     16
 orders  | update_time   | timestamp |     17
(17 rows)

通过将这个查问的数据导入到 SLS,并设置定时每 5 分钟导入一次,这样就能够看到整个工夫线上表构造的变更,比方字段是否减少或缩小

导入 SLS 后果查看

通过将数据导入 SLS 能够对元数据进行统计分析,依照工夫定时导入,能够剖析元数据随工夫的变化趋势。对于数据库审计和数据治理都有很多场景。

扩大(EXTENSION)

PostgreSQL 还有一个重要个性,反对扩大插件,通过扩大插件也能够进行一些数据的收集和统计。例如比拟有名的插件 pg_stat_statements,通过这个插件,能够统计数据库的资源开销和剖析 TOP SQL,阿里云 RDS 也提供了相似的案例。

首先创立 pg_stat_statements 插件:CREATE EXTENSION pg_stat_statements; 通过 pt_stat_statements 视图,能够查询数据库资源开销的统计信息,次要包含信息如下:

  • SQL 的调用次数,总耗时,最快执行工夫,最慢执行工夫,均匀执行工夫,执行工夫的方差(看出抖动),总共扫描、返回或解决了多少行。
  • shared buffer 的应用状况:命中、未命中、产生脏块、驱赶脏块。
  • local buffer 的应用状况:命中、未命中、产生脏块、驱赶脏块。
  • temp buffer 的应用状况:读了多少脏块、驱赶脏块。
  • 数据块的读写工夫。

例如查问耗 IO 的 Top 5 的 SQL:

SELECT userid::regrole, dbid, query FROM pg_stat_statements ORDER BY (blk_read_time+blk_write_time)/calls DESC LIMIT 5;

最耗时的 TOP 5 SQL

SELECT userid::regrole, dbid, query FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 5;

相似的还有查问响应工夫抖动、共享内存耗费、长期空间耗费等指标的 SQL,通过 pg_stat_statements 将指标信息导出,就能够对数据进行剖析。

总结

本文首先介绍了 PostgreSQL 的数据导入性能,以电商零碎中的订单表为例介绍了如何将 PostgreSQL 的数据导入 SLS,同时介绍了如何应用 SLS 进行查问剖析和仪表盘展现等。第二局部次要介绍了 PostgreSQL 的可观测性数据的导入场景,次要通过 PostgreSQL 的统计视图、零碎表和扩大进行数据的导入来实现。

SLS 的 PostgreSQL 导入作为一个工具,对于导入的数据场景没有偏见,业务数据和性能数据都能够导入,在应用的过程中能够挖掘出更多的场景。

参考

  • 日志服务(SLS):https://www.aliyun.com/product/sls
  • 日志服务数据导入:https://help.aliyun.com/document_detail/147819.html
  • 导入 PostgreSQL 数据:https://help.aliyun.com/document_detail/437710.html
  • Monitoring Database Activity:https://www.postgresql.org/docs/current/monitoring.html
  • postgres_exporter:https://github.com/prometheus-community/postgres_exporter
  • MySQL 到 SLS:一站式查问剖析可视化场景介绍:https://developer.aliyun.com/article/883962
  • 查找最消耗资源的 SQL(Top SQL):https://help.aliyun.com/document_detail/52953.html

原文链接

本文为阿里云原创内容,未经容许不得转载。

正文完
 0