API 后端

Træfik 可以通过 RESTful api 进行配置. 想要开启它:

  1. [web]
  2. address = ":8080"
  3. # SSL 证书与密钥文件配置
  4. #
  5. # 可选
  6. #
  7. # CertFile = "traefik.crt"
  8. # KeyFile = "traefik.key"
  9. #
  10. # 将REST API设置为只读模式
  11. #
  12. # 可选
  13. # ReadOnly = false
  14. #
  15. # 开启更多详细统计信息
  16. # [web.statistics]
  17. # RecentErrors = 10
  18. #
  19. # 为Traefik启用向Prometheus提供内部维度
  20. # [web.metrics.prometheus]
  21. # Buckets=[0.1,0.3,1.2,5]
  22. #
  23. # 在WebUI中启用基础认证(basic auth)
  24. # 使用2组用户名/密码: test:test 与 test2:test2
  25. # 密码可以以MD5、SHA1或BCrypt方式加密:你可以使用htpasswd来生成这些用户名密码。
  26. # [web.auth.basic]
  27. # users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
  28. # 为WebUI开启摘要认证(digest auth)
  29. # 使用2组用户名/域/密码: test:traefik:test 与 test2:traefik:test2
  30. # 你可以使用htdigest来生成这些用户名/域/密码
  31. # [web.auth.digest]
  32. # users = ["test:traefik:a2688e031edb4be6a3797f3882655c05 ", "test2:traefik:518845800f9e2bfb1f1f740ec24f074e"]
  • /: 为Træfik提供一个简单的HTML前端页面
    Web UI ProvidersWeb UI Health

  • /ping: GET 为Træfik提供一个简单的查看进程活跃度的查询端口。

  1. $ curl -sv "http://localhost:8080/ping"
  2. * Trying ::1...
  3. * Connected to localhost (::1) port 8080 (#0)
  4. > GET /ping HTTP/1.1
  5. > Host: localhost:8080
  6. > User-Agent: curl/7.43.0
  7. > Accept: */*
  8. >
  9. < HTTP/1.1 200 OK
  10. < Date: Thu, 25 Aug 2016 01:35:36 GMT
  11. < Content-Length: 2
  12. < Content-Type: text/plain; charset=utf-8
  13. <
  14. * Connection #0 to host localhost left intact
  15. OK
  • /health: GET json metrics
  1. $ curl -s "http://localhost:8080/health" | jq .
  2. {
  3. // Træfɪk 进程ID(PID)
  4. "pid": 2458,
  5. // Træfɪk 服务器运行时间(格式化的时间)
  6. "uptime": "39m6.885931127s",
  7. // Træfɪk 服务器运行时间(以秒为单位)
  8. "uptime_sec": 2346.885931127,
  9. // 当前服务器日期
  10. "time": "2015-10-07 18:32:24.362238909 +0200 CEST",
  11. // 当前服务器时间(以秒为单位)
  12. "unixtime": 1444235544,
  13. // HTTP请求返回状态码实时统计
  14. "status_code_count": {
  15. "502": 1
  16. },
  17. // HTTP请求返回状态码实时统计(自Træfɪk启动以来)
  18. "total_status_code_count": {
  19. "200": 7,
  20. "404": 21,
  21. "502": 13
  22. },
  23. // 统计HTTP请求
  24. "count": 1,
  25. // 统计HTTP请求总数
  26. "total_count": 41,
  27. // 统计所有响应时间之和(格式化的时间)
  28. "total_response_time": "35.456865605s",
  29. // 统计所有响应时间之和(以秒为单位)
  30. "total_response_time_sec": 35.456865605,
  31. // 平均响应时间(格式化的时间)
  32. "average_response_time": "864.8016ms",
  33. // 平均响应时间(以秒为单位)
  34. "average_response_time_sec": 0.8648016000000001,
  35. // 请求统计 [需要设置 --web.statistics ]
  36. // 近10个响应状态码为 4xx 与 5xx 的请求
  37. "recent_errors": [
  38. {
  39. // 状态码
  40. "status_code": 500,
  41. // 状态码秒数
  42. "status": "Internal Server Error",
  43. // HTTP请求方法
  44. "method": "GET",
  45. // 请求域名
  46. "host": "localhost",
  47. // 请求路径
  48. "path": "/path",
  49. // RFC 3339 格式化的 日期/时间
  50. "time": "2016-10-21T16:59:15.418495872-07:00"
  51. }
  52. ]
  53. }
  • /api: GET 所有提供者的配置文件
  1. $ curl -s "http://localhost:8080/api" | jq .
  2. {
  3. "file": {
  4. "frontends": {
  5. "frontend2": {
  6. "routes": {
  7. "test_2": {
  8. "rule": "Path:/test"
  9. }
  10. },
  11. "backend": "backend1"
  12. },
  13. "frontend1": {
  14. "routes": {
  15. "test_1": {
  16. "rule": "Host:test.localhost"
  17. }
  18. },
  19. "backend": "backend2"
  20. }
  21. },
  22. "backends": {
  23. "backend2": {
  24. "loadBalancer": {
  25. "method": "drr"
  26. },
  27. "servers": {
  28. "server2": {
  29. "weight": 2,
  30. "URL": "http://172.17.0.5:80"
  31. },
  32. "server1": {
  33. "weight": 1,
  34. "url": "http://172.17.0.4:80"
  35. }
  36. }
  37. },
  38. "backend1": {
  39. "loadBalancer": {
  40. "method": "wrr"
  41. },
  42. "circuitBreaker": {
  43. "expression": "NetworkErrorRatio() > 0.5"
  44. },
  45. "servers": {
  46. "server2": {
  47. "weight": 1,
  48. "url": "http://172.17.0.3:80"
  49. },
  50. "server1": {
  51. "weight": 10,
  52. "url": "http://172.17.0.2:80"
  53. }
  54. }
  55. }
  56. }
  57. }
  58. }
  • /api/providers: GET 提供者
  • /api/providers/{provider}: GET or PUT 提供者
  • /api/providers/{provider}/backends: GET 后端列表
  • /api/providers/{provider}/backends/{backend}: GET 一个后端
  • /api/providers/{provider}/backends/{backend}/servers: GET 后端的服务器列表
  • /api/providers/{provider}/backends/{backend}/servers/{server}: GET 后端的一个服务器
  • /api/providers/{provider}/frontends: GET 前端列表
  • /api/providers/{provider}/frontends/{frontend}: GET 一个前端
  • /api/providers/{provider}/frontends/{frontend}/routes: GET 前端的路由列表
  • /api/providers/{provider}/frontends/{frontend}/routes/{route}: GET 前端的一个路由

  • /metrics: 你可以为Traefik开启向其他不同的监控系统输出的内部维度(当前只支持Prometheus)。

  1. $ traefik --web.metrics.prometheus --web.metrics.prometheus.buckets="0.1,0.3,1.2,5"