IT 인프라를 감시하는 것은 복잡한 작업이지만, Checkmk와 같은 도구를 활용하면 훨씬 수월하게 관리할 수 있습니다.
많은 기업들이 제품 성능을 개선하기 위해 클라우드 네이티브 기술을 도입하고 있습니다. 하지만 이와 동시에 자체 네트워크와 온프레미스 인프라를 함께 운영하는 경우가 많습니다. 이러한 하이브리드 인프라 환경에서는 운영 체제, 스토리지, 서버, 클라우드 환경 등 다양한 구성 요소에서 매초마다 엄청난 양의 메트릭이 생성됩니다. 이러한 메트릭들을 효과적으로 관리하고 분석하는 것은 애플리케이션이 최적의 성능을 유지하는 데 필수적입니다.
이러한 지표들은 DevOps 팀이 인프라의 상태를 정확하게 파악하는 데 중요한 역할을 합니다. 그래서 조직들은 메트릭 수집, 시각화, 그리고 분석을 통해 프로덕션 환경의 문제를 신속하게 식별할 수 있는 모니터링 솔루션이 필요합니다. Checkmk는 가장 인기 있고 실용적인 인프라 모니터링 도구 중 하나로 손꼽힙니다. 이 글에서는 Checkmk가 왜 좋은 평가를 받는지, 그리고 어떻게 시작할 수 있는지에 대해 자세히 알아보겠습니다.
Checkmk란 무엇인가?
Checkmk는 현대적인 IT 환경의 모든 기능을 지속적으로 감시하며, 특히 하이브리드 인프라에 최적화되어 있습니다. Checkmk는 컨테이너, 클라우드 자산뿐만 아니라 스위치, 서버와 같은 온프레미스 시스템까지 폭넓게 지원합니다. 또한 IT 전문가의 노하우와 자동화된 경고 기능을 통해 모니터링을 시작하고 관리하는 것이 매우 용이합니다.
Checkmk를 무료로 이용하는 방법은 두 가지입니다. 첫째, 모든 기능을 제한 없이 사용할 수 있는 완전한 오픈 소스 버전인 Checkmk Raw Edition을 선택할 수 있습니다. 둘째, Checkmk 엔터프라이즈 평가판을 통해 Checkmk Enterprise Edition의 모든 추가 기능을 30일 동안 경험해볼 수 있습니다. 평가판은 30일 후 호스트 수가 25개로 제한됩니다.
Checkmk는 어떻게 문제를 해결하는가?
Checkmk는 애플리케이션, 서버, 데이터베이스, 네트워크, 컨테이너, 스토리지 등 다양한 IT 구성 요소를 감시할 수 있습니다. 2,000개가 넘는 다양한 모니터링 플러그인을 제공하여, 시장에 나와 있는 여러 공급업체의 특정 기술들을 모니터링할 수 있도록 확장성을 높였습니다. 널리 사용되는 Checkmk 플러그인으로는 Docker, Kubernetes, Cisco, Nginx, VMware, Linux, Windows, AWS, Dell 등이 있습니다. 2,000개 이상의 플러그인을 보유한 Checkmk는 현재 가장 유망한 인프라 모니터링 솔루션 중 하나입니다.
모든 모니터링 솔루션에서 메트릭을 얼마나 빠르고 정확하게 읽을 수 있는지, 그리고 스마트 알림을 설정하는 기능은 매우 중요합니다. Checkmk는 이러한 모든 기준을 충족합니다. 자동 검색 기능을 통해 Checkmk는 서비스 및 장치의 90% 이상을 식별할 수 있습니다. 오늘날 대부분의 기업은 확장성과 자동화를 필요로 합니다. Checkmk를 통해 모니터링 용량을 수백 개의 호스트에서 수천 개로 쉽게 확장하고, 자동화에 사용할 수 있는 에이전트를 활용할 수 있습니다.
Docker 컨테이너에 Checkmk 설치하기
이 글에서는 Ubuntu 20.04에서 실행되는 Linux 서버의 Docker 컨테이너에 Checkmk Raw Edition을 설치해보겠습니다. Dockerhub에서 Checkmk Docker 컨테이너를 다운로드할 수 있습니다. 이미 500만 회 이상 다운로드되었으며, 이는 Checkmk가 얼마나 인기 있고 널리 사용되는지를 보여줍니다.
최신 버전의 Checkmk로 Docker 이미지를 가져온 후, `docker container run` 명령을 사용하여 컨테이너 내부에서 실행합니다.
docker container run -dit -p 8080:5000 --tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 -v monitoring:/omd/sites --name monitoring -v /etc/localtime:/etc/localtime:ro --restart always checkmk/check-mk-raw:2.0.0-latest
컨테이너 이름은 ‘monitoring’이고, 웹 서버는 포트 5000을 수신하며 노드의 포트 8080에서 열립니다. 컨테이너는 임시 파일 시스템과 로컬 시간대를 사용합니다.
[사용자이름@호스트명]:~$ sudo docker container run -dit -p 8080:5000 --tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 -v/omd/sites --name monitoring -v/etc/localtime:/etc/localtime:ro --restart always checkmk/check-mk-raw:2.0.0-latest Unable to find image 'checkmk/check-mk-raw:2.0.0-latest' locally 2.0.0-latest: Pulling from checkmk/check-mk-raw 33847f680f63: Pull complete 474905f2790b: Pull complete 1804f0e63047: Pull complete f36fe6334464: Pull complete 03c68dfa69cf: Pull complete b60cfdb78e96: Pull complete Digest: sha256:7788fa2e31c7270be201d75285c13ccc7a74f67f991872ea63ba0cfa6708cac6 Status: Downloaded newer image for checkmk/check-mk-raw:2.0.0-latest 9729e323a840a08b0e758cfa9e6dbf76ba5dab4b2ecc4eea5174b8ee1a5cfbcf
`docker images` 명령을 실행하여 Docker 이미지가 다운로드되었는지 확인할 수 있습니다.
[사용자이름@호스트명]:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE bitnami/node-exporter latest ba0f519ca49b 34 hours ago 104MB checkmk/check-mk-raw 2.0.0-latest 097319702432 13 days ago 1.03GB hello-world latest feb5d9fea6a5 7 weeks ago 13.3kB
`docker ps` 명령을 실행하여 Checkmk 컨테이너가 실행 중인지 확인합니다.
[사용자이름@호스트명]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9729e323a840 checkmk/check-mk-raw:2.0.0-latest "/docker-entrypoint.…" About a minute ago Up 59 seconds (health: starting) 6557/tcp, 0.0.0.0:8080->5000/tcp, :::8080->5000/tcp monitoring 3d3a95ed3c25 bitnami/node-exporter:latest "/opt/bitnami/node-e…" 25 hours ago Up 25 hours 9100/tcp node-exporter
Checkmk 웹 인터페이스에 대한 로그인 정보를 얻으려면 Checkmk 컨테이너 로그를 확인하십시오.
[사용자이름@호스트명]:~$ sudo docker container logs 9729e323a840 ### CREATING SITE 'cmk' Adding /opt/omd/sites/cmk/tmp to /etc/fstab. Going to set TMPFS to off. Temporary filesystem already mounted Updating core configuration... Generating configuration for core (type nagios)...Precompiling host checks...OK OK Executing post-create script "01_create-sample-config.py"...OK Created new site cmk with version 2.0.0p15.cre. The site can be started with omd start cmk. The default web UI is available at http://9729e323a840/cmk/ The admin user for the web applications is cmkadmin with password: ClFxBPre For command line administration of the site, log in with 'omd su cmk'. After logging in, you can change the password for cmkadmin with 'htpasswd etc/htpasswd cmkadmin'. ### STARTING XINETD [ ok ] Starting internet superserver: xinetd. ### STARTING SITE Temporary filesystem already mounted Starting mkeventd...OK Starting rrdcached...OK Starting npcd...OK Starting nagios...OK Starting apache...OK Starting redis...OK Initializing Crontab...OK ### STARTING CRON ### CONTAINER STARTED
Checkmk Docker 컨테이너는 기본적으로 `https://localhost:8080/cmk/check_mk`에서 실행됩니다. 위 명령의 출력에서 사용자 이름은 cmkadmin이고 비밀번호는 ClFxBPre임을 확인할 수 있습니다. 웹 브라우저에서 주소를 열고 제공된 자격 증명을 사용하여 로그인합니다.
로그인하면 나타나는 ‘메인 대시보드’입니다. 아직 호스트를 추가하지 않았기 때문에 비어 있습니다.
Checkmk를 사용하여 Docker 모니터링하기
일반적으로 Docker 컨테이너를 호스팅하는 시스템에 Checkmk 에이전트를 설치한 다음, Docker용 Checkmk 플러그인을 사용하여 모든 컨테이너를 모니터링합니다. 이 플러그인(mk_docker.py)은 Docker의 Python-API를 사용하여 Docker 컨테이너를 추적하고 실시간 상태 및 성능에 대한 완벽한 가시성을 제공합니다. 자세한 내용은 Checkmk를 사용한 Docker 모니터링 페이지에서 확인할 수 있습니다.
제 Docker 환경에는 Checkmk Docker 컨테이너만 실행 중이므로 Docker 컨테이너에서 실행되는 Checkmk 에이전트만 사용하고 Docker 호스트에 Checkmk를 설치하지 않겠습니다. 에이전트는 Checkmk 컨테이너에 이미 설치되어 있으므로 Checkmk 컨테이너를 호스트로 추가하기만 하면 됩니다.
터미널에서 `ifconfig` 명령어를 사용하여 Docker 서비스가 실행되고 있는 IP 주소를 확인해보겠습니다.
[사용자이름@호스트명]:~$ ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:59ff:fe8a:8ba8 prefixlen 64 scopeid 0x20<link> ether 02:42:59:8a:8b:a8 txqueuelen 0 (Ethernet) RX packets 5559 bytes 7230215 (7.2 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4164 bytes 614703 (614.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.108 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::144a:4682:35e7:bb2 prefixlen 64 scopeid 0x20<link> ether 08:00:27:91:82:82 txqueuelen 1000 (Ethernet) RX packets 699491 bytes 1044235622 (1.0 GB) RX errors 0 dropped 7 overruns 0 frame 0 TX packets 101260 bytes 7555470 (7.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 20655 bytes 8446042 (8.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20655 bytes 8446042 (8.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth44ba5ce: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::145f:1fff:fee9:a7b0 prefixlen 64 scopeid 0x20<link> ether 16:5f:1f:e9:a7:b0 txqueuelen 0 (Ethernet) RX packets 5559 bytes 7308041 (7.3 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4173 bytes 616263 (616.2 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vetha82ee43: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::585c:6fff:fe0a:a79b prefixlen 64 scopeid 0x20<link> ether 5a:5c:6f:0a:a7:9b txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 92 bytes 9799 (9.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
제 경우에는 Docker 서비스가 172.17.0.1에서 실행되고 있습니다. 다음 단계는 모니터링할 수 있도록 Docker 서비스를 Checkmk에 호스트로 추가하는 것입니다.
- Checkmk 웹 인터페이스에서 설정 -> 호스트를 클릭합니다.
- 이제 호스트 이름과 IP 주소를 입력하고 ‘저장 및 서비스 구성으로 이동’을 클릭합니다.
- 그러면 Checkmk가 자동으로 서비스 검색을 시작합니다.
아래로 스크롤하여 Docker 호스트에서 실행 중인 모니터링 서비스들을 확인합니다. 서비스가 아직 모니터링되지 않는 것을 알 수 있습니다. 모든 것을 한 번에 모니터링하려면 ‘모두 수정’을 클릭하는 것이 가장 쉬운 방법입니다. 만약 모니터링할 서비스들을 개별적으로 구성하고 싶다면, 이 단계를 세부적으로 진행할 수도 있습니다. 서비스를 모니터링하려면 ‘+’ 기호를 클릭합니다.
모니터링할 서비스를 선택하면 ‘모니터링된 서비스’ 탭에 나타납니다. 모니터링 중인 각 서비스에 대한 모든 상태 정보를 확인할 수 있습니다. ‘?’ 기호를 클릭하면 해당 서비스가 ‘미정 서비스’ 목록으로 이동합니다. ‘X’ 표시를 클릭하면 서비스가 ‘비활성화된 서비스’ 탭으로 이동합니다.
4개의 서비스를 비활성화했으므로, ‘비활성화된 서비스’ 탭에서 확인할 수 있습니다.
서비스 추가가 완료되면, 프로덕션 환경에 반영하기 전에 변경 사항을 활성화해야 합니다.
- 보류 중인 변경 사항을 확인하려면, 오른쪽 상단 모서리에 있는 노란색 느낌표(!)가 표시된 강조된 부분을 클릭합니다.
- 선택한 사이트에서 ‘활성화’를 클릭합니다.
Checkmk를 사용하여 Docker 서비스를 성공적으로 모니터링했습니다!
결론
인프라 모니터링 도구인 Checkmk에 대한 설명이었습니다. 프로덕션 환경을 모니터링해야 하는 경우 매우 유용한 도구입니다. Checkmk 무료 버전을 사용해보고 모니터링을 시작해 보시기를 추천합니다.