- 发布于
给 Traefik 增加 Grafana 监控能力
- 作者
- 姓名
前言
使用 Traefik 已经很多年,部署 Docker 服务变得非常简单,后来再配合上 Cloudflare 的自动 https,Traefik 中甚至连 SSL 证书都不再需要配置,Traefik 的自动配置 SSL 证书的能力也被浪费了。最近偶然看到 Traefik 升级了 3.0 版本,顺手升级了一下,因为正好在了解 Grafana 这一工具,顺便给自己的 Traefik 配置了一下,杀鸡用牛刀,使用 Prometheus 和 Grafana 实现一个服务监控界面,自娱自乐一下。
最终效果:
配置方式
我们通过 docker-compose 的方式安装 Traefik,在前期的文章中进行过详细说明,Traefik 3.0 和当时版本配置竟然差异不大,只需要在原来的 traefik.yaml
和dynamic.yaml
中添加以下内容即可:
core:
defaultRuleSyntax: v2
之后,其他配置无需变化,即可正常使用 Traefik 3.0。
我们今天的主题不是配置 Traefik,我们的主题是为 Traefik 增加监控能力,使用 Traefik + Prometheus + Grafana 进行组合,主要流程大致有以下几步:
- 配置 Traefik 并启用 Prometheus 和 Grafana 集成
- 设置 Prometheus 以抓取 Traefik 的指标
- 设置 Grafana 以可视化 Prometheus 数据
下面我们就详细说明各步如何配置:
配置 Traefik 并启用 Prometheus 和 Grafana 集成
在前期文章中,我们已经提到过,Traefik 的配置分为静态配置和动态配置,这里要处理的就是静态配置,静态配置可以通过在 docker-compose.yaml
文件通过 command 的方式增加,也可以在静态配置traefik.yaml
文件中配置,我们延续之前的选择,在traefik.yaml
文件中增加相关配置,配置示例如下:
core:
defaultRuleSyntax: v2
providers:
docker: {}
file:
directory: "/etc/traefik"
filename: "dynamic.yml"
watch: true
log:
level: DEBUG
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
metrics:
address: ":8082"
certificatesResolvers:
mytlschallenge:
acme:
email: "yourname@email.com"
storage: "/letsencrypt/acme.json"
tlsChallenge: {}
api:
dashboard: true
accessLog:
filePath: "/log/access.log"
format: json
bufferingSize: 100
metrics:
prometheus:
entryPoint: metrics
addEntryPointsLabels: true
addRoutersLabels: true
addServicesLabels: true
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
可以看到,主要是在原来的基础上,增加了 metrics 相关的字段,相关的配置参考网络配置,不详述,可自行查询了解。
回到docker-compose.yaml
所在目录中,修改其内容,增加 prometheus 和 grafana,示例如下:
version: '3'
services:
traefik:
image: traefik:v3.0.2
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
restart: always
ports:
# The HTTP and HTTPS port
- "80:80"
- "443:443"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
# The metrics port
- "8082:8082"
volumes:
- "./letsencrypt:/letsencrypt"
- "./config:/etc/traefik"
- "./log:/log"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
volumes:
grafana-storage:
主要是增加了 8082 端口映射以及 prometheus 和 grafana 相关容器。
设置 Prometheus 以抓取 Traefik 的指标
在同一个目录下,创建所需的promethus.yaml
文件:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'traefik'
static_configs:
- targets: ['traefik:8082']
之后通过docker-compose up -d
启动容器,不出意外的话会拉取镜像并启动。
我之前有容器正在运行,所以先通过docker-compose down
关闭相关服务,由于本次的配置文件中,将reverse-proxy
更名为了traefik
,会提示存在孤儿容器,按提示命令删除即可,如果有使用原容器网络的,会提示有活跃网络,需要去使用了 Traefik 的网络的容器中删除相关网络配置。
验证容器运行情况
打开浏览器,通过http://服务器IP:端口
来检查各服务的运行情况:
- 访问
http://服务器IP:8080
,进入 Traefik 的仪表板,确保 Traefik 正常运行 - 访问
http://服务器IP:9090
,进入 Prometheus 的 Web 界面。在“Status” -> “Targets” 页面,你应该能够看到 Traefik 的指标抓取目标,并且状态为“UP”。
- 打开浏览器,访问
http://服务器IP:3000
,进入 Grafana 的 Web 界面。使用默认的用户名admin
和密码admin
登录,确保 Grafana 正常运行。
设置 Grafana 以可视化 Prometheus 数据
首次登录后修改默认密码,之后需要配置数据源并配置界面模板,大致流程如下,此处不详述,较为简单:
- 通过顶部的搜索框,输入 Data Sources,找到数据源配置,点击“Add data source”按钮,选择“Prometheus”,将地址配置为
http://prometheus:9090
- 进入左侧的 Dashboard 仪表盘配置,从右上方按钮中找到 Import 导入,我们直接导入 ID 即可,可自行选择,我使用了这个界面,ID 为17346
- 之后可在设置中,自行将语言修改为中文,并将默认仪表盘设置为使用的仪表盘,这样打开后直接展示仪表盘。