본문 바로가기
🟢 Graph

콜로니 그래프(Colony Graph): 클라우드 서비스를 시각화하기 - 01

by 제리강 2024. 3. 10.
TL;DR

클라우드를 기반의 서비스를 운용하는 기업은 서비스의 규모에 따라 수십, 수백 개의 인스턴스를 관리하는 부담을 가지게 된다.
이번 포스트에서는, 그래프 표현을 이용해 클라우드의 프로세스를 시각화하고 이를 통해 클라우드 관리를 용이하게 하는 'Colony Graph' 방법론에 대한 Brendan Gregg의 포스트를 번역 및 분석해본다.

원문은 약 10년 전 작성된 오래된 포스트이지만, 클라우드 서비스에 대한 흥미로운 그래프 분석 양상을 제시하고 있다.

 

원문 링크: https://www.brendangregg.com/colonygraphs.html

* 이해를 돕기 위한 의역이 포함됩니다.

** 이미지를 클릭하면 큰 이미지로 볼 수 있습니다.

 

 

콜로니 그래프(colony graph)*는 컴퓨터의 유기적인 형태(life forms)를 간단히 시각화한 것이며, 이를 process colony graph, 또는 줄여서 ptree graph라고도 한다. 이는 실시간 프로세스와 그 parent 및 child 관계를 보여준다.

클라우드란 어떤 모습일까? 고객들은 다양한 애플리케이션을 실행하는 수천 개의 인스턴스를 보유하고 있을 수 있다. 클라우드 제공업체 또한, 상상할 수 있는 모든 것을 실행하는 수천 명의 고객을 보유하고 있을 것이다.

프로세스 콜로니 그래프(process colony grpah), 또는 ptree 그래프는 기본 단위 프로세스의 세부 정보를 기반으로 실시간(live) 애플리케이션 환경을 시각화하는 방법이다. 애플리케이션의 수, 유형, 활동을 보여주며 비정상적이거나 문제가 있는 영역을 파악할 수 있다.

다음은 몇 개의 프로세스에서 전체 클라우드 데이터센터에 이르기까지 다양한 규모의 ptree 그래프를 보여준다.

 

* 후술되지만, 이는 클라우드 프로세스를 그래프로 시각화하면 박테리아 군집(colony)과 유사한 형태를 보인다 하여 저자가 붙인 이름이다.

 

 

 

1. 프로세스

먼저, 몇 가지 프로세스만으로 구성된 간단한 그래프를 살펴보자.

 

 

Parent-child 관계는 화살표로 표시된다. 각 프로세스의 크기는 최근 CPU 사용량을 반영한며, 크기가 클수록 더 바쁘다는 것을 의미한다. 색상은 프로세스 유형을 식별하며, 시스템 프로세스는 녹색으로 표시된다.

이러한 속성들은 사용자가 조정할 수 있다. 예를 들어, 프로세스 노드의 크기를 메모리 사용 공간을 표시하는 것으로 변경할 수도 있다.

 

 

 

2. 영역 (Zone) 또는 컨테이너(Container)

아래는 영역(zone)* 또는 컨테이너(container)라고도 하는 일반적인 클라우드 컴퓨팅 노드의 모습이며, 본 예제에서는 웹 서버로 설정했다.

 

*가용 영역(availability zone)에서 영역의 개념과 달리, 프로세스의 그룹을 의미하는 더 작은 단위의 개념으로 보인다.

 

 

웹 서버의 마스터 프로세스작업자(worker) 프로세스로 둘러싸여 있으며 빨간색으로 표시되어 있다. 작업자 프로세스는 웹의 요청(request)에 응답하는 작업을 수행하므로 더 바쁘기 때문에(즉, CPU 사용량이 더 높으므로) 더 크게 그려져 있다.

가운데에는 영역의 '초기화(init)' 프로세스를 나타내는 회색 타원이 있다(실제 고객 영역 이름은 나타내지 않았다). 영역을 구성하는 전체 시스템 프로세스의 집합과, 그 집합에 대한 관계들도 볼 수 있다.

 

 

 

3. 서버

이제, 9개의 영역을 실행하는 전체 물리적 서버를 표시하도록 그래프를 확장해 본다.

 

 

녹색은 php, 파이썬, 자바 등과 같은 언어 관련 프로세스를 나타내며, 홍색은 MySQL, memcached, Riak 등을 포함한 데이터베이스 프로세스를 나타낸다. 녹색/빨간색 영역은 Ruby/Apache 서버이며, 왼쪽 상단 영역에는 mysqld와 memcached가 함께 있다. 상단의 가장 큰 분홍색 프로세스는, 사용 중인 MySQL 서버이다.

시각화 과정 없이도, 동일한 데이터를 보기 위해 ps 또는 ptree를 사용하여 프로세스 목록을 볼 수 있다. 하지만, 텍스트 출력 페이지에서 어떤 프로세스가 존재하고 있는지, 어떤 프로세스가 사용 중인지 빠르게 파악하는 것은 쉽지 않다. 서버 랙(rack)에 있는 동일한 데이터를 수백 페이지에 달하는 텍스트로 살펴본다고 생각해보면, 이러한 그래프 시각화의 필요성을 체감할 수 있다.

 

 

4. 랙

다음은 랙(rack)*의 모든 영역(zone)을 시각화한 그래프이다.

 

*여러 개의 서버를 마운트(mount)하는 프레임이나 캐비닛같은 장치로, 클라우드에서도 여러 서버를 묶는 단위로 생각할 수 있다.

 

랙 범위까지 확장한 그래프에서는 더 많은 영역 유형이 표시되면서, 각 영역을 빠르게 식별할 수 있다. 다섯 개의 녹색 원으로 이루어진 체인은 5개의 바쁜 Perl 프로세스를 가진 Perl 서버이다. 이 규모에서 이 시각화는 페트리 접시(petri dish)에 있는 박테리아 군집처럼 보이기 시작한다(콜로니 그래프란 이름이 여기에서 유래했다).

 

 

 

5. 데이터센터

이제 여러 개의 랙으로 구성된 데이터센터를 살펴보자. 이를 '가용성 영역(availability zone)'이라고 한다.

 

 

전체 데이터센터의 모든 프로세스를 하나의 이미지에 나타냈으며, 여기에는 300개가 넘는 서버와 3500개가 넘는 영역이 포함된다. 이 이미지를 생성하기 위한 프로세스 데이터를 수집하는 것은 생각보다 쉽다. OS 가상화 클라우드이기 때문에 3500개의 개별 영역 인스턴스가 아닌 300개의 물리적 서버에 로그인하기만 하면 실행 중인 모든 프로세스를 캡처할 수 있다.

이 이미지는 자동으로 생성되도록 할 수 있고, 이를 통해 클라우드에서 이상 징후나 변경해야 할 사항을 찾을 수 있다. 지금까지 그래프를 이용해 많은 것을 발견했는데, 여기에는 예상치 못한 발견도 종종 있으며 어떤 발견은 아름답기까지 하다.

 

 

  • 데드 존(Dead Zone)

위 그래프 가운데에 동심원처럼 보이는 6개의 큰 영역이 발견되었는데, 확대한 모습은 다음과 같다.

 

 

이는 깜짝 놀랄만한 발견이었는데, 이 영역은 cron(시스템 스케줄러)을 통해 셸(shell) 프로그램을 실행하고 있었고 그 셸 프로그램이 getent의 결과를 처리하고 있었다. 하지만 getent 프로세스는 비정상적으로 완료되지 않는 LDAP(Lightweight Directory Access Protocol) 조회(lookup) 단계에 멈춰 있었고, 이 때문에 관련 프로세스도 모두 멈춰 있었다. Cron은 영역이 프로세스 한도에 도달할 때까지 이러한 프로세스를 계속 생성했다. 다행히, 이 영역은 다른 영역에 피해를 주지 않는 오래된 테스트 영역이었다.

 

 

 

6. 구현

ptree 그래프는 프로세스 ID, 상위 프로세스 ID, 프로세스 이름, 최근 CPU 비율을 기반으로 구축되며, ps 명령어를 사용하여 수집할 수 있다.

ps 명령어를 이용해 수집된 데이터는 별도로 작성된 실행파일에 따라 Graphvis에서 사용하는 dot 형식 데이터로 변환된 후, Graphvis의 neato 패키지를 이용해 그래프로 시각화된다. 원저자가 공개한, 명령어 예제의 일부는 다음과 같다.

 

$ ps -eo ppid,pid,rss,pcpu,comm | awk '{ print "-", $0 }' > ps-macbook.txt
$ ./ps2gv-p.sh ps-macbook.txt
$ neato -Tpng -Nfontsize=12 -Elen=1.9 ps-macbook.gv -o ps-macbook.png

 

 이 포스트에서는 특별히 구현은 진행하진 않으므로, 구현의 양상만 간단히 확인한다.

 

 

 

7. 결론

프로세스 콜로니 그래프는 프로세스의 parent-child 관계를 간단히 시각화한 것으로, 전체 데이터센터에 이르는 대규모 환경을 연구하는 데에 유용한 방법이다. 이는 ps 명령어와 그래프 시각화를 사용하여 만든 실험적인 시각화로, 다른 프로세스 관찰 도구가 간과했던 문제들을 발견함으로써 유용함을 입증했다.

 

 

 

마치며

이 포스트에서는 클라우드의 프로세스를 노드로, 그 종속(parent-child) 관계를 엣지로 하여 클라우드 서비스를 그래프로 표현해 분석했다.
또한, 이러한 그래프 시각화를 통해 실제로 문제가 있는 프로세스를 발견하기도 했다.
이러한 시각화 방법론은 분명 유용성이 있어 보이지만, 상시로 변화하는 클라우드 서비스에서 동적(dynamic)인 분석이 가능할 지 의문이 남는다.
저자는 원글에서 더 많은 분석 예제를 소개하고 있으므로, 이 예제들을 다음 포스트에서 더 살펴볼 것이다.

 

 

 

댓글