现在的项目有个需求,需要分析每一条 api 的请求时间,目前看到一套比较好的方案是 kong + Prometheus + Grafana
,之前是听说过 kong 扩展性比较好,但一直没有实践的机会,借此机会来玩一玩核武器。
我熟悉的方式还是 docker,还是用它从头搭建这一套系统。
立个 flag,今年必须学会 kubernetes。
参考了多篇文章各取所长,理顺了各个软件之间关系之后,发现网上的这些方法都过于复杂,很多文章也是相互拼凑,容器化不像容器化,其实 kong、Prometheus、Grafana 之间的兼容性已经足够好了,我在操作过程中确实也踩了一些坑,但是我已经可以将他们彻底容器化部署了。
运行 kong
创建子网
1 | docker network create kong-net |
运行数据库
创建数据库
1 | docker run -d --name kong-database \ |
数据库迁移
1 | docker run --rm \ |
运行 kong
1 | docker run -d --name kong \ |
运行 kong gui
运行 kong-dashboard
建议直接跳过,dashboard 可以运行,但是前端尽是报错,github上面的issue也没人处理,应该是不维护了。
1 | docker run --network=kong-net \ |
运行 konga
1 | docker run -p 8080:1337 \ |
运行 prometheus
1 | docker run --name prometheus \ |
prometheus.yml 文件配置如下
1 | global: |
核心点就是上面的 targets,相信很多分析类的文章都没有提到。
运行 grafana
1 | docker run -d --network=kong-net --name=grafana -p 3000:3000 grafana/grafana:6.6.2 |
运行之后,直接添加一个 dashboard 即可。
小节一下
api 经过 kong,会留下日志,prometheus 通过 kong:8001
端点标准化采集的日志,
grafana 通过 prometheus 得到标准后的日志进行展示。