작업 환경
  • VMware
  • OS : Ubuntu 24.04(LTS)
  • CPU : 4vCPU
  • Memory : 8GB
  • Zabbix : ubuntu-7.0-latest
  • Database: Postgres 14
  • 사용 계정 : zabbix: uid=1001(zabbix) gid=1001(zabbix) groups=1001(zabbix),4(adm),27(sudo)
  • 프록시 서버 IP : 192.168.111.90, 192.168.111.91
  • Zabbix 서버 IP : 192.168.111.80

 

Zabbix의 Proxy

 

Proxy는 요청을 대신 처리하는 대리자 정도로 생각하면 된다.

 

그 중 Zabbix에서 사용하는 Proxy 모드가 두 가지 있는데 Passive와 Active가 있다.

 

Active Proxy

출처: https://www.zabbix.com/documentation/current/en/manual/distributed_monitoring/proxies

 

Active Proxy는 Zabbix Server가 수행할 작업을 대신 수행한 후 결과를 서버에 돌려주는 역할을 한다. 만약 호스트가 200대가 있는데 SNMP 모니터링을 해야 한다고 했을 때, Proxy가 없다면 서버가 200대의 호스트에 SNMP 요청을 보내고, 가져온 데이터를 처리하는 과정까지 모두 진행하기 때문에 서버에 부담이 가게 됩니다.

 

이 부담을 줄여주는 것이 바로 Active Proxy로 200대에 대한 SNMP 요청을 Proxy 서버가 대신 수행하고 결과를 리턴하면 Server는 처리만 하면 되기 때문에 Zabbix Server의 성능을 고려한다면 반드시 사용하는 것이 좋습니다.

 

참고로 Active Proxy는 제약사항이 있다. (당연한 거지만)

SNMP, agent 통신 등 요청을 통한 데이터 수집은 가능하지만, SNMP Trap과 같이 Agent에서 전달받는 데이터는 처리가 되지 않습니다.

Passive Proxy

Passive Proxy는 Zabbix Server가 외부에 공개되는 것을 방지하고, Agent가 보내는 요청을 Passive Proxy가 대신 받아 처리한 후 전달하는 역할을 합니다.

 

해당 글에서는 Active Proxy에 대한 설치 및 설정 작업을 진행합니다.


 

Docker 설치 및 테스트

 

Docker의 설치는 공식 홈페이지의 가이드를 따라 진행했습니다

 

더욱 자세한 내용을 알고 싶으시면 아래 링크 참고해주세요

https://docs.docker.com/engine/install/ubuntu/

 

Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

 

1. 설치 전 충돌 가능성이 있는 패키지를 제거

$ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

 

2. 레포지토리 등록

# Add Docker's official GPG key:
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update

 

3. 패키지 설치

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

4. Docker Test

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally # 이미지가 현재 로컬에 설치되어 있지 않음을 알림
latest: Pulling from library/hello-world # 자동으로 hello-world를 찾고 image를 latest 태그로 설치함
c1ec31eb5944: Pull complete # 설치 완료
Digest: sha256:553c995e16e3178003c1227821318999dad22dac3dbb877aac3c28182255c736
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64)
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
  https://hub.docker.com/

For more examples and ideas, visit:
  https://docs.docker.com/get-started/

 

5. Docker Process 확인

$ sudo docker images
REPOSITORY TAG    IMAGE              ID   CREATED    SIZE
hello-world        latest  d2c94e258dcb 19    months ago  13.3kB

 


 

Docker Compose 설치 및 테스트

 

1. docker-compose 패키지 설치

$ sudo apt install docker-compose

 

2. compose 파일 만들기

!! compose 파일은 반드시 작업 디렉토리에서 만들어야 합니다

!! compose 파일은 이름을 반드시 맞춰 주어야 합니다.

   - compose.yaml(권장) **

   - compose.yml

   - docker-compose.yaml

   - docker-compose.yml

!! compose 파일에서 하위 항목의 구분은 공백 2칸씩 늘려가기 때문에 반드시 지켜야 합니다.

!! compose 파일에서 ${변수명} 형식은 .env파일에 작성해주어야 사용 가능합니다.

$ vi ~/compose.yaml

services:
  mysql:
    image: mysql:8.0.30
    container_name: zabbix-mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DB}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - zabbix-network

  zabbix-proxy:
    image: zabbix/zabbix-proxy-mysql:latest
    container_name: zabbix-proxy
    mem_limit: 8g
    environment:
      ZBX_PROXY_MODE: 1
      ZBX_SERVER_HOST: 192.168.111.80  # Zabbix Server의 IP 주소
      ZBX_HOSTNAME: zabbix-proxy # 해당 이름이 가장 중요!!!
      DB_SERVER_HOST: zabbix-mysql
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DBNAME: ${MYSQL_DB}
      # 아래는 zabbix_proxy.conf 파일에 대한 값을 수정할 수 있다.
      ZBX_CONFIGFREQUENCY: 300​
      ZBX_CACHESIZE: 1G
      ZBX_HISTORYCACHESIZE: 384M
      ZBX_HISTORYINDEXCACHESIZE: 96M
      ZBX_STARTPOLLERS: 150
      ZBX_STARTPOLLERSUNREACHABLE: 30
      ZBX_STARTVMWARECOLLECTORS: 5
      ZBX_VMWAREFREQUENCY: 120
      ZBX_VMWAREPERFFREQUENCY: 120
      ZBX_VMWARECACHESIZE: 32M
      ZBX_VMWARETIMEOUT: 10
    depends_on:
      - mysql
    volumes:
      - proxy-data:/var/lib/zabbix
    ports:
      - "10051:10051"
    networks:
      - zabbix-network

  zabbix-agent:
    image: zabbix/zabbix-agent:latest
    container_name: zabbix-agent
    restart: unless-stopped
    privileged: true
    ports:
      - '10050:10050'
    environment:
      ZBX_SERVER_HOST: 192.168.111.80
      ZBX_HOSTNAME: Zabbix proxy
    networks:
      - zabbix-network

volumes:
  mysql-data:
  proxy-data:

networks:
  zabbix-network:
    driver: bridge

 

3. .env 파일 만들기

$ vi ~/.env
MYSQL_USER=zabbix
MYSQL_PASSWORD=Input youer password
MYSQL_DB=zabbix_proxy

 

4. docker compose 구동

$ sudo docker-compose up -d

 

5. 컨테이너 확인

$ sudo docker ps -a
CONTAINER ID   IMAGE                              COMMAND                  CREATED       STATUS      PORTS                                           NAMES
15850c85c9a6   zabbix/zabbix-proxy-mysql:latest   "/usr/bin/docker-ent…"   2 weeks ago   Up 7 days   0.0.0.0:10051->10051/tcp, :::10051->10051/tcp   zabbix-proxy
002bd58c61cd   zabbix/zabbix-agent:latest         "/usr/bin/docker-ent…"   2 weeks ago   Up 7 days   0.0.0.0:10050->10050/tcp, :::10050->10050/tcp   zabbix-agent
8e721d31b1d2   mysql:8.0.30                       "docker-entrypoint.s…"   2 weeks ago   Up 7 days   3306/tcp, 33060/tcp                             zabbix-mysql

 


 

Zabbix 설정

 

1. 왼쪽 메뉴 중 관리 - 프록시에서 우측 상단의 프록시 생성 버튼 클릭

 

2. 위에서 설정한 compose.yaml 파일에서 zabbix-proxy의 ZBX_HOSTNAME인 zabbix-proxy를 입력

 

정상적으로 등록되면 아래와 같이 연결되었다고 나옵니다.

 

3. 데이터 수집 - 호스트에서 호스트 중 데이터를 수집할 호스트를 선택하고, 감시용 서버를 프록시로 변경하고 선택 클릭

 

4. 생성한 zabbix-proxy 선택

 

5. 갱신 버튼 클릭

 

6. 적용 확인 및 에이전트 통신 확인

Zabbix Proxy Group 설정

 

성능상의 이유로 여러 대의 Proxy 서버를 두고 사용한다면 Proxy Group을 사용할 수 있다.

 

Proxy를 하나의 Group에 모아두고 여러 호스트에 Proxy Group을 설정하면 Zabbix Server에서 자동으로 Load Balancing을 진행해 Proxy 서버를 적절하게 나누어 배치하도록 설정되어 있습니다.

 

참고로 위에서 설정한 것과 동일하게 zabbix-proxy2라는 호스트를 만들어 두었습니다.

 

1. 왼쪽 메뉴 중 관리 - proxy groups에서 create proxy group 클릭합니다.

 

2. Proxy Group 이름 작성 후 추가 버튼 클릭한다. 여기서는 Switch proxy라는 이름을 사용하겠습니다.

 

3. 왼쪽 메뉴 중 관리 - 프록시에서 만들어 둔 프록시 호스트를 선택하고 Proxy Group을 Switch Proxy로 변경하면 Address for active agents라는 항목이 나온는데 이곳에 Proxy 서버의 IP를 작성합니다.

 

4. 왼쪽 메뉴 중 데이터 수집 - 호스트에서 각 호스트들의 감시용 서버를 Proxy group으로 변경한 후 Switch proxy를 선택한다.

 

5. 각 호스트들의 proxy가 잘 분산되었는지 확인합니다.

 


 

마무리

 

이로써 Zabbix Proxy(Active)에 대한 설정이 완료되었습니다.

 

'Zabbix' 카테고리의 다른 글

[Zabbix] Docker-Compose로 구축하기  (0) 2024.12.17

+ Recent posts