AWS에서 zabbix를 이용한 autoscaling ec2 자동등록/자동삭제
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
zabbix가 오픈소스로서 참 많은 기능을 제공 하고 있는데, jira와 마찬가지로 되는건 많은데 가려온 곳은 아슬아슬하게 피해가는 재주를 가지고 있는 듯 하다. 필요한 기능은 거의 다 있는데 될듯 하면서도 안되는데 jira와 zabbix. 특히 AWS에서 제공하는 AutoScaling Group을 이용한 EC2의 scale out/in 을 이용하면 zabbix에서 기본으로 제공되는 기능으로는 EC2를 제대로 모니터링 할 수가 없다. 어찌어찌 Host 등록은 한다 하더라도, EC2가 scale in 되어 terminated되었을 경우엔, 그냥 그대로 zabbix agent 와 통신할 수 없다는 에러를 내뿜으며 방치되어 버린다.
인터넷을 뒤져보아도 깔끔하게 처리할 수 있는 방법이 없고, 스크립트와 다른 기능들을 이용하여 scale out/in 에 의한 EC2의 자동등록/자동삭제를 구현하고 있었다. 그러나 이마저도 실제로 해보니 메뉴가 틀리거나 옵션이 없거나, 실제로 동작하지 않는 경우도 많았다. 최종적으로는 여러가지 정보를 취합하여 실제로 동작하는 방법을 찾아 냈으니 참고 삼아 이곳에 남기도록 한다.
시행착오
- auto discovery 기능을 시도 해보았지만, 24bit 네트웍에 대해 15분 이내로 처리가 끝나지 않아, 다음 discovery가 계속하여 지연되는 현상이 발생했다. 15분 이면 terminated된 인스턴스에대해 agent 통신 에러가 발생하는 타이밍이기 때문에 유효한 방법이 아니라고 생각되어 포기하였다.
※ zabbix version : 4.0TLS
※ 특별한 설정내용이 없는 항목은 디폴트값이나 환경에 맞추어 적절히 설정할 것
zabbix_agentd.conf
먼저 ec2의 zabbix_agentd.conf 파일을 수정해 줄 필요가 있다.
//ec2의 instance id를 얻기위해 ec2에서 meta-data를 조회한다.
//meta-data조회를 위한 curl명령어 실행을 위해 지정
EnableRemoteCommands=1
//ec2의 hostname은 hostname_instance-id로 하고 싶으니 주석처리를 하고
//HostnameItem에 system.hostname을 지정해 준다.
//Hostname은 고정 hostname을 지정할때 이용한다.
# Hostname= →이 라인을 주석처리
HostnameItem=system.hostname
//auto scaling group이 여러개 존재할 경우 auto registration에서 구분하기 위한 구분자를 지정한다.
HostMetadata=<mystring>
Template#1
autoscaling이 필요한 ec2도 있을 터이고 그렇지 않은 ec2도 있을 것이다. template에 autoscaling 대응 내용을 설정한 뒤, 필요한 경우에 host 등록을 하면서 template을 추가하면 적용되도록 할 것이다.
Configuration에서 Templates를 선택하여 Template를 생성한다. Template name에 EC2AutoScale 을 지정하고, 필요한 Groups을 지정해준다. Macro와 Item, Trigger등은 나중에 따로 추가한다.
Auto Registrion
scale out에 의해 ec2가 추가 되었을 경우 zabbix_agnetd.conf 를 기반으로 zabbix가 기동된다. 그 설정을 이용하여 zabbix에서 감시대상 host로서 자동으로 추가하게 되는 설정이다. 추가는 아주 간단하다. 추가는.......
- Configuration-Action에서 Event source를 Auto registration으로 변경한 뒤, Create action을 클릭
- Name에 autoreg-test 등 적당한 이름을 지정
- New condition에서 Host metadata contains <mystring> 을 지정한다.
mystring은 zabbix_agentd.conf 에서 지정한 문자열을 똑같이 지정한다.
이 conditon은 자기 환경에 맞추어 적절하게 수정해도 문제 없다. - Add버튼을 클릭하여 Conditions에 추가되는 것을 확인
- Operations에서 필요한 동작을 추가한다.
- Add host
- Link to templates : Template#1에서 작성한 EC2AutoScale을 지정
- 밑에 있는 Add버튼을 클릭하여 Action을 추가
Template#2
- Configuration-Templates-Item을 선택후 Create item을 클릭
- Type에서 Zabbix agent(active)를 선택
- Key에서 curl을 이용한 instance id를 조회하는 명령어를 지정
system.run[curl -s -f http://169.254.169.254/latest/meta-data/instance-id] - History storage period 를 Storage period를 선택하여 90d로 지정
instance id가 변경되었나 확인 하기 위해선 history를 반드시 저장해야할 필요성이 있으니 참고. - New application에서 EC2 meta-data를 지정(변경 가능)
- Add를 선택하여 Item을 추가
Template#3
- Configuration-Templates-Item을 선택후 Create item을 클릭
- Type에서 External check를 선택
- Key에서 나중에 작성할 ec2 status확인용 스크립트를 지정
get_ec2_status.py[-i,{EC2_INSTANCEID}] - Type of information은 Character를 지정
- History storage period도 Template#2와 동일한 이유로 90를 지정
- New application에서 EC2 meata-data를 지정(변경가능)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댓글
댓글 쓰기