การเก็บ 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 ได้เลยครับ