StatsD 및 AppSignal의 독립 에이전트를 사용하여 시스템 모니터링

애플리케이션 모니터링만으로는 항상 시스템을 완벽하게 파악할 수 없습니다.위성 응용 프로그램 (또는 지원 응용 프로그램) 에서 실행되는 서비스는 일반적으로 일상적인 운영에 심각한 영향을 미칠 수 있습니다.데이터베이스 서버는 이 방면에서 모두가 알고 있는 예이다.백업 스크립트와 다른 백그라운드 작업도 시스템의 속도를 늦추고 무시되기 쉽다.
기본적으로 AppSignal은 이러한 위성 프로세스를 모니터링하지 않습니다.모니터링을 어디로든 확장하고 모든 데이터를 하나의 응용 프로그램에 넣으려면 AppSignal의 standalone agent을 설치할 수 있습니다.

AppSignal의 독립 에이전트


독립 에이전트는 same software을 기반으로 하며, 일반적으로 루비, Elixir 또는 JavaScript 응용 프로그램을 테스트하는 데 사용됩니다.이 소프트웨어도 독립 모드에서 실행할 수 있다.
독립 실행형 에이전트는 모니터링에 사용할 수 있습니다.

  • 인프라 시설: 우리 시스템의 일부분이지만 응용 프로그램 코드를 실행하지 않는 기계입니다.

  • 백그라운드 작업: 예를 들어 밀집된cron 작업이나 장시간 실행되는 데이터 처리 스크립트입니다.이 백그라운드 작업이 지원되는 언어 (Ruby, Elixir 또는 Node.js) 로 작성된 경우 표준 통합을 사용할 수 있습니다.

  • 더 많은 언어: 비기존 언어로 작성된 프로그램.
  • 예를 들어 독립 에이전트를 사용하면 Python으로 작성된 기계 학습 모델, 도구 백업 스크립트 monitor Kafka brokers을 추적하거나 웹 사이트에서 host metrics을 수집할 수 있다.이 모든 정보는 AppSignal에서 확인하여 주요 애플리케이션의 기존 지표를 보완할 수 있습니다.

    작업 원리


    에이전트는 deb나 rpm 패키지로 제공되며 언어 의존성이 없습니다.Debian/Ubuntu 또는 Red Hat 기반 시스템에서 실행할 수 있습니다.자세한 설치 지침은 agent documentation을 참조하십시오.
    일단 설치하면 에이전트는 몇 분 안에 설정되고 수호 프로세스로 영원히 실행되며 당신의 기초 구조를 묵묵히 감시합니다.이 프록시에는 AppSignaldashboard에 로그인한 사용자 정의 데이터를 이 서버에 중계하는 StatsD 서버도 포함되어 있습니다.

    StatsD란 무엇입니까?


    StatsD는 임의의 데이터를 수집하고 집합하는 표준입니다.그것은 로그 도량과 성능 정보에 중점을 두었다.UDP 연결에 경량급 텍스트 프로토콜을 사용하여 기계에 아주 작은 공간을 차지합니다.
    StatsD 메시지는 다음과 같습니다.
    KEY:VALUE|TYPE
    
    그 중에서 KEY은 임의의 문자열이고 VALUE은 숫자이다.유형 값은 숫자의 처리 방식을 정의합니다.
    우리는 세 가지 유형의 지표를 지원한다.

  • c:이것은 호출할 때마다 점차적으로 증가하는 계수기입니다.예를 들어, active_users:1|cactive_users 카운터에 1을 추가합니다.

  • g: 계기는 값을 가져와 업데이트에 유지합니다.이는 처리량, 활성 사용자 수 또는 대기열에서 중단된 작업 수와 같이 시간에 따라 위아래로 변경되는 값을 기록하는 데 유용합니다.

  • t: 시간 값을 저장합니다.이런 유형은 추적 지속 시간에 매우 적합하다.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
    
    이것은 모든 일괄 처리나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은 유행하는 데이터 발굴과 기계 학습 언어이다.내장형 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 클라이언트


    지금까지 우리는 모든 언어에 내장된 네트워크 기능을 사용했다.하지만 더 많아요.많은 언어와 제품은 제3자 StatsD 클라이언트나 플러그인을 포함한다.StatsD에 부합되는 모든 클라이언트는 최소한 지원되는 데이터 형식에 대해 일해야 한다.너는 StatsD project wiki에서 고객 명단을 찾을 수 있다.

    AppSignal에서 호스트 데이터 보기


    호스트 지표 대시보드에는 시스템의 리소스 활용도가 표시됩니다.

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

    대시보드에는 로드 및 CPU 평균 디스크, 네트워크, 메모리 및 스위칭 사용률이 표시됩니다.


    대시보드 생성


    AppSignal은 사용자가 보낸 StatsD 값을 자동으로 대시보드를 생성하지 않습니다. 이를 위해 사용자 정의 대시보드를 만들어야 합니다.
    먼저 대시보드 메뉴에서 Add 대시보드를 클릭합니다.

    대시보드의 이름:

    그래픽 추가 버튼을 클릭하여 그래픽 생성기를 표시합니다.

    도면의 이름을 지정한 다음 를 클릭하여 메트릭을 추가합니다.

    메뉴에서 관심 지표를 선택하십시오.

    (선택 사항) 태그를 사용하여 필터링:

    다음으로 개요를 보려면 [뒤로]를 클릭하십시오.표시하려는 데이터에 가장 적합한 데이터를 찾기 위해 다양한 그래픽 유형과 값 단위를 시도해야 할 수도 있습니다.
    시간 데이터는 평균치와 백분율이 더 잘 보이기 때문에 면적도에서 더 좋아 보인다.

    접선도는 계수기와 계기에 적용된다.

    결과에 만족하면 Create graph를 클릭합니다.

    끝내다


    우리는 당신의 기계와 위성 코드를 감시하기 위해 AppSignal의 독립 서버를 사용하는 방법을 배웠습니다.내장된 StatsD 서버를 통해 임의의 성능 데이터를 기록하고 프로세스를 검사할 수 있습니다.
    독립 에이전트 사용에 대한 자세한 내용은 다음 링크를 참조하십시오.

  • StatsD reference .

  • How to send custom metrics .

  • Creating dashboards in AppSignal .

  • Identifying and Resolving a Kafka Issue the Standalone Agent .
  • 우리의 특별 초청 저자인 토마스는 IBM에서 10년 동안 일했다. 그는 개발, 서비스 납품, 데이터베이스 관리와 클라우드 공학 등 많은 일을 했다.그는 현재 독립 고문과 기술 작가이다.

    좋은 웹페이지 즐겨찾기