docker-swarm - Traefik 查询活/死后端
问题描述
我们在 docker swarm 上安装了一个 treafik,通过 traefik 平衡了几个服务。每个服务至少有两个后端与 wrr 和一个运行状况检查相平衡。
有没有办法(api、rest 端点、日志文件等等)找出哪些前端有死后端?死亡是指 treafik 在哪些后端通过运行状况检查检测到它们不符合平衡条件?
对此的最佳做法是什么?
解决方案
我看到了两种获取该信息的方法:
Traefik 日志
查看Traefik 日志,它提供了健康检查的跟踪信息:
time="2019-03-05T22:19:35Z" level=debug msg="Refreshing health check for backend: backend-web-so-55004614", time="2019-03-05T22:19:35Z" level=warning msg="Health check still failing. Backend: \"backend-web-so-55004614\" URL: \"http://192.168.80.2:80\" Reason: received error status code: 404", time="2019-03-05T22:19:36Z" level=debug msg="Refreshing health check for backend: backend-web-so-55004614", time="2019-03-05T22:19:36Z" level=warning msg="Health check still failing. Backend: \"backend-web-so-55004614\" URL: \"http://192.168.80.2:80\" Reason: received error status code: 404",
特拉菲克/metrics
如果不方便解析 Traefik 日志,您可以激活 Traefik Prometheus 指标(默认启用):
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p "80:80" -p "8080:8080" traefik --api --docker
然后,您可以进行 HTTP 查询http://localhost:8080/metrics
并查找包含_backend_server_up
. 这些行中的每一行都告诉你你的后端是正常的。如果缺少后端,则意味着它不健康或已停止:
traefik_backend_server_up{backend="backend-robots",url="http://172.23.0.3:80"} 1
traefik_backend_server_up{backend="backend-smtp-ui",url="http://172.25.0.3:8025"} 1
traefik_backend_server_up{backend="backend-varnish-admin",url="http://172.23.0.8:6085"} 1
traefik_backend_server_up{backend="backend-varnish-http",url="http://172.23.0.8:6081"} 1
traefik_backend_server_up{backend="backend-web-apps",url="http://172.21.0.2:80"} 1
traefik_backend_server_up{backend="backend-web-report",url="http://172.19.0.6:80"} 1
您可以有一个查询此 URL 的脚本,或者您可以安装具有警报规则的 Prometheus
推荐阅读
- flutter - Flutter Web:底部溢出问题
- node.js - 如何在不更新节点的情况下克服节点生命周期结束错误?
- r - geom_text 的包装函数
- python - 将 pandas.tseries.offsets.Day 数据类型转换为整数数据类型以进行简单计算
- sql - 替换列中的多个值
- github - 我在没有拉取请求的情况下丢失了我在 github 上的更改
- python - 将 EBNF 语法转换为 pyparsing 会出错
- python - 有没有办法强制 ruamel 在换行符之前的 OrderedDict 中插入一个新的(键:值)对?
- php - laravel 上的多重身份验证
- angular - Angular:有没有一种方法可以从 ts 文件访问表单中的所有表单控件,而无需显式地传递表单 html?