본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

[Docker] Docker 활용하여 Zabbix 구축하기

by 정민규 2023. 9. 8.
반응형

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

 

최근에 쿠버네티스 스터디하며 조금씩... 아주 조금씩 성장 중입니다..!

 

모래성을 쌓아가는 과정으로 기본기를 탄탄히 하기 위해 해당 포스팅을 진행하게 되었습니다 ㅎㅎ  

 

본 포스팅에서는 도커로 Zabbix 구축하는 것까지 진행하겠지만..

 

아래와 같은 과정을 통해 모래성을 탄탄히 쌓아나가려고 합니다!

   - Docker 컨테이너 커스터마이징 -> 이미지화 -> 개인 레지스트리 저장소 활용(Docker hub / Harbor)  -> 쿠버네티스에 배포할 yaml 파일 내 여러 옵션 적용 -> 서비스 배포 -> 각종 테스트(부하/알림/모니터링 등)   

 

 

 

 

 

Zabbix는 현업에서도 모니터링 도구로 많이 사용되는만큼 한 번쯤 구축해보시는 것을 권장드립니다!

구축하게되면 아래와 같이 아름다운 대시보드를 사용하실 수 있게 됩니다 ㅎㅎ

 

 

 

 

 

* 실습 환경

- Azure VM

 

 

* 서버 환경

- SKU : Standard B2s(2cpu/4mem)

- OS : Ubuntu 20.04 LTS

- Disk : 표준 SSD 32GiB

 

 

 

 

 

 

Zabbix를 구축하기 위해서는 일반적으로 5개의 컨테이너가 필요합니다.

 

1. mysql

  - 호스트 DB

  - mysql 과 같은 호스트 DB가 zabbix-server-mysql 과는 별도로 존재해야 합니다.

    zabbix-server-mysql 는 여러 서비스 및 에이전트로부터 데이터를 수집하고 호스트 DB에 linked로 사용되는 구조입니다.

 

2. zabbix-server-mysql

  - zabbix 서버의 backend db 역할을 수행합니다.

 

3. zabbix-web-nginx-mysql

  - MySQL 데이터베이스를 지원하는 nginx 웹 서버 기반의 Zabbix 웹 인터페이스입니다.

 

4. zabbix-java-gateway

  - java 모니터링을 위한 서비스로, 필요에 따라 설치합니다.

  - 호스트에서의 특정 JMX 카운터 값을 알길 원할 때, zabbix-java-gateway 에 요청합니다.

 

5. zabbix-agent

  - 클라이언트에게 설치되는 것으로, OS와 연동하여 데이터를 수집하는 역할입니다.

  - 테스트를 위해 zabbix-agent 컨테이너를 띄워 정상적으로 데이터가 수집되는지 확인합니다. 

 

 

 

 

 

 

1. Docker 서비스 설치

최신 패키지로 업데이트 한 후, docker 설치합니다.

apt update -y
apt install docker.io -y

 

 

컨테이너 리스트를 확인합니다.

docker ps

 

실행 중인 컨테이너가 없어 아무것도 뜨지 않지만 명령어는 정상적으로 실행되었습니다.

컨테이너 리스트

 

 

 

 

 

 

2. Zabbix Docker 이미지 다운로드

 

Zabbix 공식 이미지 저장소에서 컨테이너 이미지를 다운로드합니다.

https://www.zabbix.com/container_images

 

Zabbix Docker images

 

www.zabbix.com

 

하기 명령어를 통해 쉽게 다운로드할 수 있습니다.

docker pull mysql
docker pull zabbix/zabbix-server-mysql
docker pull zabbix/zabbix-web-nginx-mysql
docker pull zabbix/zabbix-java-gateway
docker pull zabbix/zabbix-agent

 

 

 

 

 

 

3. docker images

 

이미지가 정상적으로 다운로드 되었는지 확인합니다.

docker images

 

 

저는 다른 이미지가 있어서 grep 옵션을 넣어줬지만,

docker images 했을 때, 하기 5개 이미지가 표기돼야 합니다.

 

 

 

※컨테이너 생성 전 주의 사항

OS 내 방화벽이 설정되었다면 하기 포트를 오픈해야 합니다.

web : TCP 80
mysql : TCP 3306
zabbix server : TCP 10051
zabbix agent : TCP 10050
zabbix-java-gateway : TCP 10052

 

 

 

 

 

4. Mysql 컨테이너 생성

mysql 이미지를 통해 mysql-server 라는 이름의 컨테이너를 배포합니다.

테스트 목적이라면 하기 명령어를 그대로 사용하시면 됩니다.

docker run --name mysql-server -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" -d mysql --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password

 

 

 

 

 

5. Zabbix java gateway 컨테이너 생성(선택)

java gateway는 어떤 호스트에서의 특정 JMX 카운터 값을 알길 원할 때 사용합니다.

java 관련 검사를 수집하기 때문에 tomcat, jeus 등의 WAS 모니터링이 필요한 경우 설치하시면 됩니다.

docker run --name zabbix-java-gateway -t --restart unless-stopped -d zabbix/zabbix-java-gateway

 

 

 

 

6. Zabbix Server mysql 컨테이너 생성

zabbix 서버는 zabbix 소프트웨어의 핵심 프로세스입니다.

서버는 데이터 폴링 및 트래핑을 수행하고, 트리거를 계산하고, 사용자에게 알림을 보냅니다.

이는 zabbix agent 및 proxy가 시스템의 가용성 및 무결성에 대한 데이터를 보고하는 핵심 구성 요소입니다.

 

zabbix 서버를 위에서 생성한 데이터베이스 및 java gateway에 연결합니다.

docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysql-server:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 --restart unless-stopped -d zabbix/zabbix-server-mysql

 

 

 

7. Zabbix web nginx mysql 컨테이너 생성 

하기 명령어 내 --link 옵션을 통해 컨테이너를 Zabbix 서버 및 MySQL 데이터베이스와 연결하게 됩니다.

docker run --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:8080 --restart unless-stopped -d zabbix/zabbix-web-nginx-mysql

 

 

8. Zabbix agent 컨테이너 생성

Zabbix Agent는 모니터링할 대상 서버에 설치하는 패키지로, 리소스나 애플리케이션 등을 모니터링합니다.

docker run --name zabbix-agent --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server" -d zabbix/zabbix-agent

 

 

 

 

9. agent ip 확인

zabbix-agent 가 배포된 컨테이너의 IP 주소를 확인합니다.

docker inspect zabbix-agent | grep "IPAddress\": "

 

172.17.0.6 으로 확인됩니다.

아래에서 설정값으로 넣어야하니 기록해둡니다!

 

 

 

 

10. 서비스 확인

위의 4~8번 과정을 모두 진행했다면, 아래와 같이 5개의 컨테이너가 생성되었을 것입니다.

 

 

브라우저에 서버의 IP 주소로 검색했을 때, zabbix 초기 로그인 화면이 확인됩니다.

curl 명령어를 통해서도 간단하게 확인이 가능합니다.

초기 사용자 계정 정보입니다.

접속 후에 패스워드 변경하시는 것을 권장드립니다.

  - ID : Admin

  - PWD : zabbix

 

 

 

 

로그인 하게되면 알록달록 예쁘게 꾸며진 기본 대시보드를 확인하실 수 있습니다 ㅎㅎ

zabbix agent 를 배포하긴 했으나, 아직 등록을 안해서 unavailable과 함께 오류가 발생하고 있습니다.

 

 

 

 

 

 

Monitoring > Hosts > Zabbix server > Host 클릭합니다.

agent 주소로 설정된 127.0.0.1 을 172.17.0.6 으로 수정하여 저장합니다.

 

 

 

아래와 같이 172.17.0.6 으로 설정되어야 합니다.

 

 

 

 

 

agent 설정 이후 아래와 같이 1개의 서버가 모니터링되고 있는 것을 확인할 수 있습니다!

호스트 가용성도 Not available 에서 Available 로 변경되었네요! 

 

 

 

고생하셨습니다!

이렇게 해서 docker를 통한 기본적인 zabbix 구축은 완료되었습니다.

 

이외에도 컨테이너를 추가로 올려서 모니터링 대상으로 등록하고 메일, slack 등 webhook 설정하여 부하테스트 시 알림이 정상적으로 수신되는지 확인해보면 반드시 유용한 경험이 될 것입니다!

 

 

 

 

참고한 공식 문서와 블로그입니다.

 

https://hub.docker.com/r/zabbix/zabbix-server-mysql

 

Docker

 

hub.docker.com

 

https://github.com/zabbix/zabbix-docker

 

GitHub - zabbix/zabbix-docker: Official Zabbix Dockerfiles

Official Zabbix Dockerfiles. Contribute to zabbix/zabbix-docker development by creating an account on GitHub.

github.com

 

https://techexpert.tips/ko/zabbix-ko/zabbix-%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90-%EB%8F%84%EC%BB%A4-%EC%84%A4%EC%B9%98/

 

튜토리얼 Zabbix - 우분투 리눅스에 도커 설치 [ 단계별 ]

우분투 리눅스에서 Docker를 사용 하 여 Zabbix를 설치 하는 방법에 대해 알아봅니다 10 분 이하.

techexpert.tips

 

반응형

댓글