Cloud Computing & MSA

Prometheus를 통하여 Nginx 모니터링 하기

냉장고를사다줘·2019년 11월 11일·조회 43,790

1. 개요

프로메테우스로 뭐라고 보고 싶은 사람들을 위한 친절한 가이드.


2. Nginx 설치

넘어간다..


3. Nginx 설정

다음과 같은 설정을 추가하고 Nginx를 내렸다 올린다. 이것이 뭘 의미하는지는 자세한 내용은 삵에서 열심히 검색해보자. 아마 삵 초창기부터 Nginx 모니터링에 대한 글이 있었던거 같다.

        location /metrics {
            stub_status on;
        }

이제 Nginx가 모니터링 가능한 상태가 된 것이다.

$ curl http://127.0.0.1:80/metrics
Active connections: 2
server accepts handled requests
 13 13 42
Reading: 0 Writing: 1 Waiting: 1

4. nginx-prometheus-exporter 설정

위에서 띄운 Nginx에 붙어서 metric을 가져오는 역할을 하는 놈이라고 보면 된다. 대충 보면 해석되겠지만 9113으로 떠서 /prometheus라는 놈으로 노출한다.

우리는 이걸 Docker로 할 것이다. 그냥 아래처럼 실행하면 되는데, -nginx.scrape-uri 값만 자기 IP에 맞게 바꾼다.

$ sudo docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.4.2 -nginx.scrape-uri=http://172.17.0.1/metrics -web.telemetry-path=/prometheus
2019/11/11 11:57:22 Starting NGINX Prometheus Exporter Version=0.4.2 GitCommit=f017367
2019/11/11 11:57:22 NGINX Prometheus Exporter has successfully started

5. Prometheus Job 추가

prometheus.yml에 아래와 같은 job을 추가한다.

위에서 우리는 9113에 /prometheus로 노출하는 놈을 하나 띄웠는데 Prometheus는 그걸 바라볼 것이다.

  - job_name: 'nginx-prometheus-test'
    scrape_interval: 1m
    metrics_path: '/prometheus'
    static_configs:
      - targets: ['127.0.0.1:9113']

그리고 다시 실행한다.

$ ./prometheus --config.file=prometheus.yml
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:296 msg="no time or size retention was set so using the default time retention" duration=15d
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:332 msg="Starting Prometheus" version="(version=2.13.1, branch=HEAD, revision=6f92ce56053866194ae5937012c1bec40f1dd1d9)"
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:333 build_context="(go=go1.13.1, user=root@88e419aa1676, date=20191017-13:15:01)"
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:334 host_details="(Linux 4.15.0-1044-aws #46-Ubuntu SMP Thu Jul 4 13:38:28 UTC 2019 x86_64 ip-172-31-6-133 (none))"
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:335 fd_limits="(soft=1024, hard=1048576)"
level=info ts=2019-11-11T12:01:13.700Z caller=main.go:336 vm_limits="(soft=unlimited, hard=unlimited)"
level=info ts=2019-11-11T12:01:13.702Z caller=main.go:657 msg="Starting TSDB ..."
level=info ts=2019-11-11T12:01:13.704Z caller=head.go:514 component=tsdb msg="replaying WAL, this may take awhile"
level=info ts=2019-11-11T12:01:13.702Z caller=web.go:450 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2019-11-11T12:01:13.713Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=0 maxSegment=6
level=info ts=2019-11-11T12:01:13.716Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=1 maxSegment=6
level=info ts=2019-11-11T12:01:13.718Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=2 maxSegment=6
level=info ts=2019-11-11T12:01:13.719Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=3 maxSegment=6
level=info ts=2019-11-11T12:01:13.720Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=4 maxSegment=6
level=info ts=2019-11-11T12:01:13.721Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=5 maxSegment=6
level=info ts=2019-11-11T12:01:13.721Z caller=head.go:562 component=tsdb msg="WAL segment loaded" segment=6 maxSegment=6
level=info ts=2019-11-11T12:01:13.723Z caller=main.go:672 fs_type=EXT4_SUPER_MAGIC
level=info ts=2019-11-11T12:01:13.723Z caller=main.go:673 msg="TSDB started"
level=info ts=2019-11-11T12:01:13.723Z caller=main.go:743 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2019-11-11T12:01:13.739Z caller=main.go:771 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2019-11-11T12:01:13.739Z caller=main.go:626 msg="Server is ready to receive web requests."

6. 확인방법

  • http://<주소>:9090/targets 에 접속하면 뭐가 뜬다.
  • http://<주소>:9090/graph 에 접속한 후 Expressions에 delta(nginx_http_requests_total{job="nginx-prometheus-test"}[2m]) 입력하고 Execute 누르고 Graph 탭 보면 뭐가 나온다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.