การตรวจสอบแอปพลิเคชันของคุณเพียงอย่างเดียวไม่เพียงพอเสมอที่จะทำให้ระบบของคุณมีภาพรวมที่สมบูรณ์ บ่อยครั้ง บริการที่ทำงานในแอปดาวเทียม (หรือแอปที่รองรับ) อาจส่งผลกระทบอย่างรุนแรงต่อการดำเนินงานในแต่ละวันของคุณ เซิร์ฟเวอร์ฐานข้อมูลเป็นตัวอย่างที่รู้จักกันดีของสิ่งนี้ สคริปต์สำรองและงานเบื้องหลังอื่นๆ อาจทำให้ระบบช้าลงและมักถูกมองข้าม
AppSignal APM สำหรับ Node.js และ Ruby APM และ Elixir APM จะติดตั้งแอปของคุณโดยอัตโนมัติ แต่ AppSignal ไม่ได้ดูกระบวนการดาวเทียมเหล่านี้โดยค่าเริ่มต้น หากต้องการขยายการตรวจสอบทุกที่และมีข้อมูลทั้งหมดในแอปเดียว คุณสามารถติดตั้งตัวแทนแบบสแตนด์อโลนของ AppSignal
ตัวแทนแบบสแตนด์อโลนของ AppSignal
เอเจนต์แบบสแตนด์อโลนใช้ซอฟต์แวร์เดียวกันกับที่เรามักใช้เครื่องมือ Ruby, Elixir หรือ JavaScript ซอฟต์แวร์นี้ยังสามารถทำงานในโหมดสแตนด์อโลนได้อีกด้วย
สามารถใช้เอเจนต์แบบสแตนด์อโลนเพื่อตรวจสอบ:
- โครงสร้างพื้นฐาน :เครื่องที่เป็นส่วนหนึ่งของระบบของเราแต่ไม่เรียกใช้รหัสแอปพลิเคชัน
- งานเบื้องหลัง :เช่นงาน cron แบบเข้มข้นหรือสคริปต์ประมวลผลข้อมูลที่ทำงานเป็นเวลานาน หากงานพื้นหลังเหล่านี้เขียนด้วยภาษาที่รองรับ (Ruby, Elixir หรือ Node.js) คุณสามารถใช้การผสานการทำงานมาตรฐานได้
- ภาษาอื่นๆ :โปรแกรมที่เขียนในภาษาอื่นนอกเหนือจากที่ได้รับการสนับสนุนโดยทันที
ตัวอย่างเช่น ด้วยเอเจนต์แบบสแตนด์อโลน เราสามารถติดตามโมเดลแมชชีนเลิร์นนิ่งที่เขียนด้วย Python สคริปต์สำรองเครื่องมือ ตรวจสอบโบรกเกอร์ Kafka หรือรวบรวมเมตริกโฮสต์ในเว็บฟาร์มของเรา คุณสามารถดูข้อมูลทั้งหมดนี้บน AppSignal เพื่อเสริมตัวชี้วัดที่คุณมีอยู่แล้วสำหรับแอปพลิเคชันหลักของคุณ
มันทำงานอย่างไร
เอเจนต์ถูกจัดส่งเป็นแพ็คเกจ deb หรือ rpm และไม่มีการขึ้นต่อกันของภาษาใดๆ มันทำงานในระบบที่ใช้ Debian/Ubuntu หรือ Red Hat สำหรับคำแนะนำในการติดตั้งโดยละเอียด โปรดดูเอกสารประกอบของตัวแทน
เมื่อติดตั้งแล้ว เอเจนต์จะได้รับการกำหนดค่าภายในไม่กี่นาทีและทำงานต่อไปตลอดไปในฐานะ daemon โดยจะตรวจสอบโครงสร้างพื้นฐานของคุณอย่างเงียบๆ ยิ่งไปกว่านั้น เอเจนต์ยังมีเซิร์ฟเวอร์ StatsD ที่ถ่ายทอดข้อมูลที่กำหนดเองใดๆ ที่คุณล็อกอินเข้าสู่แดชบอร์ด AppSignal
StatsD คืออะไร
StatsD เป็นมาตรฐานสำหรับการรวบรวมและรวบรวมข้อมูลโดยพลการ เน้นที่การบันทึกเมตริกและข้อมูลประสิทธิภาพ มันใช้โปรโตคอลข้อความที่มีน้ำหนักเบาบนการเชื่อมต่อ UDP ที่มีรอยขนาดเล็กในเครื่องของคุณ
ข้อความ StatsD มีลักษณะดังนี้:
KEY:VALUE|TYPE
โดยที่ KEY
เป็นสตริงใดก็ได้ และ VALUE
เป็นตัวเลข ค่าประเภทกำหนดวิธีการประมวลผลตัวเลข
เรารองรับเมตริกสามประเภท:
- ค :นี่คือ เคาน์เตอร์ ที่เพิ่มขึ้นทุกครั้งที่ถูกเรียก ตัวอย่างเช่น
active_users:1|c
เพิ่ม 1 ในactive_users
เคาน์เตอร์ - ก :เกจ ใช้ค่าตัวเลขและเก็บรักษาไว้จนกว่าจะมีการอัปเดต ซึ่งมีประโยชน์ในการบันทึกค่าที่เปลี่ยนแปลงขึ้นและลงเมื่อเวลาผ่านไป เช่น ปริมาณงาน จำนวนผู้ใช้ที่ใช้งานอยู่ หรือจำนวนงานที่รอดำเนินการในคิว
- ท :เก็บ เวลา ค่า ประเภทนี้เหมาะสำหรับการติดตามระยะเวลา AppSignal คำนวณวิธีการ นับ และเปอร์เซ็นไทล์สำหรับการจับเวลาที่บันทึกไว้ทั้งหมด
ระบบจะไม่สนใจเมตริกประเภทอื่นๆ ที่ไม่สนับสนุน
ส่งข้อมูลไปที่ StatsD
เอเจนต์แบบสแตนด์อโลนรับฟังแพ็กเก็ต UDP บนพอร์ต 8125 เราสามารถส่งสตริงที่จัดรูปแบบ StatsD จากบรรทัดคำสั่งโดยใช้ netcat:
echo -n "myscript.myevent.counter:1|c" | nc -4u -w0 localhost 8125
เนื่องจากเราใช้ UDP จึงไม่ต้องรอการตอบกลับ
Socat ยังใช้งานได้:
echo -n "myscript.myevent.counter:1|c" | socat - udp:localhost:8125
ทำให้ง่ายต่อการใช้เครื่องมือชุดงานหรือ cron ตัวอย่างเช่น บรรทัดต่อไปนี้ใช้เกจเพื่อบันทึกจำนวนข้อมูลที่งานสำรองข้อมูลสร้างขึ้น:
backup_size=$(du -m /backups | cut -f1)
echo -n "backup.data:$backup_size|g" | nc -4u -w0 localhost 8125
เราไม่ได้จำกัดแค่จำนวนเต็ม StatsD ยังใช้งานได้กับตัวเลขทศนิยม:
echo -n "network.latency:0.2|g" | nc -4u -w0 localhost 8125
การใช้แท็ก
คุณสามารถเพิ่มแท็กให้กับเมตริกของคุณได้ เซิร์ฟเวอร์ StatsD รองรับแท็กเสริมที่ท้ายข้อความ:
KEY:VALUE|TYPE|#TAGS
เราสามารถใช้แท็กหลายแท็กในข้อความเดียวกันและกำหนดค่าสำหรับการกรองในภายหลัง:
echo -n "backup.data:$backup_size|g|#backups,env:production" | nc -4u -w0 localhost 8125
เราจะได้เรียนรู้วิธีการดูข้อมูลใน AppSignal ในอีกสักครู่
ภาษาที่ใช้
เซิร์ฟเวอร์ StatsD เข้ากันได้กับภาษาใด ๆ ที่สามารถส่งแพ็กเก็ต UDP มาดูตัวอย่างกัน
Python เป็นภาษายอดนิยมสำหรับการขุดข้อมูลและการเรียนรู้ของเครื่อง เราสามารถเพิ่มเครื่องมือวัดในแอปพลิเคชัน Python โดยใช้ build-in socket
ห้องสมุด:
import time
# measure time taken for function
start = time.process_time()
train_my_model()
training_time = time.process_time() - start
# send value to statsd
import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 8125
MESSAGE = b"model.training.time:" + bytes(str(training_time), 'utf-8') + b"|t"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
เราสามารถบรรลุผลลัพธ์ที่คล้ายกันใน Java ด้วย java.net
ห้องสมุด:
byte[] buffer = "mybatch.exception.counter:1|c".getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(
buffer, buffer.length, address, 8125
);
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.send(packet);
PHP เป็นอีกตัวอย่างหนึ่งของภาษาที่ได้รับความนิยมอย่างไม่น่าเชื่อ เราสามารถส่งแพ็กเก็ต UDP ด้วย socket_sendto
:
$msg = "mywebsite.active_users:$ACTIVE_USERS|g";
$len = strlen($msg);
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8125);
socket_close($sock);
สถิติไคลเอ็นต์
จนถึงตอนนี้ เราใช้ความสามารถด้านเครือข่ายในตัวในทุกภาษา แต่มีมากกว่านั้น ภาษาและผลิตภัณฑ์มากมายรวมถึงไคลเอนต์ StatsD หรือส่วนเสริมของบุคคลที่สาม ไคลเอ็นต์ที่สอดคล้องกับ StatsD ใดๆ ควรใช้งานได้ อย่างน้อยสำหรับประเภทข้อมูลที่สนับสนุน คุณสามารถค้นหารายชื่อไคลเอ็นต์ได้ที่วิกิของโปรเจ็กต์ StatsD
การดูข้อมูลโฮสต์ใน AppSignal
ตัวชี้วัดโฮสต์ แดชบอร์ดแสดงการใช้ทรัพยากรของเครื่อง:
AppSignal เพิ่มรายการสำหรับทุกเครื่องที่รันเอเจนต์แบบสแตนด์อโลน
แดชบอร์ดแสดงโหลดและ CPU เฉลี่ยดิสก์ เครือข่าย หน่วยความจำ และการใช้งานสว็อป:
การสร้างแดชบอร์ด
AppSignal จะไม่สร้างแดชบอร์ดโดยอัตโนมัติสำหรับค่า StatsD ที่คุณส่ง คุณจะต้องสร้างแดชบอร์ดที่กำหนดเองสำหรับสิ่งนี้
ขั้นแรก ให้คลิกที่ เพิ่มแดชบอร์ด ใต้เมนูแดชบอร์ด:
ตั้งชื่อให้กับแดชบอร์ด:
คลิก เพิ่มกราฟ ปุ่มแสดงตัวสร้างกราฟ:
ตั้งชื่อกราฟ แล้วคลิก เพิ่มเมตริก :
เลือกเมตริกที่คุณสนใจจากเมนู
หรือใช้แท็กสำหรับการกรอง:
จากนั้น คลิกกลับไปที่ภาพรวม . คุณอาจต้องการลองใช้กราฟประเภทต่างๆ และหน่วยค่าต่างๆ เพื่อค้นหาว่ากราฟใดเหมาะสมกับข้อมูลที่คุณต้องการแสดงมากที่สุด
ข้อมูลระยะเวลาดูดีขึ้นเมื่อใช้กราฟพื้นที่ เนื่องจากค่าเฉลี่ยและเปอร์เซ็นไทล์แสดงให้เห็นชัดเจนยิ่งขึ้น
กราฟเส้นทำงานได้ดีกับตัวนับและมาตรวัด
เมื่อคุณพอใจกับผลลัพธ์แล้ว ให้คลิกที่สร้างกราฟ .
โปรดทราบว่าคุณยังเพิ่มแดชบอร์ดสำหรับตัววัดอัตโนมัติหรือตัววัดที่วัดได้อื่นๆ ได้ หากคุณมีชุด AppSignal เป็นเครื่องมือตรวจสอบประสิทธิภาพ (APM) สำหรับ Node.js หรือ Ruby (บน Rails) APM หรือ Elixir APM
บทสรุป
เราได้เรียนรู้วิธีใช้เซิร์ฟเวอร์แบบสแตนด์อโลนของ AppSignal เพื่อดูเครื่องและรหัสดาวเทียมของคุณ ด้วยเซิร์ฟเวอร์ StatsD ในตัว คุณสามารถบันทึกข้อมูลประสิทธิภาพตามอำเภอใจและกำหนดกระบวนการใดๆ ได้
ตรวจสอบลิงก์ต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการใช้เอเจนต์แบบสแตนด์อโลน:
- ข้อมูลอ้างอิง StatsD
- วิธีส่งเมตริกที่กำหนดเอง
- การสร้างแดชบอร์ดใน AppSignal
- การระบุและแก้ไขปัญหา Kafka เกี่ยวกับ Standalone Agent