将 Prometheus 本地监控数据迁移至 Whizard

Prometheus 本身的存储机制适合短期数据存储,但对于长期数据存储和查询,Prometheus 并不是最佳选择。Whizard 提供了长期存储的解决方案,通过对象存储(如 S3 等)来存储历史数据,确保数据的持久性和可访问性。同时单个 Prometheus 实例无法跨集群查询数据。Whizard 提供了全局查询的功能,可以跨多个 Prometheus 实例进行统一查询,方便用户获取全局视角的数据。

1. Prometheus 调整为 Agent 模式

Prometheus 作为数据采集、查询及存储的服务端,需要消耗大量的内存、磁盘等资源。而在与 Whizard 协同部署场景下,更推荐将 Prometheus 以 Agent 模式部署,在此模式下,只保留数据采集和推送功能,结合 Whizard 的存储和查询能力,可以大幅降低 Prometheus 的资源消耗,提高系统整体的资源利用率。

以下为Prometheus Agent 的启动参数,请根据当前部署信息自行变更。

  1. containers:
  2. - name: prometheus
  3. image: 'prom/prometheus:v2.39.1'
  4. args:
  5. - '--config.file=/etc/prometheus/config_out/prometheus.env.yaml'
  6. - '--storage.agent.path=/prometheus'
  7. - '--enable-feature=agent'
  8. - '--web.enable-lifecycle'
  9. ports:
  10. - name: web
  11. containerPort: 9090
  12. protocol: TCP

注意: 请将 prometheus config配置文件中的remote_write 增加或更改为whizard Agent-proxy地址。

  1. remote_write:
  2. - url: http://whizard-agent-proxy.kubesphere-monitoring-system.svc:9090/api/v1/receive
  3. remote_timeout: 30s
  4. follow_redirects: true
  5. enable_http2: true
  6. queue_config:
  7. capacity: 2500
  8. max_shards: 200
  9. min_shards: 1
  10. max_samples_per_send: 500
  11. batch_send_deadline: 5s
  12. min_backoff: 30ms
  13. max_backoff: 5s
  14. metadata_config:
  15. send: true
  16. send_interval: 1m
  17. max_samples_per_send: 500

2. Whizard-agent-proxy 部署

Whizard-agent-proxy 用于代理转发 Prometheus 请求, 通过 remote-write 将 Prometheus 数据写入 Whizard,同时也暴露 query 接口,用于本地查询。 它既可以容器化部署于 Kubernetes 环境中,也可以二进制部署在裸机上。以下展示容器化部署的方式:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. labels:
  5. app.kubernetes.io/instance: whizard-agent-proxy
  6. app.kubernetes.io/name: whizard-agent-proxy
  7. name: whizard-agent-proxy
  8. namespace: kubesphere-monitoring-system
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. app.kubernetes.io/instance: whizard-agent-proxy
  14. app.kubernetes.io/name: whizard-agent-proxy
  15. template:
  16. metadata:
  17. labels:
  18. app.kubernetes.io/instance: whizard-agent-proxy
  19. app.kubernetes.io/name: whizard-agent-proxy
  20. spec:
  21. containers:
  22. - args:
  23. - --gateway.address=http://gateway-whizard-operated.kubesphere-monitoring-system.svc:9090
  24. - --tenant=<your_tenant_name>
  25. image: kubesphere/whizard-monitoring-agent-proxy:v0.10.0
  26. name: agent-proxy
  27. ports:
  28. - containerPort: 9090
  29. name: http
  30. ---
  31. apiVersion: v1
  32. kind: Service
  33. metadata:
  34. labels:
  35. app.kubernetes.io/instance: whizard-agent-proxy
  36. app.kubernetes.io/name: whizard-agent-proxy
  37. name: whizard-agent-proxy
  38. namespace: kubesphere-monitoring-system
  39. spec:
  40. ports:
  41. - name: http
  42. port: 9090
  43. targetPort: http
  44. selector:
  45. app.kubernetes.io/instance: whizard-agent-proxy
  46. app.kubernetes.io/name: whizard-agent-proxy
  47. sessionAffinity: ClientIP

注:

  1. 以上部署文件适用于同whizard共同部署,请根据租户修改 —tenant=<your_tenant_name> 字段;
  2. 如agent-proxy 和 whizard 不在同一集群中,请修改 —gateway.address 为实际链接地址;
  3. agent-proxy 默认为ClientIP 方式,如需外部访问,请自行修改暴露方式;