WebP Cloud Services Blog

用 Prometheus 采集 WebP Cloud 账户数据

· Nova Kwok

作为 WebP Cloud 的付费用户,我们很感谢来自你的支持!(什么,你还不是我们的付费用户嘛?那说明你的用量还不够大以至于我们免费的 Plan 都可以支持你啦~

用户可能会一些困扰:

  • 我每天用了多少 Quota
  • 能不能把 WebP Cloud 的数据直接集成到我自己的监控面板上
  • 我的 Proxy 每天输出了多少流量,请求数分布是如何的

WebP Cloud 作为一个 SaaS 服务,对所有 Plan 的用户都开放了详细的访问数据:

是的,所有 Plan 的用户都可以看到详细的数据,不会像某些服务商一样买了 Pro 之后才能看到…带采样率的数据?

但是可能会有用户觉得这样的数据不够好看或者希望集成到自己的 Dashboard 中,在之前可以直接通过我们的 API 拿到所有的数据,只用稍加处理,即可写入自己的数据库。

但是这样依然不够好用!每个有自己 Dashboard 的用户都需要手动写一遍导入逻辑和定时运行的任务,这样会带来大量的资源/时间浪费,为什么 WebP Cloud 不能直接提供一套通用的接口来给出数据呢?

/metrics

这不, /metrics 接口就出现了,目前我们上线了两个接口:

  • /v1/user/metrics
  • /v1/proxy/<proxy_uuid>/metrics

分别可以展示当前用户的一些信息和对应 Proxy 的基本信息,详细参数可以参考文档:

Prometheus

我们来看看如何使用这两个接口来快速从 WebP Cloud 导入数据到自己的 Dashboard!

/metrics 接口是符合 Prometheus Exposition Format 规范的接口,由于这个接口在我们整个对外 API 接口下,访问接口需要传入 API Key 鉴权,我们调研了一下 Prometheus 发现原生只支持 Authorization Header(我们的 API 支持的是 tokenapi-key Header),为此我们额外支持了 Authorization Header,假设你的本地监控栈是如下部署的:

version: '3'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana:9.5.20
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - ./grafana_data:/var/lib/grafana

你的 prometheus.yml 文件如下(这个例子中我们用来监控自己账户的 Quota 剩余量信息和 ProxyID 为 afc8fd63-5ce6-48d2-a80b-edbf2ee8b6dc 的信息,假设你的 WebP Cloud API Key 为 dd25xxxx-xxxx-xxxx-xxxx-xxxxxxxx96a3

API Key 可以在 Dashboard 右上角看到

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'webp_cloud_user'
    metrics_path: /v1/user/metrics
    static_configs:
      - targets:
        - webppt.webp.se
    authorization:
      type: ""
      credentials: "dd25xxxx-xxxx-xxxx-xxxx-xxxxxxxx96a3"
  - job_name: 'webp_cloud_proxy'
    metrics_path: /v1/proxy/afc8fd63-5ce6-48d2-a80b-edbf2ee8b6dc/metrics
    static_configs:
      - targets:
        - webppt.webp.se
    authorization:
      type: ""
      credentials: "dd25xxxx-xxxx-xxxx-xxxx-xxxxxxxx96a3"

这样,我们就可以在 Prometheus 中看到我们要抓取的数据了。

接下来就可以在任意面板中集成了,例如 Grafana:

Enjoy~


WebP Cloud Services 团队是一个来自上海和赫尔辛堡的三人小团队,由于我们不融资,且没有盈利压力 ,所以我们会坚持做我们认为正确的事情,力求在我们的资源和能力允许范围内尽量把事情做到最好, 同时也会在不影响对外提供的服务的情况下整更多的活,并在我们产品上实践各种新奇的东西。

如果你觉得我们的这个服务有意思或者对我们服务感兴趣,欢迎登录 WebP Cloud Dashboard 来体验,如果你好奇它还有哪些神奇的功能,可以来看看我们的文档 WebP Cloud Services Docs,希望大家玩的开心~


Discuss on Hacker News