티스토리 뷰

728x90
반응형

서론

마이크로서비스 환경에서 폴리그랏의 의미는 "언어의 종속성만을 없애는 것이 아닌 기반 인프라와 소프트웨어를 입맛에 맞게 선정하여 대상의 폭을 넓혀갈 수 있음"으로 해석할 수 있다. 이는 서비스 최적화 환경을 구성한다는 점에서 장점이 있고, 특히 많은 오픈소스 소프트웨어를 무상으로 활용할 있다는 데에 의미가 크다.

다양한 오픈소스 소프트웨어들은 많은 프로젝트에서 선호되고 있지만, 반대로 여러 문제를 야기하기도 한다.

가장 큰 문제는 유지보수이다. 오픈소스이다보니, 프로젝트 구성원 내에서 운영/유지보수가 가능한 경우가 아니라면, 장애나 주요 이벤트에 대응이 어려울 수 있다. 각 사에서는 이와 같은 문제를 해소해 나가기 위해 오픈소스 소프트웨어를 담당하는 팀을 만들고, 지속적으로 학습해 나가는 방안을 마련하고 있지만, 그 기술력을 높이기 위해서는 내재화가 선행되어야 하고, 이는 많은 시간이 소모될 수 밖에 없다. 결국은 오픈소스에서 제공하는 대시보드를 이해하고, 주요 기능에 대해서만 내재화를 진행하여 고도화 해 나가는 경우가 다반사이다. 이때 대부분의 회사에서 비슷하게 경험하고 있는 이슈가 있는데 바로 오픈소스들이 제공하는 다양한 대시보드의 늪에 갇혀 허우적대는 경우이다.

최근 수행한 프로젝트에서 사용한 대시보드 종류만 살펴보자면,

  • Prometheus Dashboard
  • Grafana
  • Kiali
  • Zipkin
  • Kibana
  • Redis Insight
  • Kafka CMAK
  • CA API Gateway Dashboard
  • Developer Portal
  • Kubernetes Dashboard
  • Jenkins
  • GitLab
  • Nexus
  • Harbor
  • APM
  • SMS
  • 그 밖에 프로젝트에서 사용하는 여러 포털

등을 MSA파트에서 사용했고, 대부분은 오픈소스 기반으로 제공하는 대시보드이다.

물론 이러한 대시보드를 어떻게 잘 다루고 활용할 것이냐는 그 회사자체의 거버넌스로 접근해야 할 문제이긴 하지만, 본 포스팅에서는 OpenSource인 Heimdall 대시보드를 활용하여 여러 대시보드들을 통합 관리할 수 있는 손쉬운 과정에 대해 알아보도록 하자.

Heimdall 공식홈페이지 : https://heimdall.site/

 

Heimdall Application Dashboard

Generic Apps One of the benefits to Heimdall is you can add a link to absolutely anything, whether it's intrinsically supported or not. With a generic item, you just fill in the name, background colour, add an icon if you want (if you don't a default Heimd

heimdall.site


포스팅 순서

  • Heimdall 설치
  • Heimdall 커스터마이징

본론

Heimdall 은 모든 애플리케이션과 자주 방문하는 링크를 한 페이지로 정리하는 북마크와 같은 기능을 오픈소스로 구현한 소프트웨어이다. Naver, Daum, Google 등의 웹포털사이트나 즐겨찾는 페이지를 추가하여 나만의 북마크 환경을 구성할 수 있다. 지금부터 Heimdall을 설치해 보도록 하자.

1) Heimdall 설치

Heimdall은 두 과정만 거치면 설치가 완료된다.

  • docker volume 생성
  • docker run 기동

1) docker volume 생성

docker volume create heimdall

Heimdall 구성 정보를 영구적으로 저장하기 위해 볼륨을 생성한다.

[root@ip-192-168-86-253 heimdall]# docker volume create heimdall
heimdall
[root@ip-192-168-86-253 heimdall]#

생성한 볼륨은 이후 container 내부 config 디렉토리를 저장하여 재기동 후에도 동일 상태를 유지하기 위함이다.

[root@ip-192-168-86-253 heimdall]# docker volume ls
DRIVER    VOLUME NAME
local     heimdall
local     netdatacache
local     netdataconfig
local     netdatalib
[root@ip-192-168-86-253 heimdall]# docker volume inspect heimdall
[
    {
        "CreatedAt": "2021-08-21T02:57:14Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/heimdall/_data",
        "Name": "heimdall",
        "Options": {},
        "Scope": "local"
    }
]
[root@ip-192-168-86-253 heimdall]#

아래 기동이 완료된 이후 다음과 같이 확인해 보면 실제로 볼륨이 동기화 되어 로컬에 저장되고 있는 것을 확인할 수 있다.

[Internal Heimdall Container]
[root@ip-192-168-86-253 heimdall]# docker exec -it heimdall /bin/bash
root@894baa6ea919:/# ls
app  bin  config  defaults  dev  docker-mods  etc  home  init  lib  libexec  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@894baa6ea919:/# cd config/
root@894baa6ea919:/config# ls
custom-cont-init.d  custom-services.d  keys  log  nginx  php  www
root@894baa6ea919:/config# 

[Local Directory]
[root@ip-192-168-86-253 heimdall]# docker volume inspect heimdall
[
    {
        "CreatedAt": "2021-08-21T02:57:14Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/heimdall/_data",
        "Name": "heimdall",
        "Options": {},
        "Scope": "local"
    }
]
[root@ip-192-168-86-253 heimdall]# cd /var/lib/docker/volumes/heimdall/_data
[root@ip-192-168-86-253 _data]# ls
custom-cont-init.d  custom-services.d  keys  log  nginx  php  www
[root@ip-192-168-86-253 _data]#

2) docker run 기동

docker run \
--name=heimdall \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=america/new_york \
-p 80:80 \
-p 443:443 \
-v heimdall:/config \
--restart unless-stopped \
linuxserver/heimdall

볼륨이 생성되면 도커 이미지를 다운로드하고 기동한다. 옵션정보는

옵션 설명
-p 80:80 노드 80 포트 > 도커 컨테이너 80 포트 라우팅
-p 443:443 노드 443 포트 > 도커 컨테이너 443 포트 라우팅
-v heimdall:/config heimdall 도커볼륨 = 도커 컨테이너 /config 디렉토리 동기화
-e TZ=america/new_york 타임존 설정
-e PGID=1000 Process Group ID
-e PUID=1000 Process User ID
[root@ip-192-168-86-253 heimdall]# docker run \
> --name=heimdall \
> -e PUID=1000 \
> -e PGID=1000 \
> -e TZ=america/new_york \
> -p 80:80 \
> -p 443:443 \
> -v heimdall:/config \
> --restart unless-stopped \
> linuxserver/heimdall
Unable to find image 'linuxserver/heimdall:latest' locally
latest: Pulling from linuxserver/heimdall
564738e1d4e3: Pull complete 
05602526fc2e: Pull complete 
b440ce367f41: Pull complete 
46f9403880e3: Pull complete 
1e6aece89c58: Pull complete 
41dae65a5d47: Pull complete 
ad2806e5005c: Pull complete 
12fbd2f2bfb9: Pull complete 
d23f641ab4b3: Pull complete 
455b29562127: Pull complete 
Digest: sha256:a27beaa5de9cec355f29e44ab8310a36fff47f351711b4ffe2e11c237d14ffd4
Status: Downloaded newer image for linuxserver/heimdall:latest
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing... 
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing... 

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 20-config: executing... 
[cont-init.d] 20-config: exited 0.
[cont-init.d] 30-keygen: executing... 
generating self-signed keys in /config/keys, you can replace these with your own keys if required
Generating a RSA private key
..+++++
...........................................................................................+++++
writing new private key to '/config/keys/cert.key'
-----
[cont-init.d] 30-keygen: exited 0.
[cont-init.d] 50-config: executing... 
New container detected, installing Heimdall
Creating app key. This may take a while on slower systems
Application key set successfully.
Setting permissions
[cont-init.d] 50-config: exited 0.
[cont-init.d] 90-custom-folders: executing... 
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-files: executing... 
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.

위와 같이 기동이 완료되면 Heimdall 접속이 가능한 상태가 된다. 이제 http://노드IP로 접속하여 Heimdall을 커스터마이징해 보도록 하자.

2) Heimdall 커스터마이징

http://SERVERIP:PORT 로 접속하면 아래와 같은 초기 화면을 볼 수 있다.

대시보드 메뉴는 오른쪽 하단의 총 6개 항목으로 구성되어 있다.

a. Add Items

먼저 네번째 메뉴인 Items를 선택하여 새로운 북마크를 추가해 보도록 하자.

네이버 북마크를 추가하는 과정이다. Application Name, Application Type, Colour, URL, Tags를 등록하고 Upload File을 통해 변경하고자 하는 로고 이미지를 반영한다.

상단의 PINNED를 활성화 할 경우 첫번째 메뉴 항목이 자동으로 반영되어 메인 화면에 노출된다. PINNED 여부 결정 후 SAVE 버튼을 선택한다.

위와 같이 첫번째 북마크가 등록되었다. 이와 동일한 방식으로 대시보드를 추가해 보자.

b. Pinned Items

첫번째 메뉴인 Pinned Items을 선택하면, Pin item to dashboard 메뉴활성화와 추가된 Item을 드래그앤 드랍이로 편집할 수 있도록 화면이 변경된다.

c. Settings

다음으로 Settings를 구성해보자.

위와 같이 몇가지 기본 구성이 가능하다. (언어, 배경, 검색, 링크위치 등)

d. Users

마지막으로 User 관리이다. 프로젝트를 진행하다보면, 특정 개발자에게 특정 대시보드 접근 권한만 오픈하고자 할 경우가 있다. 각 사용자 별로 접근 권한이 필요한 대시보드를 북마크로 제공하여 접근할 수 있도록 편의 구성이 가능하다.

기본으로 추가되어 있는 Super User인 admin 외에 사용자를 2개 추가한다. son.nara의 경우 Password는 설정하였으나, Public Access를 허용한 계정이며, cns의 경우 Private Access로 설정한 계정이다.

Public Access를 허용한 계정의 경우 그룹으로 관리되며, Private Access로 관리되는 계정의 경우 유저로 관리할 수 있다.

왼쪽 하단의 Switch User를 클릭하면, 아래와 같이 사용자 별 접근이 가능하다.

각 유저별 특징은 다음과 같다.

유저 설명
admin Super User
son.nara Developer, Operator 등 그룹에게 할당하기 유용한 단위 - 북마크 Public 공개. User 추가 권한은 없으며, 나머지 권한은 계정 내에 적용 가능(비밀번호 접속)
cns 개별 유저에게 권한을 부여하기 유용한 단위 - 북마크 Private 공개(비밀번호 접속).

결론

오픈소스 소프트웨어의 활용이 확대되어 감에 따라 여러가지 지원도구들이 등장하고 있다. 지원도구들은 대체로 구축과 사용이 간편하기 때문에 접근성이 높다는 특징이 있다. 오늘 살펴본 Heimdall 역시 손쉽게 구축이 가능하고 OutPut을 빠르게 확인할 수 있다는 특징은 이와 같은 맥락이라 볼 수 있다.

Heimdall에서 제공하는 대시보드는 크게 3가지 형태를 갖고 있다.

먼저 None 타입의 대시보드이다. None 타입의 대시보드는 Heimdall에서 별도로 관리하지 않는 대시보드이다. 예를 들어 상단의 북마크 추가 중 Naver와 같이 공식으로 등록되어 있지 않은 프로젝트들을 의미한다.

두번째는 Foundation Apps이다.(https://apps.heimdall.site/applications/foundation) Foundation App은 아이콘을 자동으로 채우고 타일의 기본 색상을 제공한다.

세번째는 Enhanced Apps이다.(https://apps.heimdall.site/applications/enhanced) Enhanced App을 사용하면 API를 통해 세부 정보를 확인할 수 있어 Heimdall 대시보드에서 직접 실시간 통계를 볼 수 있다. 대표적으로 Jaeger나 Transmission 등의 통계정보를 대시보드에 접근하지 않고도 확인할 수 있다.

앞서 살펴본 유저 접근 권한과 함께 대시보드에서 제공하는 Foundation Apps / Enhanced Apps를 조합하여 관리할 경우 프로젝트 내 대시보드를 효과적으로 관리할 수 있지 않을까 싶다.

728x90
반응형