Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

StatsD 및 AppSignal의 독립 실행형 에이전트로 모든 시스템 모니터링

애플리케이션을 모니터링하는 것만으로는 시스템 전체를 파악하는 데 항상 충분하지 않습니다. 종종 위성 앱(또는 지원 앱)에서 실행되는 서비스는 일상적인 작업에 심각한 영향을 미칠 수 있습니다. 데이터베이스 서버는 이에 대한 잘 알려진 예입니다. 백업 스크립트 및 기타 백그라운드 작업도 시스템 속도를 늦출 수 있으며 종종 간과됩니다.

Node.js용 AppSignal APM, Ruby APM 및 Elixir APM은 앱 자체를 자동으로 계측합니다. 그러나 AppSignal은 기본적으로 이러한 위성 프로세스를 감시하지 않습니다. 모든 곳에서 모니터링을 확장하고 모든 데이터를 하나의 앱에 보관하려면 AppSignal의 독립 실행형 에이전트를 설치하면 됩니다.

AppSignal의 독립 실행형 에이전트

독립 실행형 에이전트는 일반적으로 Ruby, Elixir 또는 JavaScript 애플리케이션을 계측하는 것과 동일한 소프트웨어를 기반으로 합니다. 이 소프트웨어는 독립 실행형 모드에서도 실행할 수 있습니다.

독립 실행형 에이전트를 사용하여 다음을 모니터링할 수 있습니다.

  • 인프라 :시스템의 일부이지만 애플리케이션 코드를 실행하지 않는 시스템입니다.
  • 백그라운드 작업 :집중적인 cron 작업 또는 장기 실행 데이터 처리 스크립트와 같은. 이러한 백그라운드 작업이 지원되는 언어(Ruby, Elixir 또는 Node.js)로 작성된 경우 표준 통합을 사용할 수 있습니다.
  • 더 많은 언어 :기본적으로 지원되는 언어 이외의 언어로 작성된 프로그램.

예를 들어, 독립 실행형 에이전트를 사용하여 Python으로 작성된 기계 학습 모델을 추적하고, 백업 스크립트를 계측하고, Kafka 브로커를 모니터링하거나, 웹 팜에서 호스트 메트릭을 수집할 수 있습니다. AppSignal에서 이 모든 정보를 확인하여 기본 애플리케이션에 대해 이미 가지고 있는 메트릭을 보완할 수 있습니다.

작동 방식

에이전트는 deb 또는 rpm 패키지로 제공되며 언어 종속성이 없습니다. 모든 Debian/Ubuntu 또는 Red Hat 기반 시스템에서 실행됩니다. 자세한 설치 지침은 에이전트 설명서를 확인하세요.

에이전트가 설치되면 몇 분 안에 구성되고 계속 데몬으로 계속 실행되어 인프라를 자동으로 모니터링합니다. 또한 에이전트에는 AppSignal 대시보드에 로그인하는 사용자 지정 데이터를 전달하는 StatsD 서버가 포함되어 있습니다.

StatsD란 무엇입니까?

StatsD는 임의의 데이터를 수집하고 집계하기 위한 표준입니다. 메트릭 및 성능 정보 로깅에 중점을 둡니다. 컴퓨터에서 차지하는 공간이 작은 UDP 연결을 통해 가벼운 텍스트 프로토콜을 사용합니다.

StatsD 메시지는 다음과 같습니다.

KEY:VALUE|TYPE

KEY 위치 임의의 문자열이고 VALUE 는 숫자입니다. 유형 값은 번호가 처리되는 방식을 정의합니다.

다음과 같은 세 가지 유형의 측정항목을 지원합니다.

  • :이것은 카운터입니다. 호출될 때마다 증가합니다. 예를 들어, active_users:1|c active_users에 1을 추가합니다. 카운터.
  • :게이지 숫자 값을 가져와 업데이트될 때까지 유지합니다. 이는 처리량, 활성 사용자 수 또는 대기열의 보류 작업 수와 같이 시간이 지남에 따라 위아래로 변경되는 값을 기록하는 데 유용합니다.
  • :타이밍 저장 가치. 이 유형은 추적 기간에 이상적입니다. AppSignal은 기록된 모든 타이밍에 대한 평균, 개수 및 백분위수를 계산합니다.

지원되지 않는 다른 측정항목 유형은 자동으로 무시됩니다.

StatsD에 데이터 보내기

독립 실행형 에이전트는 포트 8125에서 UDP 패킷을 수신합니다. netcat을 사용하여 명령줄에서 StatsD 형식 문자열을 보낼 수 있습니다.

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

이를 통해 배치 또는 크론 작업을 쉽게 계측할 수 있습니다. 예를 들어 다음 줄은 게이지를 사용하여 백업 작업이 생성한 데이터의 양을 기록합니다.

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은 데이터 마이닝 및 기계 학습에 널리 사용되는 언어입니다. 내장 socket을 사용하여 Python 애플리케이션에 계측을 추가할 수 있습니다. 라이브러리:

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.net을 사용하여 Java에서 유사한 결과를 얻을 수 있습니다. 라이브러리:

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는 엄청나게 인기 있는 언어의 또 다른 예입니다. socket_sendto로 UDP 패킷을 보낼 수 있습니다. :

$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 호환 클라이언트는 최소한 지원되는 데이터 유형에 대해 작동해야 합니다. StatsD 프로젝트 위키에서 클라이언트 목록을 찾을 수 있습니다.

AppSignal에서 호스트 데이터 보기

호스트 측정항목 대시보드는 컴퓨터의 리소스 사용률을 보여줍니다.

AppSignal은 독립 실행형 에이전트를 실행하는 모든 시스템에 대한 항목을 추가합니다.

대시보드는 로드 및 CPU 평균 디스크, 네트워크, 메모리 및 스왑 사용량을 보여줍니다.

대시보드 만들기

AppSignal은 전송한 StatsD 값에 대한 대시보드를 자동으로 생성하지 않습니다. 이에 대한 사용자 정의 대시보드를 생성해야 합니다.

먼저 대시보드 추가를 클릭합니다. 대시보드 메뉴 아래:

대시보드에 이름 지정:

그래프 추가 클릭 버튼은 그래프 빌더를 보여줍니다:

그래프에 이름을 지정하고 측정항목 추가를 클릭합니다. :

메뉴에서 관심 있는 측정항목을 선택하세요.

선택적으로 필터링에 태그를 사용합니다.

그런 다음 개요로 돌아가기를 클릭합니다. . 표현하려는 데이터에 가장 적합한 그래프 유형과 값 단위를 찾아볼 수 있습니다.

평균과 백분위수가 더 명확하게 표시되기 때문에 타이밍 데이터는 영역 그래프에서 더 잘 보입니다.

선 그래프는 카운터와 게이지에 적합합니다.

결과에 만족하면 그래프 만들기를 클릭합니다. .

Node.js용 성능 모니터링 도구(APM) 또는 Ruby(on Rails) APM 또는 Elixir APM으로 AppSignal 세트가 있는 경우 자동으로 계측되거나 측정된 다른 메트릭에 대한 dashbaord를 추가할 수도 있습니다.

마무리

AppSignal의 독립 실행형 서버를 사용하여 컴퓨터와 위성 코드를 보는 방법을 배웠습니다. 내장된 StatsD 서버를 사용하여 임의의 성능 데이터를 기록하고 모든 프로세스를 계측할 수 있습니다.

독립 실행형 에이전트 사용에 대해 자세히 알아보려면 다음 링크를 확인하세요.

  • StatsD 참조.
  • 맞춤 측정항목을 보내는 방법
  • AppSignal에서 대시보드 만들기
  • Kafka 문제를 독립 실행형 에이전트 식별 및 해결