今天看到德哥分享的基於postgresql的prometheus數據遠端存儲方案,因而有了本文的實驗。python
一般,prometheus的外置存儲方案有好幾種選擇,例如influxdb,m3db, es,postgresql。nginx
m3db通常在雲原生環境下,用的更趁手些。git
這裏咱們演示下postgresql的遠端存儲方案(可讀可寫),具體看下面的實驗。github
實驗環境:
golang
CentOS7.4sql
PG11-git-1921 編譯安裝版數據庫
參考文檔: bootstrap
https://blog.csdn.net/qq_43303221/article/details/88574693#cmake_34_50 編譯安裝 TimescaleDB 擴展vim
https://studygolang.com/articles/13522?fr=sidebar 遠端存儲的介紹centos
https://github.com/timescale/prometheus-postgresql-adapter prometheus-postgresql-adapter的官方文檔介紹
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write 官方文檔
https://github.com/digoal/blog/blob/master/201910/20191027_04.md 德哥blog
https://github.com/timescale/pg_prometheus pg_prometheus擴展的官方文檔
一、安裝llvm
yum install centos-release-scl-rh yum install llvm-toolset-7-clang yum install llvm5.0 yum install llvm5.0-libs yum install llvm5.0-devel yum install clang
二、安裝cmake-3.4以上的版本
cd /usr/local/ wget https://github.com/Kitware/CMake/releases/download/v3.16.0-rc2/cmake-3.16.0-rc2-Linux-x86_64.sh sh cmake-3.16.0-rc2-Linux-x86_64.sh 便可在當前路徑下安裝cmake-3.16 載入cmake-3.16到環境變量: export PATH=/usr/local/cmake-3.16.0-rc2-Linux-x86_64/bin:$PATH
三、編譯安裝PG11帶jit模塊
su - postgres cd /home/postgres/ wget yum localinstall epel-release-latest-7.noarch.rpm yum install llvm5.0 llvm5.0-devel clang cd /home/postgres/pg_sources/postgresql-11 ./configure --prefix=/usr/local/pgsql-11.5-jit-1921 \ --with-python --with-perl --with-tcl --with-pam \ --with-openssl --with-libxml --with-libxslt \ --with-llvm LLVM_CONFIG='/usr/lib64/llvm5.0/bin/llvm-config' make make install 而後,還有些數據庫的基礎配置,這裏就不細說了。
四、安裝TimescaleDB擴展
su - postgres cd /home/postgres/ cd timescaledb-1.4.2/ export PATH=/usr/local/pgsql-11.5-jit-1921/bin:$PATH ./bootstrap 輸入y cd ./build && make make install 日誌以下: [ 0%] Built target sqlfile [ 25%] Built target sqlupdatescripts [ 81%] Built target timescaledb [ 85%] Built target timescaledb-loader [100%] Built target timescaledb-tsl Install the project... -- Install configuration: "Release" -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb.control -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.4.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.4.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.4.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.3.2--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.3.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.3.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.2.2--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.2.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.2.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.1.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.1.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.0.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.0.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.0.0-rc3--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.0.0-rc2--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--1.0.0-rc1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.12.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.12.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.11.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.10.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.10.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.9.2--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.9.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.9.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.8.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.7.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.7.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.6.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.6.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.5.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.4.2--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.4.1--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.4.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.3.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.2.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/share/extension/timescaledb--0.1.0--1.4.2.sql -- Installing: /usr/local/pgsql-11.5-jit-1921/lib/timescaledb-1.4.2.so -- Installing: /usr/local/pgsql-11.5-jit-1921/lib/timescaledb.so -- Installing: /usr/local/pgsql-11.5-jit-1921/lib/timescaledb-tsl-1.4.2.so
便可完成timescaledb擴展的安裝
編輯pg的配置文件,修改以下:
shared_preload_libraries = 'timescaledb'
完成後重啓PG進程
而後,登陸到PG中,建立擴展:
postgres=# CREATE EXTENSION timescaledb;
五、安裝pg_prometheus擴展
su - postgres cd /home/postgres/ export PATH=/usr/local/pgsql-11.5-jit-1921/bin:$PATH USE_PGXS=1 make USE_PGXS=1 make install
編輯pg的配置文件,修改以下:
shared_preload_libraries = 'timescaledb,pg_prometheus'
完成後重啓PG進程
而後,登陸到PG中,建立擴展:
postgres=# CREATE EXTENSION pg_prometheus ; postgres=# SELECT create_prometheus_table('metrics'); 或者使用 SELECT create_prometheus_table('metrics',use_timescaledb=>true); postgres=# INSERT INTO metrics VALUES ('cpu_usage{service="nginx",host="machine1"} 34.6 1494595898000'); postgres=# \d List of relations Schema | Name | Type | Owner --------+-----------------------+----------+---------- public | metrics | view | postgres public | metrics_copy | table | postgres public | metrics_labels | table | postgres public | metrics_labels_id_seq | sequence | postgres public | metrics_values | table | postgres (5 rows)
六、啓動prometheus-postgresql-adapter
直接到https://github.com/timescale/prometheus-postgresql-adapter 下載解壓prometheus-postgresql-adapter
./prometheus-postgresql-adapter -pg-port 1921 --pg-user postgres 便可在前臺啓動adapter進程
七、使用prometheus鏈接adapter端口:
vim /usr/local/prometheus/prometheus.yml 在最後加2個配置;
remote_write: - url: "http://192.168.2.4:9201/write" write_relabel_configs: - source_labels: [__name__] regex: 'go_.*' action: drop remote_read: - url: "http://192.168.2.4:9201/read" read_recent: false
說明: 我這裏設置的read_recent爲false,表示查詢prometheus近期數據不要到PG庫裏來撈數據,而是直接查prometheus本地緩存的數據,這樣提升查詢的速度而且能下降PG庫的負載。
不足:
目前的配置來看,咱們同事運行的prometheus和PG庫, 存放一樣歷史週期的的metrics,PG庫的體積遠遠超過了prometheus的體積。
PG庫的metrics_values表已經 40 MB,此時的prometheus的data目錄才 16MB 。 磁盤空間佔用上,相差接近3倍。
優化方案待定:
調整remote_write 寫入策略,經過drop操做來下降存儲到PG的metrics的體積?