Trickster 使用

Table of Contents

介绍

Trickster 是 comcast 开源的 HTTP 反向代理缓存,能够加快 TSDB(时间序列数据库,如 Prometheus)查询速度。

目的

在 k8s 集群里使用 Trickster 代理 Prometheus,验证 Trickster 能够加快 Grafana 查询的速度。

注:集群中已部署 Prometheus 和 Grafana

安装

根据官方文档,Trickster 提供以下安装方式:

  • Docker
  • k8s
  • Helm
  • 源码安装

本次通过 Helm 安装,安装步骤见这里

通过 Helm 安装

添加 Trickster Helm repo:

helm repo add tricksterproxy https://helm.tricksterproxy.io

查看是否添加成功:

# helm search repo tricksterproxy
NAME                    	CHART VERSION	APP VERSION	DESCRIPTION
tricksterproxy/trickster	1.5.4        	1.1        	Trickster is an HTTP Reverse Proxy Cache and ti...

到这里,需要看下 Trickster 的配置信息,即 values.yaml

为了能让 Trickster 跑起来,该配置文件 values.yaml 中,需要注意以下配置项:

origins

里面的 originURL,填写已有的 Prometheus 地址,即 Trickster 将代理这个地址,并将查询的数据缓存

caches

Trickster 支持多种缓存类型,如:memory、bbolt、badger、filesystem 和 redis,其中使用 memory 缓存是默认方式,基于 sync.Map,这里就直接使用默认的 memory 方式,建议生产环境使用 filesystem 和 redis 方式

replicaCount

pod 数量,默认是 1,这里也是直接使用默认值

service

即 k8s 服务暴露的方式,这里使用 lb 方式暴露服务,需要在里面的 annotations 配置:

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: 这里填写 lb 实例 id
service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port: http:80

注:使用的是阿里云 k8s 集群

并将 service 里面的 type 改为:LoadBalancer

ingress

如果上述的 service 暴露方式不是 LoadBalancer,而是想通过 ingress 暴露服务,修改 ingress 配置项即可

resources

资源的 limits 和 requests 配置,这里填的是:

resources:
  limits:
    cpu: "2"
    memory: 4Gi
  requests:
    cpu: "1"
    memory: 2Gi

通过命令安装:

helm upgrade -i trickster tricksterproxy/trickster -f values.yaml --namespace monitoring --debug

使用自定义的 values.yaml 安装 trickster,安装在 monitoring 命名空间下,安装过程开启 debug 模式,可以输出详细的安装过程。

检查是否安装成功,可以直接访问 http://lb-IP:8480/trickster/ping 地址,进行健康检查:

curl http://lb-IP:8480/trickster/ping
pong

另外,可以直接访问: http://lb-IP:8480/metrics 查看 Trickster 的 metrics 数据

注:这里是通过 lb 方式暴露服务,lb-IP 是 lb 的 IP 地址,8480 是 Trickster 默认的代理端口

验证

现在来看看使用 Trickster 后,Grafana 中同样的查询有没有加速,以及加速了多少。

首先在已有的 Grafana 上添加一个新的 data source,URL 为 Trickster 反向代理地址:http://lb-IP:8480

找一个查询比较耗时的 panel,做两次实验,每个实验有两组,data source 分别为原生的 Prometheus 和给 Prometheus 做了代理的 Trickster,每组实验 refresh 面板 15 次,通过 Grafana 的 Query Inspector 查看每次 refresh 查询耗时,结果如下:

实验一

查看该 panel 过去 1 小时的数据,refresh 时间是 10s,结果:

原生 Prometheus 查询时间共计:42s,平均查询时间:2.8s Trickster 查询时间共计:13.899s,平均查询时间:0.9266s

实验二

查看该 panel 过去 3 小时的数据,refresh 时间是 10s,结果:

原生 Prometheus 查询时间共计:108s,平均查询时间:7.2s Trickster 查询时间共计:22.579s,平均查询时间:1.505s

结论

初步验证 Trickster 能够加快时序数据库如 Prometheus 的查询速度。

原理

那 Trickster 为什么能加快 Prometheus 的查询速度呢?

因为每次加载或重新加载仪表盘时,大多数仪表盘都会从时间序列数据库请求整个时间范围的数据,而 Trickster 的 Delta Proxy 会检查客户端查询的时间范围,以确定哪些数据点已经被缓存,并仅请求 Prometheus 上真正需要的数据点,这种增量查询,将大大加快图表的加载时间。

注意事项

  • 上述过程只是为了测试使用 Trickster,供参考。