สำหรับนักพัฒนาหรือทุกคนที่เกี่ยวข้องกับการพัฒนา Software เมื่อเกิดปัญหาในระหว่าง Development phase หรือ Production phase ก็ดีเราจะสูญเสียเวลาในการ Investigate event ที่เกิดของ Application ซึ่งบางครั้งอาจจะเสียเวลาเป็นวันกว่าที่เราจะหา Root cause แต่ว่าเราสามารถแก้ไขปัญหานี้ได้ด้วยการใช้เครื่องมือ Monitor ทำให้เราไม่ต้องเสียเวลาไปกับปัญหาเหล่านี้ ปัจจุบันมีเครื่องมือมากมายที่ล้วนมีคุณสมบัติต่าง ๆ กันไป แต่วันนี้ที่ผมจะมานำเสนอคือ เครื่องมือที่ชื่อว่า Datadog
Datadog คือ หนึ่งในเครื่องมือการตรวจสอบ Application ของเราซึ่งรวบรวมเก็บข้อมูลทั้ง APM, Logs, Alert พร้อมทั้งยังสามารถเก็บข้อมูลจาก Frontend ทั้งการทำ Load times, Frontend errors และ Resource ของทุก User session ไว้ในที่เดียวนอกจากนั้นผู้ใช้งานยังสามารถสร้าง Dashboard ที่เหมาะสมกับ Use case ของผู้ใช้งานได้อีกด้วย
ในบทความนี้ เราจะลองมาดูการทำ Application Performance Monitoring (APM) บน AWS Elastic Beanstalk กัน ทั้งนี้ถ้าอยากดู Service ทั้งหมด แนะนำว่าควรจะติดตั้ง APM Tracing ไว้ในทุกที่ที่ Service นั้น ๆ มีการเรียกใช้งาน
“Elastic Beanstalk เป็นเครื่องมือช่วย Deploy Application โดยไม่ต้องกังวลเรื่อง Instance โดยผู้พัฒนามีหน้าที่แค่เขียน Application ขึ้นมาซึ่ง Elastic Beanstalk สามารถรองรับได้หลายภาษาไม่ว่าจะเป็น Javascript, Java, Python, Docker และอื่น ๆ”
ในฝั่งของ Datadog จะทำการติดตั้งตัว Datadog Agent ไว้ใน Elastic Beanstalk โดยการทำงานเบื้องต้นของ Datadog Agent จะไปทำการกวาดข้อมูลจาก Application มาเก็บไว้ใน Collector และมี Forwarder ส่งข้อมูลไปยัง SaaS ของ Datadog เอง
มาดูส่วนของการ Config ใน Code กัน โดย Stack ที่เราจะนำมาใช้ในการสาธิตบทความนี้จะเป็น React สำหรับ Frontend และ Express.js สำหรับ Backend และการ Deploy ใน Elastic Beanstalk จะใช้เป็นแบบ Single Container และใช้เป็น Docker Platform สามารถเข้าไปดูเพิ่มเติมได้ที่ Link นี้ เกริ่นมาประมาณนึงแล้วเรามาเริ่มขั้นตอนกันการติดตั้ง Datadog Agent กันดีกว่า ก่อนอื่นให้เราเข้าไปที่โปรเจกต์ที่เราอยากจะทำการติดตั้ง
1. สร้างโฟลเดอร์ชื่อ .ebextensions เพื่อเป็นการสร้างที่เก็บ extensions ให้กับ Beanstalk ของเรานั่นเอง สามารถดูรายละเอียดเพิ่มเติมได้ที่ Link
2. สร้างไฟล์ 99datadog-amazon-linux-2.config โดยสามารถดาวน์โหลดจากทางเว็บไซด์ Datadog ได้เลย
mkdir .ebextensions
cd .ebextensions
curl -o 99datadog-amazon-linux-2.config https://docs.datadoghq.com/config/99datadog-amazon-linux-2.config
3. ทำการแก้ไขไฟล์ 99datadog-amazon-linux-2.config
3.1 สร้าง API key ใน Datadog และ ทำการใส่ API key ในไฟล์ 99datadog-amazon-linux-2.config
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: DD_API_KEY
value:
3.2 ในส่วนของ “/configure_datadog_yaml.sh” ที่เป็น Content ภายใน Bash script ก็ทำการเพิ่มตามด้านล่างเพื่อทำการเปิด APM
files:
"/configure_datadog_yaml.sh":
mode: "000700"
owner: root
group: root
content: |
#!/bin/bash
sed 's/api_key:.*/api_key: '$DD_API_KEY'/' /etc/datadog-agent/datadog.yaml.example > /etc/datadog-agent/datadog.yaml
# Use the following command if you're in the EU. Replace datadoghq.eu with another region if in a different region.
# sed -i 's/datadoghq.com/datadoghq.eu/' /etc/datadog-agent/datadog.yaml
echo -e "process_config:\n enabled: \"true\"\n" >> /etc/datadog-agent/datadog.yaml
echo -e "apm_config:\n enabled: \"true\"\n" >> /etc/datadog-agent/datadog.yaml
echo -e " apm_non_local_traffic: \"true\"\n" >> /etc/datadog-agent/datadog.yaml
4. ทำการติดตั้ง dd-trace ลงใน Application สำหรับภาษาอื่น ๆ สามารถค้นหารายละเอียดเพิ่มเติมได้ที่ Link
npm install dd-trace
5. เพิ่มการ Trace ในไฟล์ server ได้เลย
require('dd-trace').init();
โดย Hostname default ของ Datadog Agent คือ 172.17.0.1 จากนั้นให้ทำการ Deploy Elastic Beanstalk
เมื่อทำการ Deploy ไปที่ Elastic Beanstalk แล้วเราจะลองเข้าไปที่เว็บไซด์ของ Datadog และกดในส่วนของ APM > Service Map จากนั้นทำการตั้งค่าเกณฑ์ของการ Monitor โดยเบื้องต้นทาง Datadog มีการแนะนำการตั้งค่าเช่น High error rate, Abnormal change, High average latency เมื่อตั้งค่าเสร็จเรียบร้อยแล้วจะเห็นภาพแต่ละ Service ดังภาพประกอบด้านล่าง
ซึ่งสามารถกดเข้าไปดูในแต่ละ Service ว่า Flow ของ service นั้น ๆ ทำงานอย่างไรและมีความผิดปกติส่วนไหนของ Service
เมื่อเกิดเหตุการณ์ไม่ปกติทางระบบ Datadog จะขึ้นเป็นสีแดงตามที่เราตั้งค่าเกณฑ์การ Monitor ไว้
ทั้งนี้สำหรับข้อมูลเชิงลึกระดับ Code ว่า Function ไหนไปเรียก Function ไหนต่อ เราสามารถกดเข้าไปดูได้ว่าจากขั้นตอนไหนที่ทำให้ระบบเกิดปัญหา
เช่นกรณีตัวอย่างทางภาพด้านบนที่ Service เกิดปัญหาเราจะสามารถดูขั้นตอนการไหลของข้อมูลได้ตั้งแต่ขั้นตอนเริ่มต้นไปจนถึงขั้นตอนสุดท้าย เมื่อเราดูจากภาพประกอบแล้วจะเห็นได้ว่าแผนภาพสีเขียวอ่อนกำลังมีปัญหาอยู่จากการที่ระบบทำการแสดงขอบสีแดงให้กับผู้ตรวจสอบ
“ระหว่างที่เราติดตั้งเราควรจะเช็คว่าข้อมูลได้ถูกส่งไปหา Datadog ระยะเวลาในการส่งมีความหน่วงมากน้อยขนาดไหน, ข้อมูลที่ส่งอยู่ตลอดยังส่งอยู่ไหมและหากมีการส่งในปริมาณมากข้อมูลได้รับจะครบถ้วนหรือไม่ หากเกิดสิ่งที่ไม่คาดฝัน Datadog จะแจ้งเตือนเราหรือไม่ เราควรจะตรวจสอบเคสที่โค้ดของเรามีการผิดพลาดด้วย”
จากตัวอย่างที่กล่าวมาจะเห็นว่าในปัจจุบันเครื่องมือต่าง ๆ สามารถช่วยให้เรามองเห็นที่ปัญหาที่เกิดขึ้นว่าสาเหตุเกิดมาจากอะไร ทำให้เราประหยัดเวลาในการ Investigate ถึงสาเหตุของปัญหาและยังช่วยให้นักพัฒนาสามารถมีเวลาไปพัฒนาระบบอื่น ๆ ได้ด้วย ซึ่งช่วยเพิ่ม Value ให้กับ Product และ องค์กรได้อีกด้วย ทั้งนี้ตัว Datadog ยังสามารถรวบรวมทั้ง Logs, Realtime User Monitoring (RUM) เพื่อความสมบูรณ์ของข้อมูล Monitoring ผู้ใช้งานควรเพิ่มเติมส่วนอื่นประกอบกันไปด้วย ซึ่งวิธีการใช้งานในส่วนอื่นจะมาแชร์ประสบการณ์ในโอกาสต่อไป