centos7删除postgresql_prometheus使用postgresqladapter连接postgresql

8c5d09fadf6c4dce1ace46ff0582a75f.gif 9f5e86ff922c2187432a7651b5301057.png概述 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( http://dwz.date/bUR6 ) 下载 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 即可

DatumFloat8GetDatum(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://:9201/write"
remote_read:
  - url: "http://: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

出处:http://dwz.date/bUSp

74c9ac99719dd08b0adfb5853cf68c6a.gif付费社群、K8S课程详情扫码咨询>>> 102e86bafc301c45c4a867fd001551b7.png 74c9ac99719dd08b0adfb5853cf68c6a.gif 9e0da6594a5b8452e3cb0659ddd9e86a.gif

●整理 kubernetes 各种问题汇总

●Docker 遇到的异常和注意点

●Kubernetes 中的 PV 和 PVC 是啥

●运维精华面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值