我想问一下,Prometheus不是说不能做持久化存储,好像只能15天;如果想持久化,需要引入influxdb。
prometheus直接对接influxdb网上有很多,但是应该不是每个数据需要持久化吧,我如何过滤出来一些数据持久化到influxdb呢?
可以使用prometheus的Recording规则来过滤出需要持久化的数据,并将其写入到influxdb中。Recording规则是一组prometheus的查询和转换操作,它们可以在prometheus服务器上预先计算和存储指标数据。
以下是一个Recording规则的例子,可以将所有以"api_"为前缀的指标数据持久化到influxdb中:
groups:
- name: api_metrics
rules:
- record: api_requests_total
expr: sum(rate(api_requests_total[5m])) by (endpoint)
- record: api_response_time
expr: avg(api_request_duration_seconds) by (endpoint)
- record: api_errors_total
expr: sum(rate(api_errors_total[5m])) by (endpoint)
- record: api_p95
expr: histogram_quantile(0.95, sum(rate(api_request_duration_seconds_bucket[5m])) by (le, endpoint))
- record: api_p99
expr: histogram_quantile(0.99, sum(rate(api_request_duration_seconds_bucket[5m])) by (le, endpoint))
- record: api_perf_score
expr: 100 - (api_p99 * 10) - (api_p95 * 5) + (api_requests_total / 1000)
- record: api_data_size
expr: sum(rate(api_response_size_bytes[5m])) by (endpoint)
# Send to InfluxDB
- name: influxdb
rules:
- type: influxdb
database: mydb
retention_policy: default
endpoint: http://influxdb:8086
measurement: api_metrics
match:
prefix: api_
在这个Recording规则中,我们使用了prometheus的sum、avg、histogram_quantile等函数对api指标进行计算,并给它们定义了对应的metric名称。然后,我们通过match规则选择了所有前缀为"api_"的指标,并将它们写入到influxdb的名为"mydb"的数据库中。
需要注意的是,在prometheus的配置文件prometheus.yml中需要指定你的Recording规则的