Infra Management/Zabbix

[인프런] GZS - 우리도 자빅스(Zabbix) - 그라파나, 슬랙 연동 (1)

bluebamus 2025. 7. 14.

1. VirtualBox에서 vm간 통신이 되도록 설정하는 방법

   1.1. 도구에서 네트워크 관리자를 선택한다.

 

   1.2. NAT Networks에 새로운 네트워크를 만든다.

      - 생성 후 Enable DHCP 설정을 끈다. 이외는 그대로 사용한다.

 

   1.3. 이후 설정

      - 실재 서버와 통신을 하려면, 포트포워딩 설정을 하면 된다.

 

      - vm에서 확인을 하면 게이트웨이는 10.0.2.1이다.

      - vm에서 ip를 수동으로 정의한다. 10.0.2.1을 제외한 어떤 ip도 상관이 없다.

         - 서브넷 마스크는 255.255.255.0이다. red-hat 계열 및 리눅스에서는 10.0.2.10/24 로 표기하면 된다.

      - 윈도우에서는 ping 테스트를 받기 위해서 방화벽을 모두 끄면 된다.

 

   1.4. 원격 데스크탑 설정 (윈도우 RDP 설정시)

 

2. 로키 리눅스에 Zabbix 설치

   2.1. 설치 가이드

      - zabbix 사이트의 download 페이지에서 플랫폼 정보를 선택하면, 이에 맞춰진 설치 방법이 하단에 메뉴얼로 자동 업데이트 되어 제공된다.

         - 하지만, 가이드에 누락되는 항목이나 순서가 바뀐 작업들이 있으니 고려 해야한다.

         - 사이트 : https://www.zabbix.com/download

 

      - 리눅스의 경우, 메뉴얼에는 mysql 설치에 대한 설명이 없다. 이미 mysql이 설치되어 있다는 가정에 메뉴얼이 제공된다.

      - mysql에 로그인을 해 log_bin_trust_function_creators 설정을 하기 전에 zabbix_server.conf 설정을 먼저 해야 에러가 발생하지 않는다. 메뉴얼에서는 이 순서가 바뀌어져 제공된다.

 

   2.2. 기타 설정 - 보안 설정

      - maria : mariadb-secure-installation

      - mysql : mysql_secure_installation

         - change the root password만 no로 설정하고 다른 항목들은 전부 yes를 설정하면 된다.

 

      - redhat 계열의 selinux 보안 설정으로 웹에서 database로의 접속이 안됨

      - selinux 보안 해지 방법

         - 확인 방법 :

# getenforce
-> Enforcing

 

      - 설절 방법 (재부팅에도 유지, 현재 적용 안됨)

         - vi /etc/sysconfig/selinux

SELINUX=enforcing
# 변경
SELINUX=disabled

 

      - 설정 방법 (현재 부팅 상태에만 적용)

# setenforce 0
# getenforce
-> Permissive

 

      - 웹페이지 로그인 계정 정보

         - id : Admin

         - password : zabbix

 

      - 서비스 포트 확인

netstat -ano | grep tcp | grep LISTEN

 

3. zabbix agent 설치 - 리눅스

   - 설치한 OS 및 zabbix 서버 버전에 맞는 agent를 repo.zabbix.com/ 에서 다운받는다.

      - 현재 과정에서는 agent2가 아닌, agent를 다운받아야 한다.

      - 다운로드 예시 : https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/

 

   - 설치 방법

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-agent-7.0.16-release1.el9.x86_64.rpm

 

   - config 파일 수정

      - /etc/zabbix/zabbix_agentd.conf 파일 수정

...
Server=10.0.2.10 # zabbix 서버 ip
...
ServerActive=127.0.0.1 # 자신의 주소, 그대로 둠
...
Hostname=client-centos # 호스트 네임을 설정
...

 

   - agent 실행 및 등록

systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service

 

   - netstat으로 서비스 포트 확인

      - netstat -ano | grep tcp 실행 후 10050 포트 확인

 

4. zabbix 서버에 호스트 연동 - 리눅스

   - 왼쪽 메뉴바에서 데이터 수집 > 호스트를 누른다.

   - 오른쪽 상단 호스트 생성 버튼을 눌러 새 호스트를 추가한다.

   - 호스트 명은 zabbix-agent의 config에 정의한 호스트 명을 적어준다.

   - 호스트 그룹도 필수로 지정해야 하는데, 실습에서는 application으로 선택한다.

   - interface는 4가지 종류가 있다. 에이전트를 선택한다.

      - ip에 추가할 호스트의 ip를 입력한다.

 

 

   - 완료 후 아래와 같이 상태가 활성화 안된 상태로 추가된다.

      - 정상 (녹색), 오류 (빨간색)

      - 아직 어떠한 아이템, 모니터링 값도 추가하지 않았기에 통신이 없기 때문에 회색으로 유지된다.

 

5. zabbix agent 설치 - 윈도우

   - zabbix download를 검색하여 나오는 페이지를 방문하여 zabbix agents 항목을 누른다.

   - 자신에게 맞는 환경 및 버전을 선택하고 하단에 나오는 설치 파일을 다운로드 받는다.

   - 사이트 : https://www.zabbix.com/download_agents

   - 설치시, 다른 항목들은 자동으로 채워진다. 서버의 ip만 입력해주면 된다.

   - path에 추가를 위한 선택도 해줘야 한다.

 

   - zabbix_agentd.conf 파일 위치

 

6. zabbix 서버에 호스트 연동 - 윈도우

   - 위와 동일하게 정의한다 (호스트 명은 conf 파일과 달라도 되는듯)

 

7. 아이템 추가

   - 아이템 추가 관련 정보 : https://www.zabbix.com/documentation/1.8/en/manual/config/items

   - 호스트를 누르고 등록된 호스트 리스트 중 원하는 호스트의 아이템을 누른다.

   - 오른쪽 상단 아이템 생성 버튼을 무르면 new item 창을 확인할 수 있다.

 

   - 세번째 항목인 키 입력 필드의 오른쪽 선택 버튼을 누르면 정의할 수 있는 키들에 대한 정보를 제공한다.

 

   7.1. 윈도우의 cpu 정보 주집 아이템 추가

      - 아이템 생성 > 키의 선택 버튼을 눌러 cpu와 관련된 아이템을 검색해보면 아래와 같이 system.cpu.load 항목을 찾을 수 있다.

 

      - 해당 아이템을 선택하면 키 값이 정의된다.

 

      - 내부 설정 값은 모두 지우고 기본값을 설정한다.

 

      - 이름은 "Check CPU %"로 정의한다.

      - 단위를 "%"로 정의한다.

 

      - 아이템 추가 후 다음과 같이 등록된 창을 확인할 수 있다.

 

   7.2. 최근 데이터 갱신하기

      - 모니터링 -> 최근 데이터를 선택한다.

      - 호스트에 아이템을 등록한 client-windows01을 입력하고 적용을 누른다.

      - 업데이트된 리스트의 아이템을 선택한다.

      - 아래 활성화된 지금실행 버튼을 누르면 갱신된 상태값을 확인할 수 있다.

 

   7.3. icmp ping 통신 아이템 추가

      - icmp 아이템 관련 정보 : https://www.zabbix.com/integrations/ping

      - 이름은 "Check Ping to Host"로 정의한다.

      - 종류는 간단 검사로 선택한다.

      - 키는 제일 상단에 있는 아이템을 선택하고 옵션 항목을 모두 삭제하여 기본 상태로 정의한다.

 

   7.4. 최근 데이터 갱신하기

      - 최근 데이터의 적용 버튼을 누르면 최근 값이 1이 출력된다.

         - 이는 ping 통신에 대한 응답이 있다는 의미이다.

 

   7.5. 장애조치 클러스트에 대한 서비스 추가

      - 호스트 > windows01 아이템 클릭 > 아이템 생성을 클릭한다.

      - 이름을 "Check clussvc Service(클러스터 서비스)"로 정의한다.

      - zabbix service check을 구글 검색하여 다음 페이지를 참고한다.

         - 서비스 관련 정보 : https://www.zabbix.com/documentation/current/en/manual/it_services

         - service.info 키 값으로 정의할 수 있다.

         - 0일 경우에는 실행중이고, 6일 때에는 멈춰있다.

 

      - 키 값의 파라미터를 service.info[clussvc] 로 정의한다.

 

   7.6. 호스트의 아이템들을 복사하는 방법

      - 원본 호스트의 아이템들을 선택하고 하단 복사를 누르면 어디에 복사할 것인지 선택할 수 있다.

 

   7.7. centos의 메모리 사용량 가져오기

      - 이름은 "Check Used Memory %"로 정의한다.  

      - 키 값은 "vm.memory.size[pused]"로 정의한다.

      - 수치는 float으로 선택한다.

      - 단위는 %로 정의한다.

 

   7.8. 최근 데이터 갱신

 

8. 트리거 설정

   8.1. 트리거 설정은 무엇인가?

      - 호스트에서 수집되는 아이템 항목들에 관리자는 조건을 설정할 수 있다.

         - 예를 들어 cpu 사용률이 90%에 도달할 경우 알림을 달라고 설정할 수 있다.

         - 혹은 네트워크 통신이 안되거나, 특정 윈도우 서비스가 멈췄을 때 트리거를 발동시킬 수 있다.

 

      - Trigger는 Action과 연동하여 알림을 보내거나 특정 작업을 수행할 수 있다.

      - 트리거의 기준은 관리자가 여러 방법으로 설정할 수 있다.

         - 최근 수집한 데이터 중 평균 값이 90%가 넘는 경우

         - 최근 수집한 데이터가 모두 90%가 넘어야 하는 경우

         - zabbix의 기본 값 사용

 

      -  모니터링에서 장애가 발생한 경우, 다시 복구가된다면, 장애 표시도 정상으로 돌아온다.

      - 트리거 또한 아이템과 동일하게 복사 기능으로 다른 아이템들의 트리거에 생성한 항목들을 복사할 수 있다.

 

   8.2. cpu check 트리거 만들기

      - 3번의 모니터링 결과 중 최소 값이 70% 이상의 사용량인 경우

         - 트리거 생성에서 조건식 추가를 한다.

         - 이름을 정의하고, 심각도는 가벼운 장애를 선택한다.

            - 아이템 필드에서 버튼을 눌러 이전에 생성한 cpu check 아이템을 선택한다.

            - 기능에서 함수들을 선택할 수 있다. min()을 선택한다.

            - 최근 3회를 선택한다

            - 결과는 70을 정의하고 부등호는 >를 선택한다.

 

         - 모니터링 예시

1차 2차 3차 결과
80 90 100 장애
65 40 100 정상
100 30 100 정상

 

9. 템플릿 적용하기

   9.1. 기본적으로 제공하는 템플릿

      - 데이터 수집 > 템플릿 에는 zabbix에서 기본적으로 제공하는 300개가 넘는 템플릿들을 확인할 수 있다.

      - 이름 필드에 os 종류 및 추적하기 원하는 아이템을 입력하면 검색이 가능하다.

 

      - 각 템플릿은 목적에 맞게 모니터링으로 추적할 아이템과 경고를 설정하는 트리거 등이 만들어져 제공되어진다.

      - 트리거의 조건식을 보면 정수가 아닌, $로 시작하는 변수로 되어 있다. 이것은 템플릿 내 정의된 변수로 매크로에 정의되어 템플릿 내에서 사용되어 진다.

      - 트리거의 확인은 템플릿의 호스트, 아이템, 트리거, 그래프, 대시보드 등을 누르면 상단에 링크로 된 메뉴가 제공되어진다. 이 곳에서 템플릿 이름을 클릭하면 템플릿 관련 새로운 창이 뜨는데 이 곳에서 매크로 탭을 확인할 수 있다. 

         - 모든 탬플릿 / {템필릿 이름}

 

   9.2. 호스트에 적용하기 - centos

      - 데이터 수집 > 호스트 메뉴를 누르고 client-centos를 이름 필드에 입력하여 검색한다.

      - client-centos 이름을 클릭하면 호스트의 설정을 할 수 있는 창이 나타난다.

      - 템플릿 필드의 선택 버튼을 누르면 템플릿 창이 나타난다. 

      - linux by zabbix agent를 선택하고 호스트 창에서 갱신을 누른다.

 

      - 아이템, 트리거 등의 항목들에 포함된 설정 값들이 증가된 것을 숫자 표기로 확인할 수 있다.

      - 최근 데이터에도 수직되는 항목들이 늘어난 것을 확인할 수 있다.

      - 사용자가 만든 항목에는 이름 앞에 아무것도 표시되는게 없지만, 템플릿으로 추가된 항목들에는 템플릿 명이 붙어있다.

 

   9.3. 외부 템플릿 가져오기

      - 데이터 수집 > 템플릿 > 오른쪽 상단 가져오기 버튼 클릭을 하여 가져올 수 있다.

      

      9.3.1. 외부 템플릿 검색

         - 왼쪽 메뉴 하단에 integrations 메뉴를 클릭한다.

         - 연동할 수 있는 서버나 서비스들의 템플릿들을 다운로드 할 수 있는 홈페이지로 이동한다.

         - 예를들어 아파치 서버 관련 템플릿을 다운받을 경우, 해당 배너를 클릭하고 내부 source 의 링크를 눌러 이동한다.

         - 소스 다운받기 페이지 왼쪽 상단에서 릴리즈 버전을 선택한다.

         - 릴리즈 정보 하단에 나타나는 yaml 파일을 눌러 이동한다.

 

         - 오른쪽 상단에 Raw file을 눌러 이동 후, 우 클릭하여 페이지를 다른 이름으로 저장하여 다운로드를 한다.

         - 이후, 템플릿 메뉴에서 가져오기를 클릭하여 다운받은 yaml 파일을 가져온다.

 

   9.4. 템플릿 삭제하기

      9.4.1. 템플릿으로 제공된 아이템, 트리거 등 모든 항목 일괄 삭제

         - 데이터 수집 > 호스트 > 호스트 이름 클릭을 하여 호스트 창을 확인한다.

         - 템플릿 필드에서 링크와 보존 데이터 삭제 클릭

 

      9.4.2. 템플릿 연동만 삭제하고 적용된 아이템, 트리거 등은 유지하기

         - 데이터 수집 > 호스트 > 호스트 이름 클릭을 하여 호스트 창을 확인한다.

         - 템플릿 필드에서 링크 삭제 클릭

 

10. 디스커버리 (Discovery)

   - 자원을 자동으로 찾아주는 기능이다.

   - zabbix는 클라이언트 서버의 특정 자원을 찾기 위해 looping을 돌며 어떤 자원들이 있는지 검색한다.

   - 이때, 디스커버리를 사용하면, 아이템, 트리거, 그래프까지 자동으로 찾고 등록을 해준다.

 

   10.1. windows01에 Windows by Zabbix agent 템플릿 설치 후 디스커버리 확인

      - 윈도우 템플릿으로 Windows by Zabbix agent를 설치하면, 데이터 수집 > 호스트 메뉴에서 windows01의 디스커버리를 클릭하면 4개의 템플릿으로 추가된 디스커버리를 확인할 수 있다.

 

      - 첫번째 항목인 Mounted filesystem discovery의 아이템을 확인하면 5개의 항목을 확인할 수 있다.

 

      - 세번째 항목인 total 디스크 항목을 선택한다.

         - FS [{#FSLABEL}({#FSNAME})]: Space: Total

 

      - 해당 설정의 동작은 다음과 같다.

         - 마스터 아이템( Get data )의 결과 중에 키 값( total )만 가져온다는 의미이다.

            - 마스터 아이템 : client-windows01: FS [{#FSLABEL}({#FSNAME})]: Get data

            - 키 값 : vfs.fs.dependent.size[{#FSNAME},total]

 

      - Get data 확인

         - 해당 호스트/디스커버리/아이템의 첫번째에 정의되어 있다.

            - 마스터 아이템 : client-windows01: Get filesystems

            - 키 값 : FS [{#FSLABEL}({#FSNAME})]: Get data

 

         - 호스트의 아이템에서 이름 필드에 get으로 검색을 하면 Get data 아이템을 확인할 수 있다.

 

          - 아이템을 확인하면 fs.get 키를 사용한다는 것을 확인할 수 있다.

 

          - zabbix 서버의 터미널에서 명령어를 이용해 직접 키 값을 확인할 수 있다.

            - 명령어 : zabbix_get -s 10.0.2.20 -k vfs.fs.get

            - 결과 :

 

         - 모니터링 > 최근 데이터에서 확인이 가능하다.


   10.2. 새로운 디스커버리 추가

      - 클라이언트 서버에 변경 사항이 발생하면, 디스커버리로 인해 자동으로 관련한 정보가 수집되어 전달되고, 관련한 아이템, 트리거 등이 생성된다.

 

   10.3. 디스커버리 수집 제한

      - 많은 서버에서 모든 데이터를 수집한다면, zabbix 서버는 많은 부담을 가지게 된다. 이에 디스커버리의 원치 않은 항목을 비활성화 함으로 수집을 제한할 수 있다.

         - 비활성화된 상태에서 템플릿을 추가하여도, 자동으로 아이템, 트리거 등이 추적, 생성되지 않는다.

 

11. 에이전트 모드

   11.1. passive 모드

      - 서버에서 각 에이전트 ip를 등록하고, 주기적으로 각 에이전트에게 요청을 보내 데이터를 받아오는 모드이다.

      - zabbix 서버에서 에이전트에게 모니터링 시간별로 요청을 해야 하기 때문에, 서버의 과부하가 증가된다.

      - 요청 후 전달받은 데이터를 zabbix 서버가 DB에 저장한다.

 

      - 강사의 경우 1000대의 모니터링에도 문제없이 사용했다고 한다.

 

      - 데이터 수집 단계

         - zabbix 서버에서 모든 에이전트에게 데이터 요청

         - 에이전트는 요청한 데이터의 결과 값을 서버에 전달

 

      11.1.1. zabbix 서버에서 에이전트에게 데이터 요청시

#json
{
	"request": "passive checks",
    "data": [
    	{
        	"key": "system.cpu.util",
            "timeout": 3
        }
    ]
}

 

      11.1.2. 에이전트에서 zabbix 서버에게 데이터 전달시

#json
{
	"response": "success",
    "data": [
    	{
        	"key": "system.cpu.util",
            "value": "95"
        }
    ]
}

 

   11.2. active 모드

      - zabbix 서버는 에이전트의 호스트 이름만 정의한 후 listen 상태에서, 각 에이전트가 접속하기 때문에 에이전트의 ip를 등록할 필요가 없는 모드이다.

      - 에이전트의 호스트 ip가 변경 되더라도 호스트 zabbix 서버는 호스트 이름만으로 관리를 하기 때문에 관리가 편리하다.

      - 각 에이전트가 zabbix 서버에 네트워크 요청을 하기 때문에, 서버의 과부하가 감소된다.

      - log 수집과 같이 active 모드에서만 동작하는 아이템이 있다.

 

      - 데이터 수집 단계

         - 각 에이전트는 전달해야 하는 데이터가 어떤 것들이 있는지 확인을 하는 요청 메시지를 서버에 전달한다.

         - zabbix 서버는 수신해야 하는 데이터들에 대한 정보를 요청한 에이전트에게 전달한다.

         - 에이전트는 전달받은 정보를 기반으로 모니터링 데이터를 담아 서버에 전달한다. 

 

      11.2.1. 에이전트에서 전달해야 하는 모니터링 데이터 정보 요청시

         - 에이전트는 자신의 호스트 정보를 요청 메시지에 담아 서버에게 전달한다.

# json
{
	"request": "active checks",
    "host": "client-windows01"
}

 

      11.2.2. 모니터링 아이템 정보 전달시

         - zabbix 서버는 호스트 정보를 기반으로 등록된 아이템 정보를 확인한다.

         - 등록된 아이템 정보를 기반으로 데이터 리스트를 만들어 에이전트에게 전달한다.

# json
{
	"response": "success",
    "data": [
    	{
        	"key": "system.cpu.util[]",
            "delay": 60,
            "lastlogsize": 0,
            "mtime": 0
        }
    ]
}

 

      11.2.3. 에이전트에서 모니터링 정보를 zabbix 서버에 전달시

# json
{
	"request": "agent data",
    "data": [
    	{
        	"host": "client-windows01",
            "key": "system.cpu.util[]",
            "value": "95",
            "clock": 1400675595,
            "ns": 76808644
        }
    ],
    "session": "1234456akdsjhfoui"
}

 

   11.3. 정리

구분 Passive 모드 Active 모드
통신 방향 서버/프록시 -> 에이전트 (서버가 요청) 에이전트 -> 서버/프록시 (에이전트가 푸시)
사용 포트 10050(에이전트) 10050(자빅스 서버)
부하 서버 부하 높음, 에이전트 부하 낮음 서버 부하 낮음, 에이전트 부하 높음
비용(운영/관리) 소규모/단순 네트워크 적합, 관리 간단 대규모/복잡 네트워크에 적합, 서버 확장성 우수
주 용도 실시간 요청, 원격 명령, 내부망, 신속한 트리거 로그/이벤트 모니터링, 클라우드, NAT, 대규모 환경
구성 변경 반영 서버에서 즉시 반영 가능 에이전트가 주기적으로 구성 동기화
호스트 등록 IP/DNS 필수, 인터페이스 지정 필요 호스트명만 일치하면 됨

 

   11.4. active 모드 설정

      11.4.1. 각 호스트의 zabbix_agentd.conf 파일 수정

         - ServerActive=127.0.0.1 으로 루프백 되어 있으면 passive 모드이다.

         - ServerActive={zabbix server ip}로 되어 있으면 active 모드이다.

         - RefreshActiveChecks 변수에 정의된 정수는 초단위이다. 이 주기마다 에이전트는 서버에 통신을 시도한다.

 

      11.4.2. Zabbix 서버에 호스트 등록

         - 호스트의 Hostname 변수의 이름과 zabbix 서버에 등록된 호스트 이름은 동일해야 한다.

            - 호스트 등록 후, 아이템 등록을 수동으로 하거나 템플릿으로 등록한다.

            - 템플릿을 선택하는 경우, 끝에 active가 명시되어 있는 것을 선택해야 한다.

               - 예시 : Windows by Zabbix agent active

            - ip는 정의하지 않아도 된다.

 

      11.4.3. 호스트 모니터링 확인

         - 아이템을 확인하면, 종류에 ZABBIX 에이전트 (액티브) 가 선택되어 있는것을 확인할 수 있다.

            - 지금 실행 버튼이 비활성화 되어 있다. 이는 통신 주체가 클라이언트 호스트이기 때문에 수집을 실시간으로 요청할 수 없기 때문이다.

 

         - 디스커버리가 활성화인 경우, 호스트 등록 후, 연동이 된다면 디스커버리를 통해 자동으로 아이템이 등록된다.

 

댓글