現(xiàn)在的項目有個需求晴叨,需要分析每一條 api 的請求時間锰蓬,目前看到一套比較好的方案是 kong + Prometheus + Grafana
邻储,之前是聽說過 kong 擴展性比較好赋咽,但一直沒有實踐的機會,借此機會來玩一玩核武器吨娜。
我熟悉的方式還是 docker脓匿,還是用它從頭搭建這一套系統(tǒng)。
立個 flag宦赠,今年必須學會 kubernetes陪毡。
參考了多篇文章各取所長,理順了各個軟件之間關系之后勾扭,發(fā)現(xiàn)網上的這些方法都過于復雜毡琉,很多文章也是相互拼湊,容器化不像容器化妙色,其實 kong桅滋、Prometheus、Grafana 之間的兼容性已經足夠好了身辨,我在操作過程中確實也踩了一些坑丐谋,但是我已經可以將他們徹底容器化部署了。
運行 kong
創(chuàng)建子網
docker network create kong-net
運行數(shù)據庫
創(chuàng)建數(shù)據庫
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
數(shù)據庫遷移
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 即可贞远。
小節(jié)一下
api 經過 kong,會留下日志许布,prometheus 通過 kong:8001
端點標準化采集的日志兴革,
grafana 通過 prometheus 得到標準后的日志進行展示。