Prometheus 與 InfluxDB 是兩個極其相似的產品,一樣都是源自於 Golang
開發而成的 TSDB,可以支援 1000 個節點以下的 metrics (大約),也都有許多
Dashboard Template 可以使用,而最大的差異為 Prometheus 並沒有原生支援
cluster。如果節點數超過 1000
個,或資料的保存以及系統持續性,是重要考量的前提下,Prometheus
因為是單節點的,可能就需要採用 Federation 的方式來達成 Scale,此時 InfluxDB
原生的 Cluster 可能就會是一個更好,又便利的選擇。
如果 Prometheus 已是既有的服務,並穩定在正式區運行,InfluxDB 也可以支援
Scrape Prometheus 的資料,並存放至 InfluxDB 的 Bucket 中,方法有三:
PS: 如果是使用 InfluxDB OSS 版本,採用 Telegraf 的方式較佳,其他方式都會有錯誤。
Use Telegraf
## Collect Prometheus formatted metrics
[[inputs.prometheus]]
urls = ["http://example.com/metrics"]
metric_version = 2
## Write Prometheus formatted metrics to InfluxDB
[[outputs.influxdb_v2]]
urls = ["http://localhost:8086"]
token = "$INFLUX_TOKEN"
organization = "example-org"
bucket = "example-bucket"
Use prometheus.scrape()
import "experimental/prometheus"
prometheus.scrape(url: "http://my.prometheus.com/metrics")
|> to(bucket: "my-prometheus-bucket")
透過 Flux 語法的好處是,可以在 InfluxDB 的 Task 中,再額外加入 aggregation
邏輯,將 Prometheus
的資料多做一次整理,縮小資料量,是三個方法最有彈性的做法。
Use an InfluxDB scraper
進入到 Data (Load Data) > Scrapers 的頁面中,並帶入以下資訊