如何从Prometheus单独提取个别数据持久化到influxdb

我想问一下,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规则的