手摸手教你搭建 api 网关

现在的项目有个需求,需要分析每一条 api 的请求时间,目前看到一套比较好的方案是 kong + Prometheus + Grafana,之前是听说过 kong 扩展性比较好,但一直没有实践的机会,借此机会来玩一玩核武器。

我熟悉的方式还是 docker,还是用它从头搭建这一套系统。

立个 flag,今年必须学会 kubernetes

参考了多篇文章各取所长,理顺了各个软件之间关系之后,发现网上的这些方法都过于复杂,很多文章也是相互拼凑,容器化不像容器化,其实 kong、Prometheus、Grafana 之间的兼容性已经足够好了,我在操作过程中确实也踩了一些坑,但是我已经可以将他们彻底容器化部署了。

运行 kong

创建子网

docker network create kong-net

运行数据库

创建数据库

docker run -d --name kong-database \
               --network=kong-net \
               -p 5432:5432 \
               -e "POSTGRES_USER=kong" \
               -e "POSTGRES_DB=kong" \
               -e "POSTGRES_PASSWORD=kong" \
               postgres:9.6

数据库迁移

docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_PASSWORD=kong" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     kong:1.5 kong migrations bootstrap

运行 kong

docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_PASSWORD=kong" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
     -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
     -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 8001:8001 \
     -p 8444:8444 \
     kong:1.5

运行 kong gui

~运行 kong-dashboard~

建议直接跳过,dashboard 可以运行,但是前端尽是报错,github上面的issue也没人处理,应该是不维护了。

docker run  --network=kong-net \
            --name kong-dashboard \
            -p 8080:8080 \
            -d pgbi/kong-dashboard \
            start --kong-url http://kong:8001 \
            --basic-auth user1=password1 

运行 konga

docker run -p 8080:1337 \
           --network kong-net \
           --name konga \
           -e "NODE_ENV=production" \
           -d pantsel/konga:0.14.7

运行 prometheus

docker run --name prometheus \
--network=kong-net \
-p 9090:9090 \
 -v /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
 -d prom/prometheus:v2.16.0

prometheus.yml 文件配置如下

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['kong:8001']

核心点就是上面的 targets,相信很多分析类的文章都没有提到。

运行 grafana

docker run -d --network=kong-net --name=grafana -p 3000:3000 grafana/grafana:6.6.2

运行之后,直接添加一个 dashboard 即可。

小节一下

api 经过 kong,会留下日志,prometheus 通过 kong:8001 端点标准化采集的日志,
grafana 通过 prometheus 得到标准后的日志进行展示。

参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Kong 是 Mashape 开源的高性能高可用 API 网关和 API 管理服务层。它基于 OpenResty ...
    meng_philip123阅读 9,194评论 0 6
  • 文章目的: 1、向没听过或者刚听过但是还对这个监控系统没有任何概念的开发者介绍Prometheus的应用场景。2、...
    whaike阅读 39,774评论 15 59
  • 一、背景 Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了集群化部署运行、自...
    JFrog阅读 5,299评论 0 1
  • 于是这里的柱子上有一首诗: 我穿墙而过,我消失了。 房间空着,光还很亮,没有异常。 我的消失是完美的,带着无人懂得...
    云雀儿阅读 220评论 2 1
  • 昨晚2点多钟二期和三期配电室同时跳闸,还有一期车库的两个区域和公寓楼过道也发生了跳闸。以前(本年元月1号早8点左右...
    xusiman阅读 118评论 0 0