Prometheus 遠程讀寫 Influxdb
Influxdb
InfluxDB 是一款開源的時序數據庫,是InfluxData(是一個公司,提供時序平臺)下的一個產品,使用Go語言開發。
時序數據庫
Time Series Database(TSDB)時序數據庫,是自帶時間戳索引的數據庫,每一條數據都帶了採樣時間,適用於做監控圖表,點擊,交易圖表(橫軸都是時間)。
Prometheus本地存儲遇到的問題
- 高可用
Prometheus的高可用很簡單,複製一臺一模一樣的機器,配置一模一樣,數據採集雙份,存儲雙份到本地,然後用lb做負載查詢,但是這樣將會迎來新的問題,假如一臺Prometheus故障, 10分鐘沒有采集到數據,那麼用lb查詢後端落到這臺的時候也是沒有數據的,因爲Prometheus沒有做到無狀態,依賴本地數據。 - 水平擴容
如果Prometheus按照類型拆分,將抓取目標分爲,基礎指標和業務指標,再加上高可用就要部署兩臺基礎Prometheus,兩臺業務Prometheus,這樣又會迎來另外一個問題,數據分散在不同的地方, 沒有一個全局的查詢api。
Prometheus 使用 influxdb 做存儲
-
使用docker構建測試環境
docker-compose 文件如下:
version: '3'
services:
prometheus:
image: docker.io/prom/prometheus
container_name: prometheus
networks:
- georgie-network
ports:
- "9090:9090"
volumes:
- prometheus:/prometheus
grafana:
image: docker.io/influxdb
container_name: influxdb
ports:
- "8086:8086"
depends_on:
- prometheus
volumes:
- influxdb:/var/lib/influxdb
networks:
- georgie-network
networks:
georgie-network:
external: true
volumes:
prometheus:
external: true
influxdb:
external: true
- 在influxdb中創建一個prometheus的庫
curl -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE prometheus"
- 修改Prometheus容器中的prometheus.yml配置對接adapter
# /etc/prometheus/prometheus.yml
remote_write:
- url: "http://influxdb:8086/api/v1/prom/write?db=prometheus"
remote_read:
- url: "http://influxdb:8086/api/v1/prom/read?db=prometheus"
-
prometheus重新加載配置
kill -HUP 1 # 1是prometheus的進程id
-
influxdb 中查看採集到的數據
[root@localhost influxdb]# docker exec -it influxdb sh # influx Connected to http://localhost:8086 version 1.7.8 InfluxDB shell version: 1.7.8 > use prometheus Using database prometheus > show measurements name: measurements name ---- go_gc_duration_seconds go_gc_duration_seconds_count go_gc_duration_seconds_sum ........... > select * from go_gc_duration_seconds limit 1 name: go_gc_duration_seconds time __name__ instance job quantile value ---- -------- -------- --- -------- ----- 1569574282939000000 go_gc_duration_seconds localhost:9090 prometheus 0 0.000005895