zabbix 서비스 발견 (GoogleUpdater) 제외

윈도우를 zabbix 으로 감시하면 시작 프로그램에 등록되었으나 정지된 프로그램에 대한 알림이 온다.
보통은 트리거에 대한 비활성화 만으로 쉽게 꺼둘 수 있다.

다만 크롬 브라우져가 깔려 있을때 zabbix agent 에서 GoogleUpdaterService, GoogleUpdaterInternalService 가 꺼져있다고 알림이 계속 온다.
이는 트리거를 끄더라도 새로운 버전이 나올 경우 버전 숫자가 높아져서 새로운 알림으로 오게 된다.
때문에 windows agent 의 발견(discover)를 일부 수정하여 서비스 발견을 하지 못하도록 설정해야 한다.

2025-03-14_1159012025-03-14_115902 2025-02-25_1520302025-02-25_152104
입력값 : {#SERVICE.NAME}^GoogleUpdater.*$
2025-02-25_162936
입력값 : State of service, 선택 값은 둘다 아니오 이다.

 

이미 발생한 트리거는 삭제 또는 비활성화를 한다.

 

출처: https://www.zabbix.com/forum/zabbix-help/477441-googleupdaterservice-alerts

 

powershell 을 이용한 프로그램 삭제

Hyper-v Server 2019 또는 2016을 사용 하게 되면 GUI 환경이 제공되지 않아서 프로그램 설치 및 삭제에 에로사항이 있다.

이때 아래와 같이 작업관리자로 cmd 혹은 powershell 을 실행해서 사용할 수 있다.

 

먼저 cmd 창을 열어야 하는데 RDP 원격 접속중에 Ctrl + Alt + END 를 누르면 일반 Windows PC 에서 Ctrl + Alt + Del 키를 누른것과 비슷한 선택 창이 열린다.

2025-02-21_095021

작업 관리자를 열어서 “파일” > “새 작업 실행(N)” 창에서 powershell 을 실행 한다.

2025-02-21_095055 2025-02-21_095155 2025-02-21_095322

 

설치된 프로그램 리스트를 확인 한다.

나오는 리스트에서 삭제할 프로그램 명을 입력해 선택적으로 출력되는지 확인 한다. [Zabbix Agent (64-bit)]

 

삭제 하고 잠시 기다린 뒤에 리스트를 다시 출력해서 확인해 본다.

 

삭제가 되었다면 새 프로그램 [Zabbix Agent 2 (64-bit)] 다운 받아 설치를 진행 한다.

 

Zabbix 서버의 데이터베이스 테이블 파티셔닝

Zabbix 를 구축하고 일정 기간 운영을 할 경우 “Zabbix housekeeper processes more than 75% busy” 장애를 만나게 된다.
Zabbix 는 housekeeper 가 history 및 trends 테이블에 불필요한 쿼리를 삭제하는 기능을 가지고 있다.
감시 대상이 많을 수록 크겠지만 history_uint 테이블의 크기는 GB 단위를 사용하게 된다.

이때 DELETE 를 이용하게 되는 수백만 단위에서 시간 값을 가지고 삭제 하기 때문에 문제가 된다.
cpu 과점 문제가 발생할 수 밖에 없다. (innodb buffer pool 설정을 키우고 큰 메모리를 장착했다면 문제가 발생하지 않겠지만..)

때문에 housekeeper 대신 테이블을 일자별로 파티셔닝을 하고 DB프로시저를 이용해서 DROP을 하도록 하면 자원 사용을 줄일 수 있다.

아래 프로시저 생성 방법은 미리 일정한 시간 마다 사용할 파티션을 미리 생성(24 시간 / 3개의 포인트) 하고 맞는 시간에 Insert 가 발생 한다면
그에 맞는 파티션에 적재 되도록 하고, 보유 기간(7일)이 만료된 파티션을 DROP을 하는 기능을 가지고 있다.

 


 

1. 압축파일을 다운 받아 프로시저를 DB에 생성한다.

프로시저는 history 는 7일 trends 는 365일 으로 지정되어 있다.

 

2. Mysql 으로 접속해서 스케쥴러가 켜져 있는지 확인한다.

 

3. 생성한 프로시저의 스케쥴링을 12시간 마다로 설정 하고 확인 한다.

이 명령어를 실행할때 이미 쌓여있는 데이터가 크다면 최초 프로시저 실행 시간에 많은 시간이 걸릴 수 있다.

 

4. housekeeper 사용을 끈다.

2025-02-18_164446

 

zbx_db_partitiong.sql 파일로 import 한 프로시저에서 history 는 7일 trends 는 365일로 지정 되어 있으며 아래와 같이 보관 기간 , 파티션 인터벌, 사전생성 갯수 등을 변경 할 수 있다.

 

파티셔닝이 된 정보는 다음과 같이 확인이 가능하다.

 

출처 : https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database/

zabbix-agent2 추가 템플릿 적용

감시대상에 zabbix-agent2 를 설치 했다면 아래와 같이 추가 플러그인을 통해서 좀더 상세한 감사를 할 수 있다.
Centos는 6 이상 부터 zabbix-agent2 를 사용할 수 있고, Ubuntu는 18.04 이상 부터 zabbix-agent2 를 사용할 수 있다.

 


 

1. docker

docker.sock 파일 권한을 주어야(usermod) 하기 때문에 zabbix 계정의 서브 그룹으로 docker 를 추가 해야 작동 한다.

2025-02-17_161342

 


 

2. smartctl 을 이용한 디스크 장애 사전 탐지

  • 리눅스

물리적인 HDD 가연결된 서버의 경우 smartctl 을 설치 해서 디스크의 장애를 사전에 탐지할 수 있다.(가상 서버는 불필요 하겠지 ‘ㅅ’a)
smartctl v7.1 이상을 요구 하기 때문에 Ubuntu 18.04 이상 // Rockylinux/Almalinux 8 이상에서 사용이 가능 하며 아래의 명령어로 설치 할 수 있다.

zabbix 계정에 smartctl 명령어 위치를 확인하고 password 없이 smartctl 사용 권한을 부여 한다.

smartctl 명령어 및 zabbix_agent2 명령어를 실행해서 테스트를 하고 정상적 이라면 zabbix-agent2 서비스를 재시작 한다.

 

  • 윈도우

https://sourceforge.net/projects/smartmontools/files/ 에서 smartmontools-7.4-1.win32-setup.exe 설치 파일을 받아 설치 한다.

워드패드를 관리자 권한으로 실행 한뒤에 C:\Program Files\Zabbix Agent 2\zabbix_agent2.d\plugins.d\smart.conf 파일을 불러와서 Plugins.Smart.Path을 다음과 같이 수정 한다.

설치 파일(exe)을 설치 할때 %PATH%를 유져로 잡아주기 때문에 그냥 cmd 나 smartctl 에서의 명령어 사용은 문제가 없지만 zabbix agent 2 서비스에서 호출을 해야 하기 때문에 다음 그림과 같이 시스템 변수로 %PATH% 를 잡아준다.

2025-02-27_173546   2025-02-27_1736062025-02-27_1736492025-02-27_173755

powershell 을 관리자 모드로 실행 해서 테스트를 하고 정상적 이라면 zabbix-agent2 서비스를 재시작 한다.

 

  • zabbix-server 콘테이너 안에서 zabbix_get 으로 클라이언트에 호출을 할 수 있다. (포트 10051)

호출을 했을때 마지막에
exit status 2 는 zabbix-agent2 가 smartctl 을 실행 할 수 없는 경우이다. 리눅스의 경우 sudo 권한 윈도우의 경우 path 가 문제일 가능성이 높다.
exit status 4 코드가 발생할 경우 디스크의 S.M.A.R.T 가 꺼져 있어서 확인할 수 없는 경우 이다. (레이드카드<->smartctl  호환성 문제)

 

  • 웹 UI 에서 세팅

zabbix 관리자 화면에서 생성된 호스트 템플릿에 SMART by zabbix agent 2를 추가 한다.

2025-02-18_132009

 

2025-02-28_091214

위 표를 보면 알겠지만 Linux에서는 대부분 지원 하지만 Windows 일 경우 지원하는 하드웨어가 좀 한정적이다.

 

  • 문제점1

smartmontools 버전이 7.0 이하 일때는….

지원되지 않는 OS 일경우 smartctl 명령어를 최신버전을 컴파일 해서 설치 한다. (gcc-c++, make 가 설치되어 있어야 한다.)
(Rockylinux 8.5 에서는 smartctl 버전이 7.1 이지만 정상 동작 하지 않았고 7.4를 깔면 동작이 가능했다.)

메뉴얼: https://www.smartmontools.org/wiki/Download#Installfromthesourcetarball
다운로드: https://sourceforge.net/projects/smartmontools/files/

make install 을 하면 centos 7 기준 으로 /usr/local/sbin/smartctl 위치에 설치 된다.

sudo 권한 부여 및 /etc/zabbix/zabbix_agent2.d/plugins.d/smart.conf 파일을 수정한다.

 

  • 문제점2

레이드 카드가 달린 HP 서버 linux 에서는 cciss 으로 명령어를 수집을 하긴 하는데 문제가 발생 하였다.
명령어 호출을 어찌하는지 아래 명령어로 확인 하는데만 26초가 소요가 되었다.

서버에 존재하지도 않는 3ware, areca 등을 호출하면서 에러메세지 리턴을 json 으로 파싱하면서 많은 시간을 쓴다는걸 확인 하였고 다음과 같이 해결 하였다.
먼저 위 명령어를 참조 해서 정상적인 동작을 하는 명령어를 찾는다. (SMART 가 Enabled 으로 나오는 명령어를 찾는다)

zabbix agent 가 실행하는 명령어를 보면 nvme0, nvme1 호출은 정상적이다.
하지만 sdb 는 cciss,1 이 아닌 cciss,0 으로만 호출했기 때문에 정상 호출이 안되어서 인식하지 못한다.
그래서 그에 대응할 수 있도록 sd[x] -d scsi에 반응 하도록 하고 스 이외 명령어 실행은 빠르게 종료 되도록 exit 2로 반환 하도록 스크립트를 만들어 적용 한다.

sudo 권한에 생성한 스크립트의 실행 권한을 추가 한다.

/etc/zabbix/zabbix_agent2.d/plugins.d/smart.conf 에서 만든 스크립트을 실행하도록 한다.

zabbix agent 2 를 재시작 한다.

 

  • 문제점3

Dell 서버에서는 또 다른 문제가 확인이 되었다.
디스크가 12개 정도 주렁주렁 달린 서버의 경우 위와 같은 방법으로 스크립트만 별도 작성해서 적용 하였을때에도 반환 속도가 4 ~ 7초 정도로 확인이 되었다.

smartctl 호출했을때 시간이 3초를 넘어가는 경우 Timeout occurred while gathering data 라는 메세지를 log 에서 확인이 가능하다.
/etc/zabbix/zabbix_agent2.conf/etc/zabbix/zabbix_agent2.d/plugins.d/smart.confTimeout=, PluginTimeout=, Plugins.Smart.Timeout= 옵션이 있으나
설정해도 3초가 넘어가면 시간 초과로 데이터 수집이 되지 않는다. (유명무실한 옵션….)

 


 

3. mysql

감시 대상 DB에 zbx_monitor 용 어카운트를 생성해야 한다.

이후 웹 UI – 호스트 설정 에서 다음과 같이 템플릿 Mysql by Zabbix agent 2을 추가 한다.

2025-02-17_173105

메크로 메뉴로 이동해서 다음과 같이 {$MYSQL.DSN}, {$MYSQL.USER}, {$MYSQL.PASSWORD}을  입력 한다. (관리 > 매크로 로는 설정이 되지 않는 부분이다.)
DSN 에는 tcp://localhost:3306을 입력하고, 패스워드는 텍스트 => 비밀 문자 형식으로 하여 보이지 않도록 한다.

2025-03-07_113701

Docker 으로 생성된 DB 일경우 아래와 같이 {$MYSQL.DSN} 부분을 tcp://[ContainerIP]:3306으로 지정 해야 한다.

2025-03-07_113758

 


 

4. postgres

마찬가지로 감시 대상 DB에 zbx_monitor 용 어카운트를 생성해야 한다.

pg_hba.conf 파일에 하단에 아래 내용을 추가 한다. (경로: /etc/postgresql/[버전]/main/pg_hba.conf)

설정한 이후 postgra 서비스를 재시작 해야 한다.

 

이후 웹UI 에서의 설정은 다음과 같이 PostgreSQL by Zabbix agent 2를 템플릿에 선언하고 매크로에 {$PG.PASSWORD}를 설정하면 된다.
2025-03-07_165623
2025-03-07_165752

Docker를 이용한 Zabbix 7.2 설치 및 구성

2025-02-17_135350

서버 감시를 위한 오픈소스 툴인 Zabbix 7.2 을 Docker 를 이용해  구성 한다.

공식 메뉴얼 : https://www.zabbix.com/documentation/current/en/manual/installation/containers

 

메뉴얼이 영어긴 하지만 설명이 잘 되어 있는 편이다.

Docker 가 설치된 서버를 준비 하고 메뉴얼을 따라 진행 하되, 몇가지 주의 할 점이 있어서 작업 메뉴얼을 작성 한다.

 


1. zabbix 서버 구축

먼저 도커에 zabbix-net 이라는 네트워크를 생성 한다.

 

mysql 컨테이너를 실행한다.

추가된 옵션:
-v /docker/mysql/conf:/etc/mysql/conf.d : mysql 설정을 변경해야 하는 경우를 위해서 호스트와 연결한다.
-v /docker/mysql/mysql_data:/var/lib/mysql : mysql 버전 업그레이드를 위해 데이터 폴더를 호스트와 연결한다.

 

zabbix 게이트웨이 컨테이너를 실행한다.

JMX 를 이용한 java 프로세스 감시용도로 쓴다.

 

zabbix 서버 컨테이너를 실행 한다.

추가된 옵션:
-e ZBX_CACHESIZE=256M,-e ZBX_VALUECACHESIZE=256M : 감시할 대상이 많아서 증설하였다.

 

zabbix 웹 UI 컨테이너를 실행한다. (nginx, php)

PHP_FPM_PM_MAX_REQUESTS 을 사용해 php-fpm 프로세스가 종료 될 수 있도록 하였다.

 

zabbix-agent2 는 docker 방식도 존재 하지만  호스트OS에 직접 설치해 Docker 를 실행하는 호스트 역시 감시 대상에 넣도록 한다. (호스트OS: CentOS 7)

 


 

2. 기본 설정

설치된 서버의 IP로 접속을 해서 로그인 한다.

URL: (예제) http://192.168.0.240/
ID: admin
PW: zabbix

 

언어 설정은 관리 메뉴에서 변경할 수 있다. (각 유져별로 프로파일에서 설정 할 수도 있다.)
2025-02-17_130816

 

기본적으로 zabbix server 설정이 한개가 되어 있다.
템플릿에 Linux by Zabbix agent, Docker by Zabbix agent 2 를 추가 하고 호스트 OS의 hostnameIP 를 각 칸에 맞게 입력 한다.

2025-02-18_161129

 


 

연결할 서버들은 zabbix-agent2 또는 zabbix-agent 를 설치해서 연결 하거나 SNMP(네트워크 스위치, UPS, NAS) 으로 연결 한다.

zabbix 7.2 의 경우 연결해보니 CentOS 7(agent2) 이상 Ubuntu 16.04 부터 연결이 가능했다. (16.04 의 경우 agent2 가 아닌 agent 로 설치해야 한다.)

CentOS6 또는 Ubuntu 14.04 이하 버전의 경우 낮은 버전의 agent 를 설치해 연결해도 동작은 한다.

다만 몇가지 트리거가 동작하지 않았다. (크리티컬 하지 않다.)

 


 

3. 감시 대상 추가

zabbix-agent2 또는 zabbix-agent 를 이용한 연결 (Linux or Windows)

https://www.zabbix.com/download_agents

2025-02-17_111744
위와 같이 버전 > OS > OS Version > 패키지를 선택하고 화면 아래로 스크롤해보면 설치 메뉴얼을 제공한다.
윈도우는 원형으로 표시된 부분을 눌러 다운받아(.msi) 설치 한다

리눅스는 설치 후 설정 파일/etc/zabbix/zabbix_agent2.conf을 자신에게 맞게 수정해야 한다.

설정 후에는 agent 를 재시작 한다.
주의할점으로 conf에 선언된 “Hostname” 과 zabbix 관리자 내에 설정된 각 “호스트명” 은 꼭 일치해야 하며 유일한(uniq) 값을 사용해야 한다.

윈도우는 아래와 같이 설치 화면에서 zabbix server 의 아이피를 입력 한다.
2025-02-17_112350
윈도우역시 여기서 입력되는 “host name” 과 관리자내의 “호스트명”이 일치해야 한다.
실제 부여된 컴퓨터이름과 관계 없이 바꾸어서 일치시켜 사용할 수도 있다.

2025-02-18_135126
감시 대상 추가의 연결 개념은 위 그림과 같다.

host-setting: 감시할 대상의 IP 또는 호스트명으로 연결 시도
agent.conf: 선언된 IP에서의 접근을 허용 & 템플릿 정보 획득 -> 데이터 생성
zabbix-server: 감시대상의 정보 수집

 

snmp를 이용한 연결

일반적으로 네트워크 스위치와 같은 경우 별도의 Agent 설치가 지원 될리가 없다. 그래서 SNMP(Simple Network Management Protocol) 을 이용해서 감시 한다.
2025-02-17_104837
SNMP 일반적으로 161포트를 이용해서 polling / trpping 방식으로 작동 한다.

SNMP 연결을 위한 커뮤니티는 관리 > 매크로 에서 지정 한다.
값 오른쪽 [T] 버튼을 눌러서 암호 형식으로 저장 하면 가려지기도 한다.2025-02-14_154638
보안이름, 인증패스, 프라이버시 패스는 감시 대상 장치에 동일하게 설정이 되어야 하겠다.

아래는 SNMP v3를 이용한 Synology 연결시 사용하는 방법 이다.
synology > 제어판 > 터미널 및 SNMP 설정

2025-02-17_110200

Zabbix Server > 데이터 수집 > 호스트 > synology-NAS > 인터페이스
2025-02-17_095818

각 UTM 또는 네트워크 스위치 등은 제공 되는 메뉴얼을 참조해서 snmp를 활성화 해서 연결 할 수 있다.

아래는 추가적인 예제로.. UPS(Uninterruptible Power Supply system) 장치의 SNMP 설정 화면 이다.
2025-02-17_113330
EATON 이란 브랜드 이고 zabbix 서버에 템플릿이 없어서 별도로 템플릿(yaml) 파일을 임포트 하였다.
https://github.com/zabbix/community-templates/tree/main/Power_(UPS)

 


 

4. 알림 설정

왼만한 장애요소는 이미 트리거로 등록 되어 있다.  (cpu/mem/disk 사용량 초과, 네트워크 이상 등등)
smartmontools 버전이 7.1 이상일때 디스크 배터 섹터 등의 감시도 된다.
때문에 알림 설정을 해서 서버관리자가 알수 있도록만 하면 된다.

알림 설정은 미디어 타입 활성화(연락 수단), 관리자 계정의 연락처 갱신, 트리거 액션 활성화 를 해서 받아볼 수 있다.
2025-02-17_133633 2025-02-17_133103
텔레그램 수신처는 botfather 를 이용해 봇용 채팅방을 생성하고 [chatid] 를 확인해서 넣어주면 된다.
2025-02-17_133339

 

역인글:

zabbix-agent2 추가 템플릿 적용
Zabbix 서버의 데이터베이스 테이블 파티셔닝
zabbix 서비스 발견 (GoogleUpdater) 제외
powershell 을 이용한 프로그램 삭제