ข้ามไปยังเนื้อหา

Datadog คืออะไร

Datadog คือ SaaS backend เดียวที่ Agent ตัวเบา ๆ (บวกโค้ดที่ instrument แล้ว) ป้อน tagged telemetry เข้าไป และทุก product ที่เห็นใน UI — Infrastructure Monitoring, Log Management, APM, Monitors/SLOs, Software Catalog — จริง ๆ แล้วคือมุมมองที่ต่างกันของ data stream เดียวกันนั้นเอง

ทีมส่วนใหญ่เจอ Datadog ทีละ product — บางคนติดตั้ง Agent เพื่อเก็บ host metric บางคนเปิด APM บางคนเริ่มส่ง log เข้าไป ทำให้เข้าใจง่าย ๆ ว่านี่คือเครื่องมือแยกกันที่บังเอิญใช้ login เดียวกัน แต่จริง ๆ ไม่ใช่ ข้างใต้มีสิ่งเดียวที่ส่งเข้ามาที่ backend ของ Datadog นั่นคือ telemetry ที่มี tag ติดอยู่ metric, log, trace และ process snapshot คือ telemetry รูปแบบต่างกัน แต่ทั้งหมดใช้ tagging model เดียวกัน, organization เดียวกัน และ billing account เดียวกัน

backend เดียวนั้นคือสิ่งที่ขับเคลื่อน

  • Infrastructure Monitoring — metric ของ host กับ container, Host Map, dashboard ระดับ resource
  • Log Management — การเก็บ, pipeline ประมวลผล, การ index และการค้นหา log event
  • APM (Application Performance Monitoring) — distributed trace, service map, มุมมอง latency กับ error rate
  • Monitors & SLOs — กฎ alert กับการติดตาม error budget ที่ประเมินจากข้อมูลด้านบนทั้งหมด
  • Software Catalog — ไดเรกทอรีของ service ที่ผูก ownership metadata กลับไปหา metric, log และ trace เดียวกัน

ไม่มีตัวไหนเป็นเครื่องมือแยกที่มี storage silo ของตัวเอง ทั้งหมดคือ view เหตุผลที่เรื่องนี้สำคัญในทางปฏิบัติ — เมื่อคุณปรับ tagging ให้ดีขึ้นครั้งเดียว (บทที่ 3 ของ module นี้ลงลึกเรื่องนี้) ทุก view เหล่านี้ดีขึ้นพร้อมกัน คุณไม่ได้ตั้งค่าห้า product แยกกัน คุณตั้งค่า data model เดียว

Agent คือซอฟต์แวร์ชิ้นเล็ก ๆ ที่คุณรันอยู่ข้าง infrastructure ของคุณ — บน host, เป็น container หรือเป็น Kubernetes DaemonSet หน้าที่ของตัวเองแคบมาก คือเก็บข้อมูลในเครื่องแล้วส่งเข้า Datadog backend ผ่าน HTTPS ไม่ได้ render dashboard, ไม่ได้ประเมิน monitor และไม่ได้เก็บ history — ทั้งหมดนั้นอยู่ใน Datadog SaaS backend นั่นคือเหตุผลที่ Agent เองยังคงเบาและทิ้งแล้วสร้างใหม่ได้ง่าย

flowchart LR
    Host["Host / Container"] -->|metrics, checks| Agent
    App["Instrumented app"] -->|traces| Agent
    Files["Log files"] -->|logs| Agent
    Agent -->|HTTPS intake| Backend["Datadog Backend (one site)"]
    Backend --> Infra["Infrastructure Monitoring"]
    Backend --> Logs["Log Management"]
    Backend --> APM["APM"]
    Backend --> Mon["Monitors / SLOs"]
    Backend --> Cat["Software Catalog"]
Where telemetry comes from

organization ของ Datadog ไม่ได้ลอยอยู่ทั่วอินเทอร์เน็ต — แต่อยู่ใน site เดียว (คำที่ Datadog ใช้เรียก region) เช่น US1, US3, US5, EU1 หรือ AP1 site ที่คุณอยู่คือตัวกำหนด hostname ที่ Agent กับ API call ของคุณต้องใช้ — เช่น org บน US1 คุยกับ api.datadoghq.com ส่วน org บน EU1 คุยกับ api.datadoghq.eu ถ้าตั้งค่า Agent ให้ชี้ไปที่ intake ของ site ผิด จะ authenticate กับ backend คนละตัวไปเลย — นี่คือความผิดพลาดวันแรกที่พบบ่อยที่สุด ควรเช็ค site ของตัวเองให้ชัดเจนแทนที่จะเดาเอา

# datadog.yaml (Agent main config) — site must match your org
api_key: "<DD_API_KEY>"
site: "datadoghq.eu" # e.g. datadoghq.com (US1), datadoghq.eu (EU1), us3.datadoghq.com, ap1.datadoghq.com

credential สองแบบนี้ถูกสับสนบ่อยมากเพราะทั้งคู่ก็แค่ string ที่เอาไปแปะที่ไหนสักที่ แต่อนุญาตให้ทำคนละอย่างกันโดยสิ้นเชิง

  • API key อนุญาตให้ ส่งข้อมูลเข้ามา — คือสิ่งที่ Agent ใส่ใน config เพื่อส่ง metric, log และ trace เข้า Datadog โดย key นี้ scope อยู่ที่ organization ไม่ได้ผูกกับคนใดคนหนึ่ง
  • Application key อนุญาตให้ ทำตัวเป็น user — key นี้ผูกกับ permission ของ user คนหนึ่งโดยเฉพาะ และใช้เรียก read/management API ของ Datadog (query metric, สร้าง dashboard, จัดการ monitor ผ่าน API หรือ Terraform) ถ้า user คนนั้นถูก deactivate หรือ permission ถูกถอด สิ่งที่ใช้ Application key ของเขาก็เสีย access นั้นไปด้วย

กฎง่าย ๆ — ถ้ากำลังตั้งค่าอะไรบางอย่างให้ ส่ง ข้อมูลเข้า Datadog ต้องใช้ API key ถ้ากำลังเขียน script หรือ Terraform provider ที่ต้อง อ่านหรือจัดการ resource ของ Datadog แทน user คนหนึ่ง ต้องใช้ Application key คู่กับ API key

Terminal window
# Typical pairing for a script that talks to Datadog's API
export DD_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export DD_APP_KEY="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
curl -X GET "https://api.datadoghq.com/api/v1/validate" \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}"
ทำไม Infrastructure Monitoring, APM และ Log Management ถึงดีขึ้นพร้อมกันเมื่อแก้ tagging ครั้งเดียว
อะไรเป็นตัวกำหนด hostname ของ API/intake ที่ Agent ต้องส่งข้อมูลไปหา
API key อนุญาตให้ทำอะไร
คุณกำลังเขียน Terraform provider config ที่ต้องสร้างและจัดการ Datadog monitor ต้องใช้ credential แบบไหน