用动态分片解决pushgateway高可用 单点 HA问题
学习方向 | 分析进阶视频 | 教程地址 | 备注 |
---|---|---|---|
01_k8s零基础入门实战 | 地址 | 地址 | |
02_k8s纯源码解读课程,助力你变成k8s专家 | 地址 | 地址 | |
03_k8s底层原理和源码讲解之精华篇 | 地址 | 地址 | |
04_k8s底层原理和源码讲解之进阶篇 | 地址 | 地址 |
学习方向 | 分析进阶视频 | 教程地址 | 备注 |
---|---|---|---|
01_k8s运维大师课程 | 地址 | 地址 | |
02_k8s-operator和crd实战开发 助你成为k8s专家 | 地址 | 地址 | |
02_k8s二次开发之基于真实负载的调度器 | 地址 | 地址 |
学习方向 | 分析进阶视频 | 教程地址 | 备注 |
---|---|---|---|
01_prometheus零基础入门,grafana基础操作,主流exporter采集配置 | 地址 | 地址 | |
02_prometheus全组件配置使用、底层原理解析、高可用实战 | 地址 | 地址 | |
03_kube-prometheus和prometheus-operator实战和原理介绍 | 地址 | 地址 | |
04_prometheus-thanos使用和源码解读 | 地址 | 地址 | |
05_prometheus源码讲解和二次开发 | 地址 | 地址 |
学习方向 | 分析进阶视频 | 教程地址 | 备注 |
---|---|---|---|
01_golang基础课程 | 地址 | 地址 | |
02_golang运维平台实战,服务树,日志监控,任务执行,分布式探测 | 地址 | 地址 | |
03_golang运维开发实战课程之k8s巡检平台] | 地址 | 地址 |
学习方向 | 分析进阶视频 | 教程地址 | 备注 |
---|---|---|---|
01_tekton全流水线实战和pipeline运行原理源码解读 | 地址 | 地址 |
http://pushgateway_addr/metrics/job/<JOB_NAME>
http://pushgateway_addr/metrics/job/<JOB_NAME>/<LABEL_NAME>/<LABEL_VALUE>
- job_name: pushgateway
honor_labels: true
honor_timestamps: true
scrape_interval: 5s
scrape_timeout: 4s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- pgw-a:9091
- pgw-b:9091
# 仅job不同
- http://pushgateway_addr/metrics/job/job_a
- http://pushgateway_addr/metrics/job/job_b
- http://pushgateway_addr/metrics/job/job_c
# label不同
- http://pushgateway_addr/metrics/job/job_a/tag_a/value_a
- http://pushgateway_addr/metrics/job/job_a/tag_a/value_b
Watch
pgw节点数量变化编译或下载
# 编译build
$ git clone https://github.com/ning1875/dynamic-sharding.git
$ cd dynamic-sharding && make
# 下载 :releases中直接下载tag包
# 如https://github.com/ning1875/dynamic-sharding/releases/download/v2.0/dynamic-sharding-2.0.linux-amd64.tar.gz
修改配置
# 修改配置文件
# 补充dynamic-sharding.yml中的信息:
启动dynamic-sharding服务
./dynamic-sharding --config.file=dynamic-sharding.yml
和promtheus集成 Add the following text to your promtheus.yaml's scrape_configs section
scrape_configs:
- job_name: pushgateway
consul_sd_configs:
- server: $cousul_api
services:
- pushgateway
relabel_configs:
- source_labels: ["__meta_consul_dc"]
target_label: "dc"
调用方调用 dynamic-sharding接口即可 eg: http://localhost:9292/
eg: 启动了4个pgw实例,其中一个宕机了,则流量从4->3,以此类推
eg: 启动了4个pgw实例,其中一个宕机了,过一会儿恢复了,那么它会被consul unregister掉 避免出现和扩容一样的case: 再次rehash的job 会持续在原有pgw被prome scrap,而且value不会更新
修改yml配置文件将pgw servers 调整到扩容后的数量,重启服务dynamic-sharding 注意 同时也要重启所有存量pgw服务,不然rehash的job 会持续在原有pgw被prome scrap,而且value不会更新
# 方法一
## 调用cousul api
curl -vvv --request PUT 'http://$cousul_api/v1/agent/service/deregister/$pgw_addr_$pgw_port'
eg: curl -vvv --request PUT 'http://localhost:8500/v1/agent/service/deregister/1.1.1.1_9091'
## 修改yml配置文件将pgw servers 调整到缩容后的数量,避免服务重启时再次注册缩容节点
# 方法二
## 停止缩容节点服务,consul会将服务踢出,然后再注销
follow_redirect
导致的def push_to_gateway(gateway, job, registry, grouping_key=None, timeout=30,handler=default_handler):
def custom_handle(url, method, timeout, headers, data):
def handle():
h = {}
for k, v in headers:
h[k] = v
if method == 'PUT':
resp = requests.put(url, data=data, headers=h, timeout=timeout)
elif method == 'POST':
resp = requests.post(url, data=data, headers=h, timeout=timeout)
elif method == 'DELETE':
resp = requests.delete(url, data=data, headers=h, timeout=timeout)
else:
return
if resp.status_code >= 400:
raise IOError("error talking to pushgateway: {0} {1}".format(resp.status_code, resp.text))
return handle
# push_to_gateway(push_addr, job='some_job', registry=r1, handler=custom_handle)