BASH
docker pull 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 -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong BASH
docker exec -it kong kong migrations bootstrap BASH
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=weather-service' \
--data 'url=http://weather-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/weather-service/routes \
--data 'paths[]=/weather' BASH
curl -i http://localhost:8000/weather BASH
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=sensor-service' \
--data 'url=http://sensor-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/sensor-service/routes \
--data 'paths[]=/sensor'
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=notification-service' \
--data 'url=http://notification-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/notification-service/routes \
--data 'paths[]=/notification'
GET, POST, PUT, DELETE).BASH
curl -i -X POST \
--url http://localhost:8001/upstreams/ \
--data 'name=weather-upstream'
BASH
curl -i -X POST \
--url http://localhost:8001/upstreams/weather-upstream/targets \
--data 'target=weather-service1:8000' \
--data 'weight=100'
curl -i -X POST \
--url http://localhost:8001/upstreams/weather-upstream/targets \
--data 'target=weather-service2:8000' \
--data 'weight=100'
BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-service/plugins/ \
--data 'name=oauth2' \
--data 'config.scopes=email' \
--data 'config.mandatory_scope=true' \
--data 'config.enable_authorization_code=true'
BASH
curl -i -X POST \
--url http://localhost:8001/consumers/{consumer}/oauth2/ \
--data 'name=weather-app' \
--data 'client_id=weather-client-id' \
--data 'client_secret=weather-client-secret' \
--data 'redirect_uris=http://localhost/callback'
BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-service/plugins/ \
--data 'name=jwt'
BASH
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data 'username=weather-consumer'
curl -i -X POST \
--url http://localhost:8001/consumers/weather-consumer/jwt/ \
--data 'key=weather-key' \
--data 'algorithm=HS256'
BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-service/plugins/ \
--data 'name=rate-limiting' \
--data 'config.minute=10' \
--data 'config.hour=500'
| Категория метрик | Виды метрик |
|---|---|
| 1. Метрики производительности | 1. Запросы в секунду (Requests per Second, RPS) Количество запросов, обрабатываемых API Gateway в секунду. Эта метрика помогает определить нагрузку на систему и выявить пиковые моменты активности. 2. Время отклика (Response Time) Среднее время, затрачиваемое на обработку запросов. Важно отслеживать как среднее время отклика, так и 95-й и 99-й процентили для выявления долгих запросов. 3. Время до первого байта (Time to First Byte, TTFB) Время, прошедшее от отправки запроса до получения первого байта ответа. Высокий TTFB может указывать на проблемы с сервером или сетью. |
| 2. Метрики ошибок | 1. Количество ошибок (Error Rate) Процент запросов, завершившихся ошибками (например, HTTP 4xx и 5xx). Высокий уровень ошибок может указывать на проблемы с API или инфраструктурой. 2. Виды ошибок (Error Types) Распределение ошибок по типам (4xx — ошибки клиента, 5xx — ошибки сервера). Это помогает определить источник проблемы. 3. Ошибки авторизации и аутентификации (Authentication and Authorization Failures) Количество запросов, не прошедших проверку аутентификации или авторизации. Высокий уровень таких ошибок может указывать на проблемы с безопасностью. |
| 3. Метрики безопасности | 1. Неудачные попытки входа (Failed Login Attempts) Количество неудачных попыток входа может свидетельствовать о возможных атаках. 2. IP-адреса с наибольшим количеством запросов (Top Requesting IPs) IP-адреса, с которых поступает наибольшее количество запросов. Это помогает выявить потенциальные DDoS-атаки. 3. Аномалии в трафике (Traffic Anomalies) Внезапные изменения в объёме или характере трафика могут указывать на атаки или другие проблемы безопасности. |
| 4. Метрики использования ресурсов | 1. Память (Memory Usage) Объём памяти, используемой API Gateway. Высокое потребление памяти может привести к снижению производительности или сбоям. 2. Использование сети (Network Usage) Объём входящего и исходящего трафика через API Gateway. Помогает определить нагрузку на сеть и выявить проблемы с пропускной способностью. |
| 5. Метрики отказоустойчивости | 1. Время безотказной работы (Uptime) Время, в течение которого API Gateway остаётся доступным и функционирующим. Помогает оценить надёжность системы. 2. Частота отказов (Failure Frequency) Количество отказов API Gateway за определённый период. Высокая частота отказов указывает на проблемы с надёжностью. |
| 6. Метрики производительности кэша | 1. Процент попаданий в кэш (Cache Hit Rate) Процент запросов, которые обрабатываются из кэша. Высокий процент попаданий в кэш улучшает производительность и снижает нагрузку на сервер. 2. Процент промахов в кэше (Cache Miss Rate) Процент запросов, которые не были найдены в кэше и потребовали обращения к исходному серверу. |
BASH
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=weather-data-service' \
--data 'url=http://weather-data-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/routes \
--data 'paths[]=/weather-data' BASH
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=notification-service' \
--data 'url=http://notification-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/notification-service/routes \
--data 'paths[]=/notifications' BASH
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=analytics-service' \
--data 'url=http://analytics-service:8000'
curl -i -X POST \
--url http://localhost:8001/services/analytics-service/routes \
--data 'paths[]=/analytics' YAML
services:
- name: weather-data-service
url: http://weather-data-service:8000
routes:
- paths:
- /weather-data
- name: notification-service
url: http://notification-service:8000
routes:
- paths:
- /notifications
- name: analytics-service
url: http://analytics-service:8000
routes:
- paths:
- /analytics BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/plugins/ \
--data 'name=jwt'
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data 'username=weather-consumer'
curl -i -X POST \
--url http://localhost:8001/consumers/weather-consumer/jwt/ \
--data 'key=weather-key' \
--data 'algorithm=HS256' BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/plugins/ \
--data 'name=acl' \
--data 'config.whitelist=weather-admin'
curl -i -X POST \
--url http://localhost:8001/consumers/weather-consumer/acls \
--data 'group=weather-admin' BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/plugins/ \
--data 'name=ssl' \
--data 'config.cert=/path/to/cert.pem' \
--data 'config.key=/path/to/key.pem' BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/plugins/ \
--data 'name=rate-limiting' \
--data 'config.minute=100' \
--data 'config.hour=1000' BASH
curl -i -X POST \
--url http://localhost:8001/services/weather-data-service/plugins/ \
--data 'name=ip-restriction' \
--data 'config.whitelist=192.168.1.0/24'