14

开源项目 : prome-route: 使用反向代理实现prometheus分片

 4 years ago
source link: https://studygolang.com/articles/30637
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

开源项目地址:

项目地址: https://github.com/ning1875/prome-route

PS: 这是一个仅用时半天就写完的项目

架构图

ERni22r.jpg!mobile

prometheus HA

prometheus本地tsdb性能出色,但是碍于其没有集群版本导致

实现手段

注意这些手段都是要数据的统一存储

  • 可以通过remote_write 到一个提供HA的tsdb存储中
  • 通过联邦收集到一个prometheus里

问题来了,搞不定集中式的tsdb集群,或者集群挂了咋办

本项目介绍

原理介绍

  • 肯定有一组prometheus 服务器和pod用来采集各式各样的数据
  • 那么采集器上本地的数据就是一个个分片,采集器本身也可以充当查询的角色
  • 而且每个采集器上面的指标通过一个 特征标签 比如cluster/app等区分
  • 通常是定义global.external_labels中的

    global:
      external_labels:
        cluster: a
  • 如果能有一个路由组件,知道所有特征标签对应的采集器地址
shard_addr_map = {  
 "cluster_a": "1.1.1.1:9090",  
 "cluster_b": "2.2.2.2:9090",  
 "cluster_c": "3.3.3.3:9090",  
}
特征标签
特征标签

需要适配的接口

prometheus 3 大查询接口

  • instance_query : /api/v1/query 报警使用和当前点查询
  • range_query : /api/v1/query_range 查询一段时间的曲线
  • series : /api/v1/series 使用label_values查询变量

对应在代码中实现

func Routes(r *gin.Engine) {  
  
   qApi := r.Group("/")  
   qApi.GET("/api/v1/query_range", promeRangequery)  
   qApi.GET("/api/v1/query", promeInstancequery)  
   qApi.GET("/api/v1/series", promeSeriesQuery)  
  
}

查询状态码不同时返回数据结构不同

这个很好解决,用interface即可

respBytes, err := ioutil.ReadAll(resp.Body)  
if err != nil {  
   log.Error(err.Error())  
   c.String(http.StatusInternalServerError, fmt.Sprintf(`target prome %s error by %s=%s `, targetProme, keyName, labelName))  
   return  
}  
var respInterface interface{}  
_ = json.Unmarshal(respBytes, &respInterface)  
  
c.JSON(resp.StatusCode, respInterface)

优缺点

优点

  • 查询在各自采集器完成,不用受限于集中tsdb的可用性,挂了,也可以查到,查询互相不受影响
  • 数据保存时间不受限于统一的tsdb配置,可以各自配置业务采集器
  • 查询limit参数也不再首先于统一的tsdb配置,放飞。。。
  • 组件无状态,只做转发,可横向扩容

缺点

  • 受限于统一的label特征

使用指南

适用范围

  • 不想维护tsdb集群
  • 给tsdb集群挂了时做备份查询
  • 查询时含有 特征标签 ,采集器上数据没有 特征标签

注意

  • 如果本身每个采集器上面的数据已经有 特征标签 区别好了,那么需要改下本项目的代码直接转发即可
# build  
git clone https://github.com/ning1875/prome-route.git  
go build -o prome-route main.go   
  
#修改配置文件  
补充prome-route.yml中的信息:  
replace_label_name: cluster # 特征标签,即grafana查询时用来区分不同shard的label name  
 # 比如特征标签为cluster :node_memory_MemFree_bytes{cluster="a",node=~".+"}  
 # 代表查询分片a上的node_memory_MemFree_bytes数据  
prome_servers:  
  
 a: 1.1.1.1:9090 # 各个分片采集器的value及其地址  
 b: 2.2.2.2:9090  
  
  
http:  
 listen_addr: :9097  
 
#启动服务  
./prome-route --config.file=prome-route.yml
systemctl start prome-route

# 在grafana中添加数据源地址填 $prome-route:9097 如1.1.1.1:9097

有疑问加站长微信联系

iiUfA3j.png!mobile

Recommend

  • 82

    反向代理实现2.4=====================1.准备三台机器:A:客户端B:中间件代理服务器C:后端服务器2.查看B依赖模块:httpd-M|grepproxyproxy_http_module(shared)3.创建Bproxy的配置文件:(建议放在conf.d/目录下)vim/etc/httpd/conf.d/proxy.conf格式:ProxyPass"/&...

  • 72
    • www.williamlong.info 6 years ago
    • Cache

    IIS实现反向代理

  • 53
    • www.ydstudio.net 6 years ago
    • Cache

    Nginx实现反向代理 Node.js

    公司有项目前端是用node.js进行服务器渲染,然后再返回给浏览器,进而解决单页面的SEO问题。项目部署的时候,使用Nginx反向代理Node.js。具体的步骤如下: (Nginx、Node.js的安装和基本配置直接跳过) 首先我们要在ngi...

  • 47
    • studygolang.com 6 years ago
    • Cache

    1 行 Go 代码实现反向代理

    暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库。 为项目选择编程语言和挑选你最爱的球队不一样。应该从实用主义出发,根据特定...

  • 22

    博文大纲:一、Nginx的安装;二、Nginx服务实现反向代理;三、Nginx服务优化一、Nginx的安装关于Nginx的基本概念,在之前的博文中:搭建Nginx服务器及其配置文件详解有详细的介绍,这篇博文就直接从安装开始谈起。环境准备:三台centos7.5,其中一台运行Nginx,另...

  • 8

    微软的反向代理项目 ReverseProxy 更名为 Yarp.ReverseProxy 微软的开源项目

  • 12

    用群晖自带反向代理实现 HTTPS 访问首先,你需要一个外部访问群晖的 IP 或域名,并且已经申请了 SSL 证书。详细说明可参考文章

  • 23
    • blog.est.im 3 years ago
    • Cache

    FastAPI+Requests实现反向代理

    FastAPI+Requests实现反向代理 Posted 2021-03-30 | stdout 因为某些拉垮的业务需要,不得不在代码里去反向代理别的 HTTP API 一般格式如下: @app.get('/other/{other_path:path}') @app.post('/other/{other_pat...

  • 8

    ASP.NET Core 搭载 Envoy 实现微服务的反向代理2021-07-0139 22 min.话说,博主第一次接触到Envoy,其实是在微软的示例项目 eShopOnContainers,在...

  • 10
    • blog.51cto.com 1 year ago
    • Cache

    6、Nginx实现反向代理

    6、Nginx实现反向代理 精选 原创 GavenLee 2023-07-26 09:17:19...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK