วันก่อนโพสต์เรื่องเอา Nginx Active Connections มาวาดกราฟด้วย Google Sheet วาร์ป เพราะว่าขี้เกียจใส่ระบบ Monitor Connections เลยเขียน shell script 2-3 บรรทัด อ่านค่าผ่าน cURL มาใส่ไฟล์ csv แล้วเอาเข้า Google Sheet ดูกราฟ
จริงๆแล้วมันง่ายมาก ถ้าใครใช้ nginx และเขียน shell script เป็นสักนิดหน่อย เอาเป็นว่า สิ่งที่ต้องการเลยก็คือ Nginx + ngx_http_stub_status_module
โดยโมดูลนี้ มันไม่ได้ถูกเปิดใช้ ถ้าเราไม่เปิดใช้เองน่ะ ต้องเพิ่มตอนคอมไพล์ ด้วย --with-http_stub_status_module
เอาเป็นว่า เพื่อความง่าย และผมขี้เกียจ ผมจะเขียนตัวอย่างด้วย Docker :D โดยจะใช้ docker image domecloud/openresty:edge
แต่ว่าคอนฟิกเอาไปใช้กับ Nginx/OpenResty อื่นๆได้ถ้ามี --with-http_stub_status_module
โดยใช้คอนฟิกไฟล์นี้ โดยใส่ไฟล์ชื่อ default
server {
listen 80;
server_name xxx.yyy;
client_max_body_size 100m;
location / {
}
location /basic_status {
access_log off;
stub_status;
}
}
ต่อไปก็รัน docker
จากนั้นเช็คว่าเว็บเซิร์ฟเวอร์รันอยู่
จะได้
df7b5266e8d0 domecloud/openresty:edge "/start.sh" 4 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp sloth
ทดลองเรียกหน้าเว็บด้วย cURL
จะได้
HTTP/1.1 200 OK
Server: openresty/1.11.2.3
Date: Wed, 30 Aug 2017 07:39:36 GMT
Content-Type: text/html
Content-Length: 562
Last-Modified: Tue, 23 May 2017 08:01:51 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "5923ec6f-232"
Accept-Ranges: bytes
ถ้าหน้าแรกได้ 200 OK แล้วลอง
จะได้
Active connections: 1
server accepts handled requests
6 6 6
Reading: 0 Writing: 1 Waiting: 0
จะได้ตัวเลข Active connections แล้ว ทีนี้ จะเอามันลงไฟล์ ด้วย shell script ให้มันชื่อ get_conn.sh
นามสมมติ
#!/bin/bash
CONN=$(curl -s http://127.0.0.1:8080/basic_status | head -n1 | cut -d: -f2 | sed 's/ //g')
echo "`date`,$CONN" >> "/data/web/conn-`date +%F`.csv"
แล้ว chmod +x get_conn.sh
จากนั้นเพิ่ม crontab
ให้เรียกไฟล์นี้ทุกๆ 1 นาที หรือมากกว่าก็ได้
*/1 * * * * /path/to/get_conn.sh &
โดยไฟล์ csv จะถูกสร้างชื่อตามวันที่ เช่น conn-2017-08-29.csv
และมีบรรทัดข้อมูลประมาณนี้
Wed Aug 30 00:00:02 +07 2017,1
Wed Aug 30 00:01:02 +07 2017,1
Wed Aug 30 00:02:02 +07 2017,2
Wed Aug 30 00:03:01 +07 2017,5
Wed Aug 30 00:04:01 +07 2017,1
Wed Aug 30 00:05:01 +07 2017,10
Wed Aug 30 00:06:01 +07 2017,9
เสร็จแล้วสำหรับการเตรียมข้อมูล ต่อไปคือการเอาเข้า Google Sheet เพื่อแสดงผล โดยไปที่เมนู Import
จากนั้นเลือกไฟล์ และเช็คตรง Insert new sheet
จากนั้นสร้างกราฟตามอัธยาสัยเลยครับ