오픈스택 연구하기 : RCA Project Vitrage

반응형

오픈스택 연구하기 : RCA Project Vitrage 

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

 

이번 포스팅에서는 오픈스택에서 RCA 프로젝트인 Vitrage에 대해 말씀드리고자 합니다. 제가 개발한 내용들을 보면 아시겠지만, 고가용성 연구를 위해 Vitrage를 이용하여 많은 개발을 진행하기도 하였습니다. 먼저 Vitrage에 대해 말씀드리기 전에 RCA에 대해 말씀드리겠습니다. 

 

RCA는 Root Cause Analysis의 약자로 장애 원인을 분석하는 프로젝트입니다. 특정 장애가 발생했을 때 해당 장애가 왜 발생했는지에 대해서 이유를 밝혀 내는 것입니다. RCA에 대해서는 관련 논문이 몇개 있으니 꼭 확인해보시길 바랍니다. 

 

따라서 현재까지 오픈소스 기반의 RCA 프로젝트는 오픈스택의 Vitrage와 ONAP의 Holmes가 있습니다. Holmes에 대해서는 다른포스팅에서 다루도록 하겠습니다.

 

그럼 지금부터 Vitrage의 구조를 중심으로 이야기 해볼까합니다. 

Architecture

Vitrage는 2016년에 처음으로 정식 릴리즈가 되었습니다. 저도 한 때 Vitrage에 컨트리뷰션에 참여하기도 하였고 직접 서밋에 참가해서 개발자들과 미팅을 하기도 하였습니다. 주로 Nokia에서 프로젝트를 리드하고 있습니다. 

 

그림 1. Vitrage 심볼

그림 1에서는 Vitrage 심볼을 나타내는데, 원래 Vitrage의 의미가 성당이나 교회 유리창에서 보이는 형형색색의 유리 조합되어 있는 기법을 얘기한 다고 합니다. 그래서 기린의 몸이 형형색색이기도 하고요. 

 

그림 2. Vitage 구조

그림 2에서는 Vitrage 구조를 나타냅니다. [1] 굉장히 복잡해 보이지만 크게 크게 묶어서 보면 사실  어려운 부분은 없습니다. 먼저 Vitrage Dashboard는 Vitrage가 제공하는 여러 데이터들을 시각화하여 표현해줍니다. 또한 장애 알람이나 현재 리소스들의 상태를 한눈에 리스트로 확인하는 기능도 제공하고 있습니다. 

 

좌측을 보시게 되면 Nova,Cinder,Zabbix 등등이 있는데 이들로부터 리소스의 정보를 가져오게 됩니다. 정확하게 말하면 오픈스택 프로젝트들로부터는 리소스 정보 가상 머신, 네트워크 연결 정보들을 가져오고 모니터링 프로젝트 Zabbix, Prometheus 등으로부터는 장애 알람을 가져오게 됩니다. 

 

그러나 무턱대고 가져오는 것이 아닌 해당 프로젝트들에 접근하여 데이터를 가져오기 위한 일종의 플러그인, Data Source Drivers들이 각각 존재하고 이들을 통해 주기적으로 데이터를 가져오게 됩니다. 그리고 엔티티 그래프에서는(Network X 라이브러리 기반으로 구현) 이들의 데이터를 모두 모아서 딕셔너리 형태로 만듭니다. 이 딕셔너리 각각에는 해당 리소스의 정보와 인덱스가 새겨지게 됩니다.  그 이후 딕셔너리는 Vitrage Dashboard에게 전달되고 이를 인덱스를 기준으로 시각화하여 트리를 만들게 됩니다.  딕셔너리는 각각 엔티티로 불리는 리소스의 정보도 있지만 리소스 간의 연결 정보도 있습니다. 가상 머신 인덱스가 1번이고 네트워크 인덱스가 2번이라면 1번과 2번의 연결 정보 또한 딕셔너리에 포함되어 있습니다. 

 

그림 3. RCA 트리구조

그림 3에서는 RCA 트리구조를 나타내는데 위에서 언급한 딕셔너리를 시각화 시키면 보기와 같은 모습이 나옵니다. 여기서 노란색의 알람은 모니터링 프로젝트로부터 장애 알람을 가져와 적절한 리스트에 붙인 모습이 됩니다.  이렇게 되면 한눈에 인프라, 하드웨어, 가상 머신에서 발생하는 장애를 식별하기 편리합니다. 

 

그림 4. RCA 

Vitrage는 이렇게 RCA 즉  원인부터 결과까지 한 눈에 파악할 수 있는 기능도 제공하고 있습니다.( Vitrage 프로젝트 관련 영상 참조) 가장 상단에서는 인터페이스 장애가 발생했고 그래서 컴퓨트 노드의 서비스가 다운되었으며, 그로 인해 가상 머신을 참조할 수 없게 되면서 서비스가 다운되었다는 결과가 발생하였습니다. 

 

사실 Vitrage가 이렇게 자동으로 장애 원인 분석을 해줄 수 있었다면 좋겠지만, 아쉽게도 관리자가 Template를 작성해야 합니다. 먼저 Vitrage 관련 conf을 작성해서 어떤 리소스(가상머신, 인프라)에 대한 알람 정보를 가져올지 conf을 작성하여 Vitrage에게 넘겨야 합니다. 그래야 자동적으로 장애 알람을 가져오게 됩니다. 두 번째는 위에서 보이는 트리를 만들기 위해서는 Vitrage 템플릿을 작성해야 합니다.

 

그림 5. Vitrage 템플릿

그림 5에서는 Vitrage 템플릿을 나타냅니다. 해당 템플릿을 라인 바이 라인으로 분석하고 싶지만 오히려 복잡할 것 같아서 간단하게 말씀드리면, "모니터링 프로젝트로부터 이런 알람이 오면 대상에 대해 특정 알람을 띄워주고 둘을 연결해라" 이런 서술을 하는 겁니다. 이는 H/W 장애 알람이 오면 해당 H/W가 포함하고 있는 인스턴스에 각각 인스턴스를 사용할 수 없다는 장애 엔티티를 붙여라가 됩니다. 따라서 자동화 부분이 조금 아쉬운 프로젝트이긴 하나 프로젝트의 퀄리티가 상당하고 또 시각화 기능이 많이 좋다고 생각됩니다. 

 

결론

이번 포스팅에서는 Vitrage에 대해 간략하게 말씀드려보았습니다. 물론 사용법에 대해서도 추가하면 좋겠지만 양이 너무 방대해질 것 같아서 차라리 다음 포스팅에서 올리는 것이 좋다고 생각하였습니다. 혹 RCA에 관심이 있으시다면 해당 프로젝트를 이용해서 한 번 실험해보시는 것을 추천드립니다.  문의가 있으시다면 연락 주시면 말씀드리겠습니다.

 

감사합니다. 

인용글

[1] Openstack Vitrage Docs : https://wiki.openstack.org/wiki/Vitrage

업데이트로그

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

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

 

반응형

댓글

Designed by JB FACTORY