monitoring

prometheus service discover, 오토스케일링 그룹 EC2 수집하기

나뭇빛자루 2023. 4. 27. 16:01
반응형

prometheus service discover 을 이용해 동적으로 EC2의 메트릭을 수집하기

제목이 쫌 장대하게 긴데 결론적으로 말하자면 오토스케일링 그룹에서 유동적으로 EC2가 늘어 나는걸 수집하고 싶다 !

라고 생각해서 검색하다보니 service discover라는 것이 있어서 함쓰윽 공신문서 돌아보니 내가 원하는 기능이 딱 있어서 바로 적용을 시켜 봤다.

여짓까지 prometheus 수집을 IP와 포트를 바탕으로 EC2 기존 수집을 했는데 ( 귀찮지만 레이블 설정을 이쁘게 하려고 ) MSA 로 넘어가고 쿠버네티스로 넘어가고 있는 과도기라 바쁘기도 하고 모든 서버의 태깅을 해서 관리를 하는 것도 괜찮겠다 란 생각이 들었다.

 

잡담이 길어졌는데 한마디로 EC2의 tag를 이용해서 관리가 가능했던 것입니다 ! 

 

config 설정은 아래와 같습니다.

      - job_name: '프로메테우스에서 타겟 이름이 됩니다.'
        ec2_sd_configs:
          - region: ap-northeast-2
            access_key: '엑세스키' #여기 설정은 ec2에 IAM 에 ec2테그 롤이 있음 안써도 됩니다. 
            secret_key: '시크릿키'
            port: 9182
        relabel_configs:
        - source_labels: [__meta_ec2_instance_id]
          target_label: instance
        - source_labels: [__meta_ec2_tag_aws_autoscaling_groupName]
          target_label: aws_autoscaling_groupName
        - action: keep
          regex: '오토스케일그룹 이름'
          source_labels: [__meta_ec2_tag_aws_autoscaling_groupName]

여기서 중요하게 볼 부분은 ec2_sd_configs: 설정인데, 이게 EC2서비스 디스커버리 구성을 설정하는 데 사용됩니다.

 

여기서는 region을 설정하여 EC2 인스턴스가 위치한 지역을 지정하고, access_key 및 secret_key를 설정하여 AWS 계정 자격 증명을 지정합니다. port는 Prometheus에서 수집할 메트릭의 포트 번호를 지정합니다.

 

relabel_configs는 수집된 메타데이터에서 새로운 레이블을 생성하거나 기존 레이블을 변경하는 데 사용됩니다. source_labels는 기존 레이블의 이름을, target_label은 새 레이블의 이름을 나타냅니다.

 

예를 들어 __meta_ec2_instance_id 레이블은 EC2 인스턴스의 ID를 나타내며, instance 레이블로 이름을 바꿉니다. 이렇게 함으로써 Prometheus에서는 instance 레이블을 사용하여 각 EC2 인스턴스를 구별할 수 있습니다.

 

마지막으로, relabel_configs에서는 aws_autoscaling_groupName 레이블도 생성됩니다. 레이블은 EC2 인스턴스가 속한 Auto Scaling 그룹의 이름을 나타내며, __meta_ec2_tag_aws_autoscaling_groupName 메타데이터에서 추출됩니다. 또한 action "keep" 설정되어 있어, aws_autoscaling_groupName 레이블에는 오토스케일그룹 이름으로 설정된 값만 남기고 다른 값은 제거됩니다. 이를 통해 Prometheus 특정 Auto Scaling 그룹에 속한 EC2 인스턴스만 수집할 있습니다.

 

그리고 요즘 AWS에서 추천하는 방법은 엑세스키, 시크릿키를 이용하는 게 아닌 실행되는 EC2의 IAM 롤을 이용하는 경우가 보안적으로 안전합니다. 그래서 해당 설정 있을 때 안써도 될 것 같다란 생각이 많이 들긴 했는데 역시나 안써도 잘 작동이 됩니다 !!

 

적용 완료

아 ~ 잘 됩니다 ~ㅅ~


ps. 잡담 타임

무튼 ~ 잡담 간단히 하자면 AWS SDK에서 인증 순서가 있는데 없으면 다음 것을 찾는 것 같아서 될 것 같다 ! 라고 생각 했는데 역시 잘되서 뿌듯? 하다고 해야하나 기분이가 좋아졌습니다. 읽는 순서는 아래와 같습니다.

  1. 환경 변수 (Environment Variables) - AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY 설정하여 AWS 계정 자격 증명을 직접 지정할 있습니다.
  2. 자격 증명 파일 (Credential Files) - ~/.aws/credentials 또는 지정된 파일에 자격 증명을 저장하여 사용할 있습니다.
  3. IAM 역할 (IAM Roles) - EC2 인스턴스 또는 ECS 컨테이너와 같은 AWS 리소스에 할당된 IAM 역할을 사용하여 인증할 있습니다.
  4. EC2 인스턴스 프로필 (EC2 Instance Profile) - EC2 인스턴스에 IAM 역할을 연결하여 인증할 있습니다.

 

반응형