การเก็บ Log ของ Kong API Gateway ด้วย HTTP Log Plugin ร่วมกับ Elasticsearch โดยใช้ domecloud/kong-http-log-server เป็น HTTP log server
ถ้าใครยังไม่เคยใช้ Kong API Gateway ให้อ่านตรงนี้ก่อน "Kong API Gateway ฉบับรวบรัด"
Kong Log Plugin มีตัวเลือกให้ใช้หลายตัว เข่น
- File Log
- HTTP Log
- TCP Log
- UDP Log
- Syslog
- etc. more https://docs.konghq.com/hub/
ในบางกรณี เราไม่สามารถใช้ Log Plugin ใดๆได้ ยกเว้น HTTP Log Plugin อาจจะเพราะว่า Network / Firewall นั้น อนุญาตให้ใช้งานได้แค่ HTTP Protocol เท่านั้น ไม่สามารถใช้ TCP/UDP ได้
domecloud/kong-http-log-server
จะถูกสร้างขึ้นมา เพื่อแก้ปัญหาของการเก็บ Log ของ Kong API Gateway ที่ใช้ HTTP Log Plugin ซึ่งเขียนด้วย Golang ถูกออกแบบมาให้รับ Log ผ่าน HTTP และเก็บ Log ลง Log Backend ได้หลายตัว เช่น Elasticsearch, Loki เป็นต้น
เริ่มกันลองใช้กันเลยดีกว่า clone repo มาก่อน
git clone https://github.com/domecloud/kong-http-log-server
cd kong-http-log-server
จากนั้น แก้ไขไฟล์ .env
HOST=0.0.0.0
PORT=8080
ES_HOST=elasticsearch
ES_PORT=9200
INDEX_PATTERN=kong-test-2006-01-02
HOST
คือ IP Address ที่จะให้ตัวkong-http-log-server
bindingPORT
คือ PORT ที่จะให้kong-http-log-server
listenES_HOST
คือ Elasticsearch host เนื่องจากในตัวอย่าง ใช้ผ่าน Docker + docker-compose เลยใช้ชื่อ service ของ elasticsearch ได้ES_PORT
คือ HTTP Port ของ ElasticsearchINDEX_PATTERN
คือ index ที่จะเก็บลง Elasticsearch โดยใช้ Golang date-time format (แก้เฉพาะ kong-test ส่วนของ 2006-01-02 ให้คงไว้)
หลังจากแก้ไฟล์ .env
และเซฟไฟล์แล้ว เริ่ม start service โดยเริ่มจาก
- elasticsearch
- kibana
- kong-http-log-server
- kong-database
- migrations (kong-migration)
- kong
Deploy Services
docker-compose up -d elasticsearch kibana
docker-compose up -d kong-database
docker-compose up mogrations
docker-compose up -d kong
docker-compose up -d kong-http-log-server
หลังจากที่ start services ทั้งหมดแล้ว ควรมี container รันอยู่ทั้งหมดดังนี้
เพิ่ม Kong Service และ Route
# สร้าง Service
curl http://127.0.0.1:8001/services \
-d name=httpbin \
-d url=http://httpbin.org
# สร้าง Route
curl http://127.0.0.1:8001/services/httpbin/routes \
-d name=httpbin \
-d paths[]=/
อาจจะใช้ Konga ก็ได้
หลังจากที่ได้ Service และ Route แล้วลองเข้าใช้ผ่าน http://127.0.0./
เพิ่ม HTTP Log Plugin ให้กับ Kong API Gateway
curl http://127.0.0.1:8001/plugins \
-d name=http-log \
-d config.http_endpoint=http://kong-http-log-server:8080/
หลังจากเพิ่ม HTTP Log plugin แล้ว การจะทำให้เกิด Log ต้องมีการเรียกใช้งาน Web หรือ API ผ่าน Kong
ตั้งค่า Kibana
เปิดเว็บเบราเซอร์ไปที่ http://127.0.0.1:5601
เลือก Explore on my own แล้วไปที่ Stack Management
Index pattern > Create index pattern > kong-test-*
Next step > Time Filter field name > @timestamp
> Create index pattern
เป็นการเสร็จสิ้น
ไปที่เมนู Discover
จากได้หน้า Dashboard สำหรับการดู Log ของ การเรียกใช้ API ผ่าน Kong API gateway
จบการใช้งาน kong-http-log-server
สำหรับใครที่เอา kong-http-log-server ไปใช้ แล้วต้องการ Log Backend แบบอื่นๆ สามารถส่ง Pull Request มาได้ หรือถ้าพบปัญหาการใช้งาน แจ้งปัญหาผ่าน GitHub issuse ได้เลยครับ