Computer >> Máy Tính >  >> Lập trình >> Ruby

Giám sát bất kỳ hệ thống nào với StatsD và AppSignal's Standalone Agent

Giám sát ứng dụng của bạn không phải lúc nào cũng đủ để có được bức tranh toàn cảnh về hệ thống của bạn. Thông thường, các dịch vụ chạy trong ứng dụng vệ tinh (hoặc ứng dụng hỗ trợ) có thể có tác động nghiêm trọng đến hoạt động hàng ngày của bạn. Máy chủ cơ sở dữ liệu là những ví dụ nổi tiếng về điều này. Các tập lệnh sao lưu và các công việc nền khác cũng có thể làm chậm hệ thống và thường bị bỏ qua.

AppSignal APM cho Node.js và Ruby APM và Elixir APM tự động thiết bị ứng dụng của bạn. Nhưng AppSignal không theo dõi các quá trình vệ tinh này theo mặc định. Để mở rộng khả năng giám sát ở mọi nơi và có tất cả dữ liệu của bạn trong một ứng dụng, bạn có thể cài đặt tác nhân độc lập của AppSignal.

Đại lý độc lập của AppSignal

Tác nhân độc lập dựa trên cùng một phần mềm mà chúng tôi thường tạo công cụ cho các ứng dụng Ruby, Elixir hoặc JavaScript. Phần mềm này cũng có thể chạy ở chế độ độc lập.

Tác nhân độc lập có thể được sử dụng để giám sát:

  • Cơ sở hạ tầng :máy là một phần của hệ thống của chúng tôi nhưng không chạy mã ứng dụng.
  • Công việc nền :chẳng hạn như các công việc cron chuyên sâu hoặc các tập lệnh xử lý dữ liệu chạy dài. Nếu các công việc nền này được viết bằng ngôn ngữ được hỗ trợ (Ruby, Elixir hoặc Node.js), bạn có thể sử dụng tích hợp tiêu chuẩn.
  • Nhiều ngôn ngữ hơn :các chương trình được viết bằng các ngôn ngữ khác với những ngôn ngữ được hỗ trợ.

Ví dụ:với tác nhân độc lập, chúng tôi có thể theo dõi mô hình học máy được viết bằng Python, các tập lệnh sao lưu công cụ, giám sát các nhà môi giới Kafka hoặc thu thập số liệu máy chủ lưu trữ trong các trang web của chúng tôi. Bạn có thể xem tất cả thông tin này trên AppSignal để bổ sung các chỉ số bạn đã có cho các ứng dụng chính của mình.

Cách hoạt động

Tác nhân được vận chuyển dưới dạng gói deb hoặc rpm và không có bất kỳ phụ thuộc ngôn ngữ nào. Nó chạy trong mọi hệ thống dựa trên Debian / Ubuntu hoặc Red Hat. Để biết hướng dẫn cài đặt chi tiết, hãy kiểm tra tài liệu đại lý.

Sau khi cài đặt, tác nhân được định cấu hình trong vài phút và tiếp tục chạy mãi mãi dưới dạng daemon, âm thầm giám sát cơ sở hạ tầng của bạn. Hơn nữa, tác nhân bao gồm một máy chủ StatsD chuyển tiếp bất kỳ dữ liệu tùy chỉnh nào bạn đăng nhập vào trang tổng quan AppSignal của mình.

StatsD là gì?

StatsD là một tiêu chuẩn để thu thập và tổng hợp dữ liệu tùy ý. Nó tập trung vào việc ghi nhật ký số liệu và thông tin hiệu suất. Nó sử dụng một giao thức văn bản nhẹ trên các kết nối UDP có dấu ấn nhỏ trong máy của bạn.

Thông báo StatsD trông giống như sau:

KEY:VALUE|TYPE

Ở đâu KEY là bất kỳ chuỗi tùy ý nào và VALUE là một số. Giá trị kiểu xác định cách số được xử lý.

Chúng tôi hỗ trợ ba loại chỉ số:

  • c :đây là một bộ đếm sẽ tăng lên mỗi khi nó được gọi. Ví dụ:active_users:1|c thêm 1 vào active_users bộ đếm.
  • g :a gauge nhận một giá trị số và duy trì nó cho đến khi được cập nhật. Điều này rất hữu ích để ghi lại các giá trị thay đổi lên xuống theo thời gian, chẳng hạn như thông lượng, số lượng người dùng đang hoạt động hoặc số tác vụ đang chờ xử lý trong một hàng đợi.
  • t :cửa hàng thời gian các giá trị. Loại này lý tưởng để theo dõi thời lượng. AppSignal tính toán phương tiện, số lượng và tỷ lệ phần trăm cho tất cả các thời gian đã ghi.

Các loại chỉ số không được hỗ trợ khác sẽ bị bỏ qua.

Gửi dữ liệu tới StatsD

Tác nhân độc lập lắng nghe các gói UDP trên cổng 8125. Chúng tôi có thể gửi các chuỗi có định dạng StatsD từ dòng lệnh bằng cách sử dụng netcat:

echo -n "myscript.myevent.counter:1|c" | nc -4u -w0 localhost 8125

Vì chúng tôi đang sử dụng UDP, chúng tôi không phải đợi phản hồi.

Socat cũng hoạt động:

echo -n "myscript.myevent.counter:1|c" | socat - udp:localhost:8125

Điều này giúp bạn dễ dàng xác định bất kỳ công việc hàng loạt hoặc cron nào. Ví dụ:các dòng sau sử dụng một thước đo để ghi lại lượng dữ liệu mà một công việc sao lưu đã tạo ra:

backup_size=$(du -m /backups | cut -f1)
echo -n "backup.data:$backup_size|g" | nc -4u -w0 localhost 8125

Chúng tôi không giới hạn số nguyên. StatsD cũng hoạt động với số dấu phẩy động:

echo -n "network.latency:0.2|g" | nc -4u -w0 localhost 8125

Sử dụng thẻ

Bạn có thể thêm thẻ vào chỉ số của mình. Máy chủ StatsD hỗ trợ các thẻ tùy chọn ở cuối thư:

KEY:VALUE|TYPE|#TAGS

Chúng tôi có thể áp dụng một số thẻ trong cùng một thông báo và chỉ định các giá trị để lọc sau:

echo -n "backup.data:$backup_size|g|#backups,env:production" | nc -4u -w0 localhost 8125

Chúng ta sẽ tìm hiểu cách xem dữ liệu trong AppSignal trong giây lát.

Ngôn ngữ dụng cụ

Máy chủ StatsD tương thích với bất kỳ ngôn ngữ nào có thể gửi gói UDP. Hãy xem một vài ví dụ.

Python là một ngôn ngữ phổ biến để khai thác dữ liệu và học máy. Chúng tôi có thể thêm thiết bị đo đạc vào các ứng dụng Python bằng cách sử dụng socket tích hợp sẵn thư viện:

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))

Chúng tôi có thể đạt được kết quả tương tự trong Java với java.net thư viện:

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 là một ví dụ khác về một ngôn ngữ cực kỳ phổ biến. Chúng tôi có thể gửi các gói UDP bằng 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 Clients

Cho đến nay, chúng tôi đã sử dụng các khả năng kết nối mạng tích hợp trong mọi ngôn ngữ. Nhưng còn nhiều hơn thế nữa. Nhiều ngôn ngữ và sản phẩm bao gồm các ứng dụng khách hoặc chương trình bổ trợ StatsD của bên thứ ba. Mọi ứng dụng khách tuân thủ StatsD sẽ hoạt động, ít nhất là đối với các loại dữ liệu được hỗ trợ. Bạn có thể tìm thấy danh sách khách hàng tại wiki dự án StatsD.

Xem dữ liệu máy chủ trong AppSignal

Số liệu máy chủ lưu trữ bảng điều khiển hiển thị việc sử dụng tài nguyên máy của bạn:

AppSignal thêm một mục nhập cho mọi máy chạy tác nhân độc lập.

Trang tổng quan hiển thị mức tải và CPU trung bình sử dụng đĩa, mạng, bộ nhớ và hoán đổi:

Tạo trang tổng quan

AppSignal không tự động tạo trang tổng quan cho giá trị StatsD mà bạn đã gửi — bạn sẽ cần tạo trang tổng quan tùy chỉnh cho việc này.

Trước tiên, nhấp vào Thêm trang tổng quan dưới menu trang tổng quan:

Đặt tên cho trang tổng quan:

Nhấp vào Thêm biểu đồ nút hiển thị trình tạo biểu đồ:

Đặt tên cho biểu đồ và nhấp vào Thêm số liệu :

Chọn số liệu bạn quan tâm từ menu.

Theo tùy chọn, sử dụng các thẻ để lọc:

Tiếp theo, nhấp vào Quay lại tổng quan . Bạn có thể muốn thử các loại biểu đồ và đơn vị giá trị khác nhau để tìm ra loại biểu đồ nào phù hợp nhất với dữ liệu bạn muốn đại diện.

Dữ liệu thời gian trông đẹp hơn với biểu đồ vùng vì giá trị trung bình và phần trăm được hiển thị rõ ràng hơn.

Biểu đồ dạng đường hoạt động tốt cho các bộ đếm và đồng hồ đo.

Khi bạn hài lòng với kết quả, hãy nhấp vào Tạo biểu đồ .

Lưu ý rằng bạn cũng có thể thêm bảng điều khiển cho bất kỳ số liệu được đo lường hoặc thiết bị tự động nào khác nếu bạn có bộ AppSignal làm công cụ giám sát hiệu suất (APM) cho Node.js hoặc APM Ruby (trên Rails) hoặc APM Elixir của bạn.

Kết thúc

Chúng tôi đã học cách sử dụng máy chủ độc lập của AppSignal để xem máy và mã vệ tinh của bạn. Với máy chủ StatsD tích hợp, bạn có thể ghi lại dữ liệu hiệu suất tùy ý và ghi lại bất kỳ quá trình nào.

Kiểm tra các liên kết sau để tìm hiểu thêm về cách sử dụng tác nhân độc lập:

  • Tham chiếu StatsD.
  • Cách gửi các chỉ số tùy chỉnh.
  • Tạo trang tổng quan trong AppSignal.
  • Xác định và Giải quyết vấn đề Kafka Phát hành tác nhân độc lập.