Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >prometheus使用postgresql-adapter连接postgresql

prometheus使用postgresql-adapter连接postgresql

作者头像
charlieroro
发布于 2020-03-23 08:40:22
发布于 2020-03-23 08:40:22
2.4K00
代码可运行
举报
文章被收录于专栏:charlierorocharlieroro
运行总次数:0
代码可运行

概述

Prometheus使用postgresql需要使用postgresql-adapter进行数据转换。在安装postgresql-adapter之前需要安装2个扩展:pg_prometheustimescaledb

官方推荐使用PostgreSQL, pg_prometheus,和TimescaleDB打包在一起的容器,但对于使用已有的postgresql来说并不合适,故需要手动编译安装。


环境准备

使用os为:redhat 7.4

假设已经安装好postgresql,本次使用的postgresql版本为11.1,安装路径为:/usr/pgsql-11/bin/。安装过程中如果遇到psql: command not foundNo package pg_config available时执行如下命令即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# export PATH=$PATH:/usr/pgsql-11/bin/
安装cmake

编译pg_prometheustimescaledb都会使用到cmake。

官网下载cmake二进制版本,使用版本为3.15.1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tar -zxvf cmake-3.15.1-Linux-x86_64.tar.gz
# mv cmake-3.15.1-Linux-x86_64 cmake-3.15.1
# mv cmake-3.15.1 /user/local/bin
# export PATH=$PATH:/usr/local/bin/cmake-3.15.1/bin/
安装clang

编译pg_prometheus会使用到clang,且对clang版本有要求。clang的安装可参照CentOS 7 编译安装clang+llvm

下载clang源码,本次使用的clang版本为7.1.0,下载cfe-7.1.0.src.tar.xzclang-tools-extra-7.1.0.src.tar.xzcompiler-rt-7.1.0.src.tar.xzllvm-7.1.0.src.tar.xz并解压。安装路径为:/usr/local/clang。执行如下步骤编译clang,时长大约1小时。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# export PATH=$PATH:/usr/local/bin/cmake-3.15.1/bin/  #已经安装好的cmake
# mv cfe-7.1.0.src clang
# mv clang/ llvm-7.1.0.src/tools/

# mv clang-tools-extra-7.1.0.src extra
# mv extra/ llvm-7.1.0.src/tools/clang/

# mv compiler-rt-7.1.0.src compiler-rt
# mv compiler-rt-7.1.0.src/projects/

# mkdir build-7.1.0
# cd build-7.1.0
# cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On ../llvm-7.1.0.src  
# make -j 4
# make install 
安装postgresql devel

从官网下载并安装postgresql11-devel-11.2-2PGDG.rhel7.x86_64.rpm即可,该rpm包含postgresql的libraries和头文件,编译pg_prometheus时会用到。


安装pg_prometheus

安装好clang和postgresql devel之后就可以编译pg_prometheus了。

官方下载pg_prometheus源码,执行如下命令即可编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# make
# make install # Might require super user permissions

在make时可能会遇到如下问题:

问题1:

fatal error: 'stddef.h' file not found

原因:缺少头文件,该头文件是clang定义的,可能是因为clang安装路径的原因,将头文件拷贝过去即可

解决:cp /usr/local/clang/lib/clang/7.1.0/include/* /usr/include/ ---注意不要覆盖原有的头文件

问题2:

/usr/lib64/llvm5.0/bin/llvm-lto: No such file or directory

原因:找不到llvm-lto的可执行文件,同样拷贝即可

解决:执行如下命令拷贝

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /usr/lib64/llvm5.0
cp /usr/local/clang/bin/* /usr/lib64/llvm5.0/bin/
创建pg_prometheus扩展
  • 在postgresql的postgresql.conf中添加:shared_preload_libraries = 'pg_prometheus',重启psql
  • 使用psql创建扩展:CREATE EXTENSION pg_prometheus;
  • 创建role: CREATE ROLE admin WITH LOGIN PASSWORD 'admin';
  • 授权role admin:GRANT ALL ON SCHEMA prometheus TO admin;
  • 创建table:SELECT create_prometheus_table('metrics');

重启psql加载pg_prometheus.so动态库时可能会遇到如下问题

问题1:

could not load library "/usr/pgsql-11/lib/pg_prometheus.so": /usr/pgsql-11/lib/pg_prometheus.so: undefined symbol: Float8GetDatum

原因:动态库缺少外部符号

解决:Float8GetDatum定义在postgresql源码的src/backend/utils/fmgr/fmgr.c中,内容如下,将其拷贝到pg_prometheus的src/prom.c中,重新编译pg_prometheus.so即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Datum
Float8GetDatum(float8 X)
{
    float8     *retval = (float8 *) palloc(sizeof(float8));

    *retval = X;
    return PointerGetDatum(retval);
}
#endif
问题2:

lock file "postmaster.pid" already exists

原因:存在pid文件

解决:在postgres的数据库目录中删除postmaster.pid即可


安装timescaledb

下载timescaledb源码,解压后执行如下命令即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cd build && make
# make install
创建timescaledb扩展
  • pgsql的postgresql.conf添加:shared_preload_libraries = 'pg_prometheus,timescaledb'
  • 创建扩展:CREATE EXTENSION timescaledb;

启动postgresql-adapter

使用容器启动

dockerhub下载镜像

由于使用容器连接postgresql,故pgsql的pg_hba.conf中添加如下内容,172.17.0.2/16为容器的IP段,重启psql

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host    all             admin           172.17.0.2/16           md5

启动命令如下,需要注意的是,由于在容器内部运行,-pg.host必须指定postgresql主机的地址,而非loopback接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker run --name prometheus_postgresql_adapter -d -p 9201:9201 prometheus-postgresql-adapter:0.4 -pg.user=admin -pg.host=${psqlIP} -pg.port=5432 -pg.password=admin -pg.database=postgres -pg.prometheus-log-samples
使用可执行文件启动

下载官方源码,解压后执行如下命令编译即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# go mod download
# make

此时使用本地地址连接postgresql,故pgsql的pg_hba.conf中添加如下内容,重启psql:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host    all             admin           127.0.0.1/32           md5

启动命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ./prometheus-postgresql-adapter -pg.user=admin -pg.password=admin -pg.database=postgres -pg.prometheus-log-samples
配置Prometheus

Prometheus配置文件加入如下命令即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
remote_write:
  - url: "http://<adapter-address>:9201/write"
remote_read:
  - url: "http://<adapter-address>:9201/read"
timescaledb的使用

timescaledb具体使用可以参见官网API,下面给出常用的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM timescaledb_information.hypertable;    //查看hypertable的信息

SELECT * FROM timescaledb_information.hypertable WHERE table_schema='public' AND table_name='metrics_values';    //查看schema中特定表的信息
SELECT * FROM hypertable_relation_size_pretty('metrics_values');    //查看表大小
SELECT * FROM indexes_relation_size_pretty('metrics_values');    //查看表中的index大小

SELECT * FROM chunk_relation_size_pretty('metrics_values');    //查看chunk大小
SELECT drop_chunks(interval '3 months');    //手动丢弃超过3个月以上的chunk

SELECT add_drop_chunks_policy('metrics_values', INTERVAL '6 months');    //定制drop_chunks策略,自动清除超过6个月的chunk
SELECT remove_drop_chunks_policy('metrics_values');    //删除drop_chunks策略
SELECT * FROM timescaledb_information.drop_chunks_policies;    //查看drop_chunks丢弃策略

SELECT * FROM timescaledb_information.policy_stats;    //查看策略的详细信息

PS:直接源码编译的timescaledb的license为社区版,无法使用add_drop_chunks_policy等功能

TIPS:

问题:

环境拓扑为2个Prometheus做高可用同时向一个postgresql进行write/read。

在对Prometheus+postgresql-adapter进行重启等操作后,发现postgresql-adapter会与Prometheus端创建大量tcp连接(含大量close_wait和establish状态的连接),由于会持续创建tcp连接,导致系统内存不足触发OOM

解决:

停止Prometheus并重新创建Prometheus容器即可。

在对postgresql-adapter重启后,最好重启Prometheus端

总结

使用postgresql-adapter难点就是要编译出2个动态库文件pg_prometheus.sotimescaledb.so

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Prometheus远端数据存储方案之PostgreSQL
今天看到德哥分享的基于postgresql的prometheus数据远端存储方案,于是有了本文的实验。
保持热爱奔赴山海
2019/10/30
2.2K0
oracle打补丁opatch_centos安装oracle11g方法
timescaledb的多节点模式已经推出很长时间,国内一直没有发布相关的教程,timescaledb官网上关于安装部署说的也不是很清楚,故此自己做了一版教程,也走了几个坑,有问题也可以问。
全栈程序员站长
2022/11/10
1.1K0
oracle打补丁opatch_centos安装oracle11g方法
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
这是个bug,版本升级后,pg_config改变了,会导致后面装外部extension时没有装到指定目录。
民工哥
2023/08/22
1.8K0
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
Promscale-Prometheus的分析平台和长期存储测试
promscale 是一个开源的可观察性后端,用于由 SQL 提供支持的指标和跟踪。
公众号: 云原生生态圈
2022/04/08
2K0
Promscale-Prometheus的分析平台和长期存储测试
使用yum来安装PostgreSQL数据库(从PG9.4到PG16各个版本通用)
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2023/09/19
4.5K0
使用yum来安装PostgreSQL数据库(从PG9.4到PG16各个版本通用)
Zabbix4.2新功能实践1-时间序列数据库TimescaleDB
4月2号万众期待的Zabbix4.2终于发布了!新版本提供了很多特性,接下来几期主要介绍Zabbix4.2的一些新特性的使用。本次主要介绍TimescaleDB。
Zabbix
2021/02/03
1K0
CentOS7 部署 PostgreSQL
陳斯托洛夫斯記
2024/08/07
1560
CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践
注意这里yum方式安装里会默认安装timescaledb-2-loader-postgresql-12-2.4.0-0.el7.x86_64这个包
yuanfan2012
2021/09/02
1.9K0
Zabbix 6.0 TimescaleDB 安装配置
Zabbix 6.0目前已发布beta1版本,包含众多新功能和新特性,本文主要介绍Zabbix 6.0 配置TimescaleDB,此安装配置方法可基本通用与其他版本。
Zabbix
2022/02/10
1.7K0
Zabbix 6.0 TimescaleDB 安装配置
从Oracle到PostgreSQL:最全控制文件
墨墨导读:本文介绍了Oracle和PostgreSQL控制文件基本内容,对如何重建PostgreSQL控制文件进行了详细描述并进行了恢复测试。
数据和云
2019/07/22
3K0
从Oracle到PostgreSQL:最全控制文件
PostgreSQL 12源码包部署及用户管理
时间序列数据库(Time Series Database)是用于存储和管理时间序列数据的专业化数据库,具备写多读少、冷热分明、高并发写入、无事务要求、海量数据持续写入等特点,可以基于时间区间聚合分析和高效检索,广泛应用在物联网、经济金融、环境监控、工业制造、农业生产、硬件和软件系统监控等场景。
没有故事的陈师傅
2022/02/09
9640
PostgreSQL 16数据库的各种安装方式汇总(yum、编译、docker等)
详细使用请参考:https://www.xmmup.com/dbbao69zaidockerzhongkuaisushiyonggegebanbendepostgresqlshujuku.html
AiDBA宝典
2023/09/19
7.4K0
PostgreSQL 16数据库的各种安装方式汇总(yum、编译、docker等)
CentOS7 PostgreSQL安装
在 CentOS7 上安装 PostgreSQL 最近需要在物理机上安装数据库,粗略记录一下,感谢同事的协助。 一、创建 postgres 用户 useradd postgres 修改密码 passwd postgres 二、rpm安装 # rpm文件的下载地址:https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/ # 下载以下几个rpm包并安装 rpm -ivh libicu-50.2-4.el7_7.x86_
Li_XiaoJin
2022/11/23
8390
ZABBIX 4.4.0 + TimescaleDB
2019.10 ZABBIX 4.4.0 正式发布,发布全新的基于Go语言编写全新agent2和众多新功能特性,接下来介绍最重要的新功能,TimescaleDB数据库,ZABBIX除了支持MySQL、PostgreSQL、Oracle和DB2之外,ZABBIX 官方正式宣布支持TimescaleDB。与传统的关系数据库相比,TimescaleDB有诸多优点:近乎线性的性能水平,支持自动即时删除旧的历史数据,更容易维护等等
没有故事的陈师傅
2019/12/11
2.9K2
【DB宝67】使用yum来安装PostgreSQL13.3数据库
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2021/08/25
1K0
【DB宝68】使用源码编译来安装PostgreSQL13.3数据库
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2021/08/25
9470
Prometheus监控学习笔记之prometheus的远端存储
prometheus在容器云的领域实力毋庸置疑,越来越多的云原生组件直接提供prometheus的metrics接口,无需额外的exporter。所以采用prometheus作为整个集群的监控方案是合适的。但是metrics的存储这块,prometheus提供了本地存储,即tsdb时序数据库。本地存储的优势就是运维简单,启动prometheus只需一个命令,下面两个启动参数指定了数据路径和保存时间。
Jetpropelledsnake21
2019/03/08
5.2K0
Prometheus监控学习笔记之prometheus的远端存储
zabbix5—agent2监控PostgreSQL
zabbix5.0—agent2监控PostgreSQL-11.4(linux)PostgreSQL版本需要10以上
QGS
2023/11/29
1K0
数据库PostrageSQL-从源代码安装
本章的内容描述从源代码发布安装PostgreSQL(如果你安装的是打包好的版本如RPM或Debian包,那么请略过这一章并且阅读打包者的指导)。
cwl_java
2020/09/02
4.4K0
[翻译]PostgreSQL中的WAL压缩以及版本15中的改进
从以开始就一直在尝试对WAL进行不同级别的压缩。自2016年以来内置功能(wal_compression)就一直存在,几乎所有备份工具都会在传递到备机前对WAL进行压缩。但现在是时候再看看内置的wal_compression功能了。因为PG15提供了更多功能。如果我们将其与PG15中WAL归档的其他重大改进相结合,将会有相当大的收益,如之前贴子PG15中的新WAL归档模块/库:
yzsDBA
2023/02/26
1.6K0
[翻译]PostgreSQL中的WAL压缩以及版本15中的改进
推荐阅读
相关推荐
Prometheus远端数据存储方案之PostgreSQL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验