Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การตรวจสอบระบบใดๆ ด้วย StatsD และ Standalone Agent ของ AppSignal

การตรวจสอบแอปพลิเคชันของคุณเพียงอย่างเดียวไม่เพียงพอเสมอที่จะทำให้ระบบของคุณมีภาพรวมที่สมบูรณ์ บ่อยครั้ง บริการที่ทำงานในแอปดาวเทียม (หรือแอปที่รองรับ) อาจส่งผลกระทบอย่างรุนแรงต่อการดำเนินงานในแต่ละวันของคุณ เซิร์ฟเวอร์ฐานข้อมูลเป็นตัวอย่างที่รู้จักกันดีของสิ่งนี้ สคริปต์สำรองและงานเบื้องหลังอื่นๆ อาจทำให้ระบบช้าลงและมักถูกมองข้าม

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