Kong HTTP Log

API Gateway Jul 20, 2020

การเก็บ 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 มีตัวเลือกให้ใช้หลายตัว เข่น

ในบางกรณี เราไม่สามารถใช้ Log Plugin ใดๆได้ ยกเว้น HTTP Log Plugin อาจจะเพราะว่า Network / Firewall นั้น อนุญาตให้ใช้งานได้แค่ HTTP Protocol เท่านั้น ไม่สามารถใช้ TCP/UDP ได้

kong-http-log-server-diagram

domecloud/kong-http-log-server จะถูกสร้างขึ้นมา เพื่อแก้ปัญหาของการเก็บ Log ของ Kong API Gateway ที่ใช้ HTTP Log Plugin ซึ่งเขียนด้วย Golang ถูกออกแบบมาให้รับ Log ผ่าน HTTP และเก็บ Log ลง Log Backend ได้หลายตัว เช่น Elasticsearch, Loki เป็นต้น

domecloud/kong-http-log-server
HTTP log server for Kong http-log plugin for Elasticsearch and more - domecloud/kong-http-log-server

เริ่มกันลองใช้กันเลยดีกว่า 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 binding
  • PORT คือ PORT ที่จะให้ kong-http-log-server listen
  • ES_HOST คือ Elasticsearch host เนื่องจากในตัวอย่าง ใช้ผ่าน Docker + docker-compose เลยใช้ชื่อ service ของ elasticsearch ได้
  • ES_PORT คือ HTTP Port ของ Elasticsearch
  • INDEX_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 รันอยู่ทั้งหมดดังนี้

docker-compose ps

เพิ่ม 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

discover kibana

จบการใช้งาน kong-http-log-server

สิ่งที่ต้องการเพิ่มเติมคือ

สำหรับใครที่เอา kong-http-log-server ไปใช้ แล้วต้องการ Log Backend แบบอื่นๆ สามารถส่ง Pull Request มาได้ หรือถ้าพบปัญหาการใช้งาน แจ้งปัญหาผ่าน GitHub issuse ได้เลยครับ

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.