coroot-pg-agent를 프로메테우스와 통합하는 방법

postgres 서버를 모니터링하기 위해 대부분의 오픈 소스 스택은 prometheus와 함께 grafana로 구성됩니다.

postgres 메트릭을 prometheus에 연결하는 것은 매우 흥미로운 작업이며 특정 도구/라이브러리를 사용할 수 있습니다.

이러한 라이브러리는 prometheus에 대한 경고 규칙을 모니터링하고 작성하는 데 유용합니다.
  • postgres_exporter( https://github.com/prometheus-community/postgres_exporter )
  • coroot-pg-agent(https://github.com/coroot/coroot-pg-agent ).

  • 오늘 우리는 coroot-pg-agent에 대해 더 많이 논의할 것입니다.

    coroot-pg-agent는 docker를 사용하여 실행할 수 있습니다. 자세한 내용은 여기에서 찾을 수 있습니다.( https://github.com/coroot/coroot-pg-agent )

    공식 postgresql에서 : https://www.postgresql.org/about/news/coroot-pg-agent-an-open-source-postgres-exporter-for-prometheus-2488/

    이제 prometheus와 함께 coroot-pg-agent를 실행하는 동안 염두에 두어야 할 몇 가지 사항이 있습니다.
  • docker를 사용하는 coroot-pg-agent는 기본적으로 포트 80에서 실행됩니다.
    도커를 통해 다음 명령을 사용하여 사용자 지정 포트에서 실행할 수 있습니다.

  • docker run --name coroot-pg-agent \
    --env DSN="postgresql://<USER>:<PASSWORD>@<HOST>:5432/postgres?connect_timeout=1&statement_timeout=30000" \
    --env LISTEN="0.0.0.0:<custom_port_for_pg_agent>" \
    -p <custom_port_for_pg_agent>:<custom_port_for_pg_agent> \
    ghcr.io/coroot/coroot-pg-agent
    


    --env PG_SCRAPE_INTERVAL을 사용하여 scrape-interval을 전달할 수도 있습니다.

    위의 명령을 실행하면 다음과 같은 출력이 표시됩니다. 여기서 custom_port_for_pg_agent는 3000입니다.

    I0823 21:00:58.259629       1 main.go:35] static labels: map[]
    I0823 21:00:58.273610       1 main.go:41] listening on: 0.0.0.0:3000
    


  • prometheus 구성용 prometheus.yml

  • global:
      scrape_interval: 5m
      scrape_timeout: 3m
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: prometheus
        static_configs:
          - targets: ["localhost:9090"]
      - job_name: coroot-pg-agent
        static_configs:
          - targets: ["<localhost-ip>:<custom_port_for_pg_agent>"]
    


    필요에 따라 스크랩 간격과 시간 초과를 항상 변경할 수 있으며 로컬에서 테스트했기 때문에 이와 같이 유지했습니다.

    yml 이상에서 편집하는 동안 scrape_interval은 항상 scrape_timeout보다 커야 합니다.

    docker를 사용하여 prometheus를 실행하려면 docker에서 prometheus의 공식 이미지를 사용하는 다음 명령을 사용할 수 있습니다.

    docker run \
        -p 9090:9090 \
        -v ~/pro/prometheus.yml:/etc/prometheus/prometheus.yml \
        prom/prometheus
    


    위의 명령을 실행하면 다음과 같은 출력이 표시됩니다.

    ts=2022-08-23T21:02:26.203Z caller=main.go:495 level=info msg="No time or size retention was set so using the default time retention" duration=15d
    ts=2022-08-23T21:02:26.203Z caller=main.go:539 level=info msg="Starting Prometheus Server" mode=server version="(version=2.38.0, branch=HEAD, revision=818d6e60888b2a3ea363aee8a9828c7bafd73699)"
    ts=2022-08-23T21:02:26.203Z caller=main.go:544 level=info build_context="(go=go1.18.5, user=root@e6b781f65453, date=20220816-13:29:14)"
    ts=2022-08-23T21:02:26.204Z caller=main.go:545 level=info host_details="(Linux 5.10.47-linuxkit #1 SMP PREEMPT Sat Jul 3 21:50:16 UTC 2021 aarch64 87decec12cad (none))"
    ts=2022-08-23T21:02:26.204Z caller=main.go:546 level=info fd_limits="(soft=1048576, hard=1048576)"
    ts=2022-08-23T21:02:26.204Z caller=main.go:547 level=info vm_limits="(soft=unlimited, hard=unlimited)"
    ts=2022-08-23T21:02:26.205Z caller=web.go:553 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
    ts=2022-08-23T21:02:26.205Z caller=main.go:976 level=info msg="Starting TSDB ..."
    ts=2022-08-23T21:02:26.206Z caller=tls_config.go:195 level=info component=web msg="TLS is disabled." http2=false
    ts=2022-08-23T21:02:26.207Z caller=head.go:495 level=info component=tsdb msg="Replaying on-disk memory mappable chunks if any"
    ts=2022-08-23T21:02:26.207Z caller=head.go:538 level=info component=tsdb msg="On-disk memory mappable chunks replay completed" duration=10.125µs
    ts=2022-08-23T21:02:26.207Z caller=head.go:544 level=info component=tsdb msg="Replaying WAL, this may take a while"
    ts=2022-08-23T21:02:26.207Z caller=head.go:615 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
    ts=2022-08-23T21:02:26.207Z caller=head.go:621 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=21.416µs wal_replay_duration=117.958µs total_replay_duration=159.167µs
    ts=2022-08-23T21:02:26.208Z caller=main.go:997 level=info fs_type=EXT4_SUPER_MAGIC
    ts=2022-08-23T21:02:26.208Z caller=main.go:1000 level=info msg="TSDB started"
    ts=2022-08-23T21:02:26.208Z caller=main.go:1181 level=info msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
    ts=2022-08-23T21:02:26.210Z caller=main.go:1218 level=info msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml totalDuration=2.047292ms db_storage=750ns remote_storage=1.709µs web_handler=292ns query_engine=583ns scrape=341.75µs scrape_sd=16.708µs notify=542ns notify_sd=792ns rules=1µs tracing=9.625µs
    ts=2022-08-23T21:02:26.210Z caller=main.go:961 level=info msg="Server is ready to receive web requests."
    ts=2022-08-23T21:02:26.210Z caller=manager.go:941 level=info component="rule manager" msg="Starting rule manager..."
    


    우리는 브라우저를 치고 다음과 같은 화면을 볼 수 있습니다


    이제 방문할 수 있는 대상을 보기 위해Targets



    목표가 설정되면 다음과 같이 상태가 변경된 것을 볼 수 있습니다.


    graph을 방문할 수 있으며 여기에서 검색 표시줄을 누르면 자동 제안이 계속 켜져 있으므로 다음과 같이 볼 수 있습니다.

    좋은 웹페이지 즐겨찾기