prometheus使用postgresql-adapter连接postgresql
概述
Prometheus使用postgresql需要使用postgresql-adapter进行数据转换。在安装postgresql-adapter之前需要安装2个扩展:pg_prometheus和timescaledb
官方推荐使用PostgreSQL, pg_prometheus,和TimescaleDB打包在一起的容器,但对于使用已有的postgresql来说并不合适,故需要手动编译安装。
环境准备
使用os为:redhat 7.4
假设已经安装好postgresql,本次使用的postgresql版本为11.1,安装路径为:/usr/pgsql-11/bin/。安装过程中如果遇到psql: command not found或No package pg_config available时执行如下命令即可:
# export PATH=$PATH:/usr/pgsql-11/bin/
安装cmake
编译pg_prometheus和timescaledb都会使用到cmake。
从官网下载cmake二进制版本,使用版本为3.15.1
# 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.xz,clang-tools-extra-7.1.0.src.tar.xz,compiler-rt-7.1.0.src.tar.xz,llvm-7.1.0.src.tar.xz并解压。安装路径为:/usr/local/clang。执行如下步骤编译clang,时长大约1小时。
# 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源码,执行如下命令即可编译:
# 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的可执行文件,同样拷贝即可
解决:执行如下命令拷贝
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即可
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源码,解压后执行如下命令即可
# 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
host all admin 172.17.0.2/16 md5
启动命令如下,需要注意的是,由于在容器内部运行,-pg.host必须指定postgresql主机的地址,而非loopback接口
# 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
使用可执行文件启动
下载官方源码,解压后执行如下命令编译即可。由于安装依赖很多库,建议在如阿里云海外主机上编译后拷贝下来
# go mod download
# make
此时使用本地地址连接postgresql,故pgsql的pg_hba.conf中添加如下内容,重启psql:
host all admin 127.0.0.1/32 md5
启动命令如下:
# ./prometheus-postgresql-adapter -pg.user=admin -pg.password=admin -pg.database=postgres -pg.prometheus-log-samples
配置Prometheus
Prometheus配置文件加入如下命令即可:
remote_write:
- url: "http://<adapter-address>:9201/write"
remote_read:
- url: "http://<adapter-address>:9201/read"
timescaledb的使用
timescaledb具体使用可以参见官网API,下面给出常用的方式:
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.so和timescaledb.so
prometheus使用postgresql-adapter连接postgresql的更多相关文章
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
- ArcGIS平台中PostgreSQL数据连接配置总结
通常用户在使用要素服务时,要求数据必须是存放在空间数据库中的.同时,需要将数据库注册到ArcGIS for Server,这样在发布服务时就不需要进行数据拷贝,从而可以节省磁盘空间及服务发布时间.以下 ...
- Entity Freamwork 6连接PostgreSql数据库
原文 Entity Freamwork 6连接PostgreSql数据库 开发环境 VS 2015 Update 1 Postgre Sql 9.4 使用过程 1.使用Nuget在项目中添加对E ...
- php连接postgresql
在ubuntu下用php连接postgresql需要下个模块php5-pgsql 连接数据库并显示一张表的内容: <?php #连接数据库 $conn = pg_connect("ho ...
- python连接postgresql数据库
python可以通过第三方模块连接postgresql. 比较有名的有psycopg2 和python3-postgresql (一)psycopg2 ubuntu下安装 sudo apt-get ...
- SSIS 连接 PostgreSQL
因为工作需要,得把psql的表放到SQL Server, 找到一个PGNP(http://www.pgoledb.com/) 的适配器,不过一看要300$就没有去尝试了. 官方倒是有ODBC的驱动. ...
- ArcGIS SDE 10.1 for Postgresql 服务连接配置
去年写了ArcGIS 10.1 如何连接Postgresql 数据库(http://blog.csdn.net/arcgis_all/article/details/8202709)当时采用的也是Ar ...
随机推荐
- Mybatis中的缓存管理
目录 Mybatis中的缓存管理 查询缓存工作原理: 配置缓存: 默认配置: 使用二级缓存: 刷新缓存过程: 配置EHcache 产生脏数据 使用原则: Mybatis中的缓存管理 查询缓存工作原理: ...
- 关于两个DIV之间的空白字符
首先!!!!这个问题应该是去面试前端会经常问到的问题!!! 如,下面这个例子: <!DOCTYPE html> <html lang="zh-CN"> &l ...
- iOS开发使用Xcode的一些小技巧
1.打开iOS项目 如果你当前目录下既有project又有workspace,你可以在终端使用命令“xed.”自动打开workspace,如果只有project,它会自动打开project. 2.清理 ...
- 景点API支持查询携程旅游门票景点详情
门票景点详情,景点api支持查询携程旅游门票景点详情. 接口名称:景点api 接口平台:开放api 接口地址:http://api2.juheapi.com/xiecheng/senicspot/ti ...
- ng-zorror-antd------Input输入框
使用 ng-zorror-antd 来美化界面,带着问题挖掘技术: 一:基本使用 效果图: 问题一:如何人为控制输入框长度,如上效果图,让一个输入框长,一个输入框短?(注意:该输入框是最简单的输入框, ...
- Nginx 高级配置-第三方模块编译
Nginx 高级配置-第三方模块编译 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 第三模块是对nginx 的功能扩展,第三方模块需要在编译安装Nginx 的时候使用参数--add ...
- AtCoder - 4496 G - k-DMC
AtCoder - 4496 G - k-DMC 题目 长度为n的字符串,q次查询,问"DMC"(不要求连续)在字符串中出现的次数,其中D和M的距离不超过k. 错误思路 通过遍历字 ...
- windows下apache + mod_wsgi + python部署flask接口服务
windows下apache + mod_wsgi + python部署flask接口服务 用python3安装虚拟环境 为啥要装虚拟环境? 原因1:安装虚拟环境是为了使项目的环境和全局环境隔离开,在 ...
- 《浅谈我眼中的express、koa和koa2》好文留存+笔记
原文 :三英战豪强,思绪走四方.浅谈我眼中的express.koa和koa2 一.回调大坑怎么解决呢? 1.es5可以利用一下第三方库,例如 async 库, 2.或者单纯使用 connect中间件 ...
- 如何解决飞秋FeiQ绑定端口错误
今天启动feiQ居然报错,绑定端口2425错误,如您正使用FeiQ或IPMsg,请先退出. error = 10049... 百度谷歌之后,本人如此解决 1.netstat -an 查看端口 2425 ...