Traefik监控系统搭建
背景
- 前边的文章Traefik学习中已经介绍了Traefik的使用,但是如果没有一个可视化的Traefik访问状态与Acces Log的Dashboard界面的话,对于一个网关来说实际上是不完整的,这篇文章就来介绍使用Prometheus + Grafana + Promtail+ Loki构建Traefik的监控中心
- Prometheus是云原生时代事实上的系统(服务)状态监测标准,通过基于HTTP的pull方式采集时序数据,可以通过服务发现或者静态配置去获取要采集的目标服务器,支持单主节点工作,支持多种可视化图表及仪表盘–在本文中Prometheus用来收集Traefik Metrics数据
- Grafana是一个开源的度量分析与可视化套件。 纯Javascript 开发的前端工具,通过访问库(如InfluxDB、Prometheus),展示自定义报表、显示图表等。Grafana的UI更加灵活,有丰富的插件,功能强大–在本文中Grafana用来展示来自Prometheus和Loki的数据
- Promtail是一个日志收集的代理,它会将本地日志的内容发送到一个Loki实例,它通常部署到需要监视应用程序的每台机器/容器上。Promtail主要是用来发现目标、将标签附加到日志流以及将日志推送到Loki–本文中Promtail用来收集Traefik Access Log
- Grafana Loki是一组可以组成一个功能齐全的日志堆栈组件,与其它日志系统不同的是,Loki只建立日志标签的索引而不索引原始日志消息,而是为日志数据设置一组标签,这意味着Loki的运营成本更低,效率也能提高几个数量级,一句话形容下Loki就是
like Prometheus, but for logs
–本文中Loki
用来整合来自Promtail的日志数据
Traefik配置
-
关于Traefik的配置,最关键的就是开启Metrics与Access Log的配置,静态配置文件
traefik.toml
如下[log] level = "WARN" format = "common" filePath = "/logs/traefik.log" [accessLog] filePath = "/logs/access.log" bufferingSize = 100 format = "json" [accessLog.fields.names] "StartUTC" = "drop" [accessLog.filters] retryAttempts = true minDuration = "10ms"
- 这里只展示日志相关的关键配置
StartUTC
的设置是为了设置日志使用的时区时间,配合TZ
环境变量使用
-
traefik部署的Docker Compose配置文件
traefik.yaml
如下:version: '3' services: reverse-proxy: image: traefik restart: always environment: - TZ=Asia/Shanghai ports: - "80:80" - "443:443" networks: - traefik volumes: - ./traefik.toml:/etc/traefik/traefik.toml - /var/run/docker.sock:/var/run/docker.sock - ./config/:/etc/traefik/config/:ro - ./acme.json:/letsencrypt/acme.json - ./logs:/logs/:rw container_name: traefik # 网关健康检查 healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:8080/ping || exit 1"] interval: 3s timeout: 5s # 创建外部网卡 docker network create traefik networks: traefik: external