NGINX Monitoring with Prometheus
terngr
Posted on January 24, 2023
NGINX เป็นทั้ง Web Server, Load Balancer, Reverse Proxy, Ingress Controller, Caching, Service Mesh, etc. แต่ทุก Use cases มีสิ่งที่เหมือนกันคือ Traffic จะวิ่งผ่าน NGINX ฉะนั้นความสามารถในการ Monitoring ทั้งตัว NGINX และ Traffic ที่วิ่งผ่าน NGINX จะช่วยประเมินสุขภาพของระบบได้ชัดเจน ช่วยดู Utilization รวมถึง Monitor หากเกิดข้อผิดพลาดได้แบบ Real Time
NGINX สามารถที่จะ Expose metrics ของตัวเองออกมาได้ โดยผ่านทาง
/stub_status สำหรับ NGINX Open Source ได้แก่จำนวน Active Connections และ จำนวน Connections ทั้งหมด
/api สำหรับ NGINX Plus จะดู Metrics ได้ละเอียดขึ้นเช่น HTTP Response code, zone status, backend status, etc. see NGINX Plus REST API
Prerequisites: ติดตั้ง NGINX Plus / NGINX OSS พร้อมใช้งาน
ขั้นตอนแรก
เราจะ Configure NGINX ให้ Expose Metrics ออกมา
#NGINX Plus
location /api {
api;
}
#NGINX OSS
location /basic_status {
stub_status;
}
ทดลองเรียกดู NGINX Plus Metrics ที่ Path /api
ขั้นตอนที่สอง
ติดตั้ง Prometheus Exporter เพื่อดึง Metric จาก NGINX ออกไปเป็น Prometheus
ในขั้นตอนนี้เรารัน Prometheus Exporter บน Container โดยใช้ Image nginx/nginx-prometheus-exporter:0.10.0 และแทนที่ nginx-plus :8080/api ด้วย Address และ Port ที่ Expose metrics จาก NGINX
docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.10.0 -nginx.plus -nginx.scrape-uri=http://<nginx-plus>:8080/api
ขั้นตอนที่สาม
ติดตั้ง Prometheus ให้อ่าน Metric จาก Prometheus Exporterในขั้นตอนนี้เรารัน Prometheus บน Container โดยใช้ Image prom/prometheus
เตรียมไฟล์ prometheus.yml โดยแทนที่ Prometheus Exporter ด้วย Address และ port ที่ได้จาก Prometheus Exporter ในขั้นตอนที่สอง
#prometheus.yml
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['Prometheus Exporter:9113']
รัน Prometheus บน Container โดย Mount prometheus.yml และให้เรียกใช้ Prometheus ได้ที่ port 9090
sudo docker run -d -p 9090:9090 -v ~/path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
ทดสอบเรียก Prometheus ในตัวอย่างจะเป็นจำนวนของ connections_accepted
ตอนต่อไป เรามาดูการนำ Prometheus ไปเป็น Data source ให้กับ Grafana Dashboard เพื่อสร้าง Custom Dashboard ครับ
Posted on January 24, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.