[오픈스택 개발] Zabbix 플러그인 개발 in MANO

반응형

Zabbix Plugin for Application Monitoring in Tacker VNF Manager

안녕하세요 김민욱입니다.

 

이번 포스팅에서는 제가 오픈스택을 기반으로 개발하고, 이것을 오픈스택에 컨트리뷰션 한 내용을 설명드리겠습니다. 먼저 오픈소스 모니터링 툴인 Zabbix [1]와 오픈스택 NFV MANO 프로젝트인 Tacker [2]를 연동하고 이를 통해 VNF에서 운용되고 있는 애플리케이션에 대해 모니터링하고 장애를 복구하는 구조를 설계하였습니다. Zabbix 및 Tacker는 본 블로그에서도 다루었던 주제이니 참고하시면 될 것 같습니다. 해당 개발 결과는 설계를 기반으로 두 프로젝트를 연동하기 위한 플러그인을 구현하여 오픈스택 MANO 프로젝트에 컨트리뷰션하였습니다. 

 

[Blueprint]       : https://specs.openstack.org/openstack/tacker-specs/specs/queens/zabbix-plugin.html

[Code]                : https://review.opendev.org/#/c/516892/

[Document]       : https://specs.openstack.org/openstack/tacker-specs/specs/queens/zabbix-plugin.html

 

위의 링크에서 [Blueprint]에서는 본 개발을 진행하기 위한 블루프린트를 작성하고, 관련 개발자들과 논의하는 과정을 확인하고 그에 따른 스펙을 확인하실 수 있습니다.  [Code]에서는 블루프린트에 따라 구현한 코드를 확인하고 논의 과정을 확인하실 수 있습니다.  [Document]에서는 해당 개발 내용에 대한 공식 스펙을 확인할 수 있습니다.

 

그럼 개발 내용에 대해 더욱 구체적으로 확인해보도록 하겠습니다.

* 하단에 데모가 포함되어있습니다.

Architecture & Workflow

현재 Tacker에서는 오픈스택 이벤트 알람 프로젝트인 Aodh[3]와 미터링 프로젝트인 Ceilometer [4]를 모니터링 툴로써 연동하고 있습니다. [5] 그렇다면 왜 모니터링 기능이 이미 포함되어있는 Tacker에 Zabbix를 연동하였을까요? 

 

그것은 바로 모니터링 하는 대상의 차이입니다. Ceilometer는 모니터링 프로젝트가 아닌 미터링 프로젝트입니다. 가상화를 담당하는 프로세스들을 통해 가상 머신들의 리소스 사용량을 수집하고 수집된 수치가 기준을 넘을 경우 Aodh를 통해 Tacker에게 알람 이벤트를 전달하는 방식을 사용하고 있습니다. 따라서 Ceilometer는 기본적으로 모니터링 프로젝트가 갖추어야 할 모니터링 서버, 모니터링 에이전트, 데이터 베이스, 이벤트 처리 등의 모든 구성을 가지지 않고 모니터링 에이전트와 동일하게 데이터를 수집하는 역할을 하는 프로젝트입니다. 

 

그렇다면 Ceilometer를 통해 독립적인 가상머신 내부에서 운용되고 있는 웹서버, 게임 서버 등과 같은 애플리케이션들을 모니터링할 수 있을까요? 결론은 없습니다. 왜냐하면 Ceilometer는 가상화 기능으로부터 데이터를 가져오기 때문에 독립적으로 운용되고 있는 가상 머신 내부에는 접근할 수가 없고 오로지 하이퍼바이져가 제공하는 리소스 정보만을 가져올 수 있습니다. 

 

그렇다면 Zabbix는 할 수 있을까요? 네 가능합니다. Zabbix Agent를 독립적인 가상머신에 설치하고, Zabbix Server와 연동하게 되면 Zabbix Agent가 제공하는 여러 수집 기능들을 통해 원하는 애플리케이션과 VM 내부 상태를 모니터링할 수 있습니다. 

 

그림 1. Zabbix-Tacker 연동구조

그림 1에서는 Zabbix-Tacker의 연동 구조를 나타냅니다. 지금부터 하나하나 씩 설명 드리도록 하겠습니다. 먼저 전체 구조는 NFV의 구조와 동일합니다. MANO의 역할로는 오픈스택 Tacker, VIM으로는 오픈스택, 그리고 모니터링 프로젝트로 Zabbix를 사용하였고 Zabbix Plugin을 통해서 Zabbix와 연동하는 구조입니다. 또한 각각의 VM들에는 Zabbix Agent가 설치되는데 저는 개발할 때 자동화를 중요시하기 때문에 VM이 생성되면서 자동으로 Zabbix Agent가 설치되게 됩니다. 

 

사실 개발 모듈 단위로 설명드리고 싶지만, 워낙 양이 방대해져서 이런 컨셉으로 개발했구나라고 정도로 이해하시는 것이 좋을 것 같습니다. 다음은 애플리케이션 모니터링을 위해서 어떻게 VNF 애플리케이션을 모니터링할 것인지 옵션을 설정하는 VNFD에 대해서 설명드리겠습니다. 

 

그림 2. Zabbix 모니터링 정책 VNFD

그림 2에서는 VNF 생성을 위해 작성하는 VNFD에서 각각의 VNF를 모니터링 하기 위한 정책을 정의한 것입니다. 실제로 Tacker는 해당 모니터링 정책을 읽어서 Zabbix에게 Zabbix API를 통해 전달하게 됩니다. 물론 Tacker에는 이런 기능이 없었기 때문에 APP 모니터링 정책을 읽기 위한 기능도 개발을 진행하였습니다. 먼저 모니터링 정책은 크게 Zabbix API 요청을 위한 인증 정보, 특정 애플리케이션 모니터링을 위한 정보, 가상 머신 내부의 OS 모니터링을 위한 정보로 크게 3가지로 나뉩니다.  애플리케이션 모니터링의 경우 먼저 애플리케이션의 이름, 포트 번호, 애플리케이션 상태에 따라서 어떤 복구 액션을 취할지를 나타냅니다. 혹은 애플리케이션이 특정 조건보다 높거나 낮을 경우에도 액션 수행이 가능합니다. 

 

이와 마찬가지로 OS는 가상 머신 내부에서 OS 상태를 모니터링하면서 발생하는 여러 이슈들이나 장애들을 식별하여 관리자는 여러 액션을 정할 수 있습니다. 이에 따라 장애 발생시 Zabbix 에이전트에 의해서 가상 머신 내부의 OS 혹은 애플리케이션이 복구될 수 있습니다. 

 

그럼 이렇게 개발 된 내용에 따라 어떤 방식으로 프로그램이 움직이고 어떻게 자동적으로 모니터링이 수행되는지에 대해 간략하게 그림으로 확인하겠습니다. 

 

그림 3. 워크플로우

그림 3은 모니터링 정책에 따라 어떤 흐름으로 VNF를 모니터링하는지 나타내고 있습니다. 먼저 관리자는 VNFD를 작성하게 되는데 자기 입맛에 따라 작성할 수 있습니다. 원하는 VNF를 작성하게 되는데 그림 4와 같이 Tacker를 설치하시게 되면 기본적인 VNFD 샘플이 주어지니 참고하시면 될 것 같습니다. 그림 4에서는 이미 제가 정의한 VNFD가 기본으로 포함되어 있는 것을 확인하실 수 있습니다. 

 

그림 4. Tacker VNFD Example

이렇게 원하시는 VNFD를 작성한 뒤 tacker 명령어를 이용하여 VNF 생성을 하면 해당 명령어와 VNFD 정보가 tacker client를 통해 tacker 서버에게 전달됩니다. 이때 VNFD에서 애플리케이션 모니터링 정책이 분리되고, 분리된 VNFD는 오픈스택 오케스트레이션 프로젝트인 heat가 식별할 수 있도록 heat 템플릿으로 변환되어 heat에게 전달됩니다.

 

heat는 이렇게 변형 된 heat 템플릿을 보고 VM, 네트워크를 생성하도록 Nova, Neutron 등 오픈스택 프로젝트들에게 각각 명령을 전달합니다. 그럼 이전에 분리된 모니터링 정책은 어떻게 될까요? 해당 부분은 제가 개발한 모듈로 정책이 전달되고 이는 Zabbix에게 전달하기 위해 API 형식으로 변경됩니다. 모든 API가 만들어지면 해당 모듈은 Zabbix에게 API를 통해 내용을 전달하게 됩니다.  이렇게 되면 Heat를 통해서 VNF는 생성되고 Zabbix는 생성 된 VNF의 Zabbix Agent와 연결하게 됩니다.

 

앞서 저는 자동화를 굉장히 중요하게 생각합니다. 제가 관리자 입장이라도 한 번의 명령만으로 모든 VNF에 Zabbix Agent의 설치, 구성 등이 자동적으로 된다면 얼마나 편할까요? 다행히 VNFD에는 VNF를 생성하고, VNF 초기화 단계에서 스크립트를 수행할 수 있는 User Data 부분을 지원하고 있습니다.

 

그림 5. 자동화 구성을 위한 VNFD User Data

 

그림 5와 같이 제가 정의한 VNFD에는 Zabbix Agent를 자동으로 설치하고 구성하는 스크립트가 포함되어 있습니다. 해당 user_data는 최종적으로 Nova에게 전달되고 Nova는 VM 초기화 단계에서 해당 스크립트를 수행하게 됩니다. 해당 스크립트는 Zabbix Agent를 설치하고, zabbix conf파일에 Zabbix 서버와 관련된 정보를 삽입하도록 하는 명령입니다. 

 

Demo

지금부터는 앞서 설명드렸던 Zabbix Plugin을 통해 처음부터 끝까지 어떻게 Zabbix와 Tacker 서로 상호 작용하는지 보고 시나리오를 기반으로 장애 복구까지 진행하는 것을 확인하도록 하겠습니다. 

 

그림 6. 시나리오 워크플로우

그림 6에서는 Zabbix Plugin을 사용을 위한 VNFD 작성부터 시작하여 장애가 발생하였을 때 어떻게 복구되어지는지 시나리오를 나타내고 있습니다. 먼저 데모 영상에서는 Zabbix VNFD를 생성하게 됩니다. 그 Zabbix API를 통해 Zabbix Server에게 모니터링해야 할 VNF의 정보를 전달하고 VNF들이 모니터링 대상으로 등록된 것을 Zabbix 웹을 통해 확인하게 됩니다. 그다음 웹서버를 통해 실시간으로 동영상을 시청하다가 다운시켰을 때 어떻게 트리거가 상황이 발생하고 관리자가 장애를 식별하는지 또 장애가 어떻게 복구되는지까지가 이번 워크플로우 시나리오입니다. 

 

 

Zabbix Plugin

 

www.youtube.com

 

결론

이번  포스팅에서는 직접 개발한 Zabbix Plugin에 대해 구조와 VNFD, 데모까지 설명하였습니다. 이는 오픈스택 Tacker에 정식으로 코드기여가 되었고, 언제든지 Git에서 코드를 확인하실 수 있습니다. 많은 도움되시길 바랍니다.

감사합니다. 

인용글

[1]오픈소스 모니터링 툴 Zabbix(1) : 이론편 : https://delightwook.tistory.com/26?category=766954

[2]오픈스택 연구하기(2) : NFV Project Tacker : https://delightwook.tistory.com/17?category=766948

[3] Aodh : https://docs.openstack.org/mitaka/ko_KR/install-guide-rdo/ceilometer-aodh.html

[4] Ceilometer : https://docs.openstack.org/ceilometer/latest/

[5] Tacker 모니터링 :  https://docs.openstack.org/tacker/pike/user/alarm_monitoring_usage_guide.html

업데이트로그

------------------------------------------------------------------------------------------------------------------------------------

해당 글은 스스로 연구한 내용을 통한 주관적인 이해를 바탕으로 작성 되었습니다. 수정 할 부분이 있거나, 다른 의견이 있으시다면 언제든지 말씀해주시면 반영하도록 하겠습니다. 읽어 주셔서 감사합니다. 끝으로 불법으로 복제하는 것은 금합니다.

 

반응형

댓글

Designed by JB FACTORY