Prometheus와 Blackbox Exporter에서 서버 사활 모니터링

이 문서는 블로그에 게시 된 내용의 원본입니다.

Prometheus는 오픈 소스 모니터링 도구입니다. 이 도구의 주요 특징은 다음과 같습니다.
  • 메트릭의 수집을 HTTP를 통한 Pull 형으로 실시합니다.
  • 유연한 쿼리로 집계한 후 그래프로 표시할 수 있습니다. 이 쿼리를 공식적으로 "PromQL"이라고 합니다.
  • 여러 구성 요소로 구성됩니다. Prometheus 자체는 감시 서버이며, GUI 부분은 Grafana, 경고 부분은 AlertManagert등의 컴퍼넌트가 담당하고 있습니다.

  • 위의 모든 특징은 내 요구에 부합하며 매우 좋아하는 도구입니다.

    글쎄,이 기사에서 다루는 것은 Blackbox Exporter라는 구성 요소입니다. 이 구성 요소는 다양한 통신 프로토콜을 통해 대상 서버의 사활 상태에 대한 메트릭을 생성합니다. Prometheus를 운용하는데 있어서 꼭 눌러 두고 싶은 컴퍼넌트입니다만, 이 컴퍼넌트에 관한 일본어의 기사를 볼 수 없습니다. 그래서 비망록을 겸해 구축부터 운용까지의 방법을 아래에 적습니다.

    구축 방법



    간편하게 감시 환경을 구축한다면 Docker를 이용하는 것이 좋습니다. Docker 이미지는 공식 이미지를 사용합니다. Docker Compose 파일은 다음과 같습니다.
    ./docker-compose.yml
    version: '2'
    services:
      prometheus:
        image: prom/prometheus:latest
        ports:
          - 9090:9090
        volumes:
          - data-prometheus:/prometheus
          - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
        command: -config.file=/etc/prometheus/prometheus.yml -storage.local.path=/prometheus -web.console.libraries=/usr/share/prometheus/console_libraries -web.console.templates=/usr/share/prometheus/consoles
    
      blackbox_exporter:
        image: prom/blackbox-exporter:latest
        volumes:
          - ./blackbox_exporter/config.yml:/etc/blackbox_exporter/config.yml
    
    volumes:
      data-prometheus:
        driver: local
    

    Blackbox Exporter 설정



    Blackbox Exporter 구성 파일은 GitHub 저장소의 것을 유용합니다. 독자적으로 리퀘스트나 응답등의 세세한 조정을 할 수 있으므로, 흥미가 있는 분은 구성 혹은 Example 를 참조해 주세요.
    ./blackbox_exporter/config.yml
    modules:
      http_2xx:
        prober: http
        http:
      http_post_2xx:
        prober: http
        http:
          method: POST
      tcp_connect:
        prober: tcp
      pop3s_banner:
        prober: tcp
        tcp:
          query_response:
          - expect: "^+OK"
          tls: true
          tls_config:
            insecure_skip_verify: false
      ssh_banner:
        prober: tcp
        tcp:
          query_response:
          - expect: "^SSH-2.0-"
      irc_banner:
        prober: tcp
        tcp:
          query_response:
          - send: "NICK prober"
          - send: "USER prober prober prober :prober"
          - expect: "PING :([^ ]+)"
            send: "PONG ${1}"
          - expect: "^:[^ ]+ 001"
      icmp:
        prober: icmp
    

    Prometheus 설정


    scrape_configs 에서 사용할 모듈을 설정합니다. 다음은 주요 프로토콜에서 설정하는 방법을 설명합니다.

    HTTP를 이용하는 경우



    모듈로 http_2xx를 설정하십시오. targets 에서 URL을 설정합니다. 재 라벨 설정에 대해서는 Prometheus Configuration를 유용합니다. replacement 에서는 Blackbox Exporter 구성 요소의 IP 주소 또는 호스트 이름과 포트 번호(9115)를 설정합니다.
    ./prometheus/prometheus.yml
    scrape_configs:
      - job_name: 'blackbox_http'
        metrics_path: /probe
        params:
          module: [http_2xx]
        static_configs:
          - targets:
            - http://example.com:8080
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: blackbox_exporter:9115
    

    ICMP를 이용하는 경우



    모듈로 icmp를 설정하십시오. targets는 IP 주소 또는 호스트 이름을 설정합니다.
    ./prometheus/prometheus.yml
    scrape_configs:
      - job_name: 'blackbox_icmp'
        metrics_path: /probe
        params:
          module: [icmp]
        static_configs:
          - targets:
            - example.com
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: blackbox_exporter:9115
    

    포트 지정 TCP를 이용하는 경우



    모듈로 tcp_connect를 설정하십시오. targets는 IP 주소 또는 호스트 이름과 포트 번호를 설정합니다.
    ./prometheus/prometheus.yml
    scrape_configs:
      - job_name: 'blackbox'
        metrics_path: /probe
        params:
          module: [tcp_connect]
        static_configs:
          - targets:
            - example.com:1666
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: blackbox_exporter:9115
    

    운영방법



    대상 서버의 사활 상태에 대해서는 probe_success 메트릭스를 확인합니다. 1이면 가동, 0이면 정지를 의미합니다.



    Prometheus의 경고 규칙에 다음 설명을 추가하면 2분 이상 중지된 인스턴스가 있는 경우 경고가 작동합니다. 실제의 경고 통지에 대해서는 AlertManager 컴퍼넌트가 받아들입니다. 이 컴퍼넌트에 대해서는 대상 범위외이므로 설명은 생략합니다.
    ALERT probe_down
      IF probe_success == 0
      FOR 2m
      LABELS { severity = "critical" }
      ANNOTATIONS {
        summary = "Instance {{ $labels.instance }} down",
        description = "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes.",
      }
    

    마지막으로



    편안한 Prometheus 생활을 보내십시오.

    좋은 웹페이지 즐겨찾기