작업 환경
  • 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
작업 환경
  • 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.80

 

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

zabbix@zabbix-docker:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
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 확인

zabbix@zabbix-docker:~$ 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파일에 작성해주어야 사용 가능하다.

services:
  postgres-server:
    container_name: postgres-server
    image: postgres:14.0-alpine
    restart: always
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      PG_DATA: /var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./public/postgres/postgresql.conf:/var/lib/postgresql/data/postgresql.conf
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.10

  zabbix-server:
    container_name: zabbix-server
    image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest
    restart: always
    mem_limit: 12g
    ports:
      - '10051:10051'
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      ZBX_HISTORYSTORAGETYPES: log,text
      ZBX_DEBUGLEVEL: 1
      ZBX_HOUSEKEEPINGFREQUENCY: 1
      ZBX_MAXHOUSEKEEPERDELETE: 5000
    depends_on:
      - postgres-server
    volumes:
      - ./public/server/zabbix_server.conf:/etc/zabbix/zabbix_server.conf:ro
      - zabbix-data:/var/lib/zabbix
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.20

  zabbix-frontend:
    container_name: zabbix-frontend
    image: zabbix/zabbix-web-nginx-pgsql:ubuntu-7.0-latest
    restart: always
    ports:
      - '80:8080'
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      ZBX_SERVER_HOST: zabbix-server
      ZBX_POSTMAXSIZE: 64M
      PHP_TZ: ${TZ}
      ZBX_MAXEXECUTIONTIME: 500
      TZ: "Asia/Seoul"
    depends_on:
      - postgres-server
      - zabbix-server
    volumes:
      - zabbix-frontend-data:/usr/share/zabbix
      # 리포트 연동으로 필요 시 주석 해제
      # - ./public/frontend/zabbix-pdf-report:/usr/share/zabbix/zabbix-pdf-report 
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.30

  zabbix-agent:
    container_name: zabbix-agent
    image: zabbix/zabbix-agent:latest
    ports:
      - '10050:10050'
    privileged: true
    restart: unless-stopped
    environment:
      ZBX_SERVER_HOST: 172.26.0.20
      ZBX_HOSTNAME: Zabbix server
    volumes:
      # Syslog 연동으로 필요 시 주석 해제
      # - ./public/agent/syslog.log:/etc/zabbix/logs/syslog.log 
    networks:
      zabbix-network:
        ipv4_address: 172.26.0.40

networks:
  zabbix-network:
    ipam:
      driver: default
      config:
        - subnet: 172.26.0.0/16

volumes:
  postgres-data:
  zabbix-data:
  zabbix-frontend-data:

 

3. .env 파일 만들기

POSTGRES_USER=zabbix
POSTGRES_PASSWORD=Input your password
POSTGRES_DB=zabbix
TZ=Asia/Seoul

 

4. 의존 파일 및 디렉토리 생성하기

$ mkdir -p ~/public/server
$ mkdir -p ~/public/frontend
$ mkdir -p ~/public/postgress
$ mkdir -p ~/public/agent

 

!! 아래 config 파일 내용은 각 서버 환경에 맞게 수정이 필요합니다.

### postgres-server ### <- wal size 관리를 위한 config 파일 수정
$ vi ~/public/postgres/postgresql.conf

listen_addresses = '*' 
max_wal_size = 4GB
min_wal_size = 80MB
log_timezone = 'KST'
datestyle = 'iso, mdy'
timezone = 'KST'
default_text_search_config = 'pg_catalog.english'

### zabbix-server ### <- 메모리 관리를 위한 config 파일 수정
$ vi ~/public/server/zabbix_server.conf
LogType=console
DebugLevel=1
SocketDir=/tmp/
DBHost=postgres-server
DBName=zabbix
DBSchema=public
DBUser=zabbix
DBPassword=<Input your password>
DBPort=5432
HistoryStorageTypes=log,text
HousekeepingFrequency=1
MaxHousekeeperDelete=5000
CacheSize=4096M
HistoryCacheSize=1024M
HistoryIndexCacheSize=1024M
TrendCacheSize=256M
TrendFunctionCacheSize=256M
ValueCacheSize=1024M

AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
SSHKeyLocation=/var/lib/zabbix/ssh_keys
User=zabbix

SSLCertLocation=/var/lib/zabbix/ssl/certs/
SSLKeyLocation=/var/lib/zabbix/ssl/keys/
SSLCALocation=/var/lib/zabbix/ssl/ssl_ca/
LoadModulePath=/var/lib/zabbix/modules/

### zabbix-frontend ### <- Zabbix PDF Reporting 사용 시 관련 파일
### zabbix-agent ### <- Syslog 연동

 

5. docker compose 구동

$ sudo docker-compose up -d

 

6. 컨테이너 확인

$ sudo docker ps -a

 


 

Zabbix 기본 설정

 

1. http://192.168.111.80 접속 후 로그인(기본 계정 Admin/zabbix)

 

2. 왼쪽 메뉴 중 Adminitration - General - GUI에서 Default language를 English (en_US)에서 Korean (ko_KR)로 변경

 

3. 왼쪽 메뉴 중 데이터 수집 - 호스트에서 Zabbix server 항목의 interfaces > 에이전트의 IP 주소를 172.26.0.40으로 수정

 

마무리

 

이로써 모니터링 툴 Zabbix 설치가 완료되었습니다.

'Zabbix' 카테고리의 다른 글

[Zabbix] Docker-Compose로 Active Proxy 연동 하기  (3) 2024.12.17

+ Recent posts