Grafana + Prometheus (2)

김재익·2023년 9월 13일
0
post-thumbnail

문제

오토 스케일링을 적용하여 가변적으로 늘어나는 서버의 상태를 개발자가 수정하는 작업 없이 자동으로 grafana에 적용되도록 하는 방법.

해결 방법

aws의 읽기전용 사용자를 생성하고 인스턴스에 태그를 부여해서 그라파나 구동서버에서 자동으로 수집할 수 있도록 prometheus 설정 파일을 수정한다.

prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s
    ec2_sd_configs:
      - region: ap-northeast-2
        port: 80
        access_key: 비밀이여
        secret_key: 비밀이지
        filters:
         - name: tag:PrometheusScrape
           values:
             - Enabled
    relabel_configs:
      - source_labels: [ __meta_ec2_private_ip ]
        regex: '(.*)'
        replacement: '${1}:8080'
        action: replace
        target_label: __address__
      - source_labels: [ __meta_ec2_tag_group ]
        target_label: group
      - source_labels: [ __meta_ec2_instance_type ]
        target_label: instance_type

    static_configs:
      - targets: [ ]

  - job_name: 'node-exporter'
    scrape_interval: 15s
    ec2_sd_configs:
      - region: ap-northeast-2
        port: 80
        access_key: 비밀이여
        secret_key: 비밀이지
        filters:
          - name: tag:PrometheusScrape
            values:
              - Enabled
    relabel_configs:
      - source_labels: [ __meta_ec2_private_ip ]
        regex: '(.*)'
        replacement: '${1}:9100'
        action: replace
        target_label: __address__
      - source_labels: [ __meta_ec2_tag_group ]
        target_label: group
      - source_labels: [ __meta_ec2_instance_type ]
        target_label: instance_type

    static_configs:
      - targets: [ ]

각각의 job에게 사용자 권한을 부여하고 PrometheusScrape이라는 태그가 Enabled 이라는 값을 가지고있는 인스턴스들을 불러와서 private ip, tag group, instance_type 정보를 받아온다. 사실 중요한건 private ip 정보 뿐이다.

오토 스케일링으로 생성되는 인스턴스들은 시작 템플릿에 적용된 정보를 기반으로 생성되는데 이 때 인스턴스에 적용될 태그를 설정할 수 있다.

단일 서버에서 분리 되었기 때문에 spring boot서버 실행과 node-exporter를 실행하는 docker-compose.yml을 작성후 이미지화 하여 시작템플릿으로 사용한다.

알게된 점 + 문제

처음엔 서버비용을 조금이라도 아끼기 위해 프리티어 계정의 micro 인스턴스를 그라파나 서버로 사용했는데 public ip를 받아와서 정보를 수집하니까 이것도 서버간의 데이터 이동이라 data transfer 비용이 발생한다.

프리티어의 경우 1gb가 무료인데 15초 마다 받아오니까 하루인가 이틀만에 동이 나버려서 요금이 발생하려고 하길래 서버를 내리고 다른 방법을 찾았다.

해결

본 계정에 micro서버를 생성해서 그라파나 서버로 사용하기로 하고 private ip를 받아서 vpc로 데이터를 받도록 해주어서 비용이 발생하지 않도록 조치했다. 다만 그라파나 서버 운용비가 발생하지만 프리티어 서버기 때문에 모니터링 서버만큼은 비용이 발생하지 않는 상태라고 할 수 있다.

profile
개발자호소인

0개의 댓글