zabbix란?
zabbix 참고1
참고2
참고3
zabbix 공식
- 서버, 네트워크 업무를 하는 사람에게 굉장히 유용한 시스템.
- 모니터링 시스템을 구축해서 장애가 생겼을 때 빠르게 대응할 수 있게 해준다.
개요
- 엔터프라이즈에 대응한 모니터링 솔루션. 오픈 소스로 배포된다.
- 다수의 네트워크 매개 변수 및 서버의 상태와 무결성을 모니터링하는 소프트웨어
- 유연한 알람 메커니즘을 갖추고 있어 사용자는 모든 이벤트에 통지를 하도록 설정할 수 있음.
이러한 기능을 통해 서버의 장애에 신속히 대응할 수 있다.
- 저장된 데이터를 바탕으로 보고서 및 데이터의 그래픽 표시 기능을 제공
- 폴링, 트래핑을 모두 지원.
모든 보고서, 통계 및 구성 매개 변수는 웹 인터페이스를 통해 액세스할 수 있으며, 웹 인터페이스는어떤 장소에서도 액세스할 네트워크나 서버의 상태를 확인할 수 있다.
동작 방식
- Active (Agent → Server)
Zabbix Agent 설정 파일에 serverActive의 IP 지정. 해당 IP를 참조하여 데이터를 전송한다.
Active는 활성이라는 뜻으로, 주기적으로 결과를 전송한다.
- Passive (Server → Agent)
Zabbix 동작방식은 Passive가 기본.
요청이 있을 경우 데이터를 전송한다.
- 폴링은 수동적(Passive), 트래핑은 능동적(Active)으로 기능하며, 두가지 방식을 사용해서 특정 간격이나 시간에 Health Check가 가능하다.
- 수동/능동은 Agent를 주체로 두고 이해해야 할 것 같다.
Agent가 능동(Active)하게 서버에게 데이터를 전송하니 트래핑은 능동적인 것,
Server의 요청에 Agent가 수동(Passive)하게 데이터를 전송하는 것이니 폴링은 수동적인 것, 이렇게 이해하는 것이 맞아 보인다.
폴링(Polling)
- 하나의 장치(또는 프로그램)가 충돌회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사, 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식.
- 여러 개의 장치가 동일 회선을 사용하는 상황에서 주로 사용.
- 대부분의 실시간(처럼 보이는) 웹사이트들은 클라이언트가 서버에게 일정한 주기를 가지고 응답을 주고받는 폴링 방식이라 할 수 있다.
- 문제점
- 주기가 짧으면 서버 성능에 부담이 감.
- 주기가 길면 실시간성이 떨어진다.
트래핑(Trapping)
- SNMP는 수동적인 프로토콜로 Agent는 Manager가 요청해야지만 응답을 한다.
- SNMP Trap은 Manager의 요청이 없더라도 Agent가 자의적으로 생성/송신하는 SNMP 메시지 중 하나.
이러한 SNMP Trap은 주로 시스템이 다운되거나, 새로 부팅되는 경우 등을 전송할 때 사용된다.
- 규격으로 제공하는 메시지 외에도 관리자가 직접 정의하여 설정할 수도 있다.
conf 파일 편집에서
- 패시브 에이전트를 사용할 때 : Passive checks related or server
zabbix 서버에서 agent로 호출되는 IP로 입력되야함.
- 액티브 Item을 사용할 때 액티브 아이템을 어디서 가져오는가에 대해 기입함.
기동할 때, 주기적으로 서버 액티브에서 수집되야하는 데이터를 받아서 가져오도록 함.
- Hostname 은 zabbix 서버에 등록된 이름과 같아야한다.
- 패시브의 경우 : zabbix 서버에서 agent로 요청을 보낸다. 그 요청에 대해서 응답을 주는 방식
- 액티브의 경우 : 액티브 서버에서 체크할 리스트를 에이전트가 서버로 요청.
서버에서는 그 항목들을 에이전트에서 수집해야되는지 목록을 주면 에이전트가 주기적으로 작업을 수행하면서 데이터를 수집하고, 그 정보를 서버로 보내주는 방식이다.
- 네트워크의 흐름 :
passive의 경우 서버→에이전트
active의 경우 에이전트→서버
- 방화벽 등의 문제로 서버→에이전트 요청을 하기 어려울 때 active 방식을 사용하면 좋다.
방식의 차이고, 수집 항목의 차이는 아니다. 다만, 액티브 방식으로만 수집할 수 있는 정보들이 있다.
액티브를 사용할 때는 호스트네임과 서버액티브를 고려해야한다.
기능
- 데이터 수집
- 가용성 및 성능 검사
- SNMP(트래핑 및 폴링), IPMI, JMX, VMware 모니터링 지원
- 사용자 정의 검사
- 사용자 정의 간격으로 원하는 데이터 수집
- 서버 / 프록시 및 에이전트가 수행
- 기본적으로 30초마다 지표 수집, 인터벌을 조정할 수 있다.
- 유연한 임계 값 정의
- 데이터베이스로부터 트리거, 참조값이라고 하는 매우 유연한 문제 임계값을 정의할 수 있다.
- 구성 가능한 알람
- 에스컬레이션 일정, 받는 사람, 미디어 유형에 대한 보내는 알림을 사용자 지정할 수 있음.
- 알림을 매크로 변수로 사용하여 의미 있고 도움이 될 수 있음.
- 자동 작업에는 원격 명령이 포함됨.
- 알림에 대해 구성을 고도화할 수 있으며, 사용자 정의 메시지를 이용해 알람 내용을 설정할 수 있다.
- 쉘 스크립트를 사용, 알림을 쉽게 스크립트할 수 있음.
- 그래프 작업/ 다양한 시각화 옵션
- 강력한 모니터링 기능과 그래프를 하나의 도구로 결합함.
- 사용자 정의에 따른 다양한 그래프를 지원하고 다양한 스크린과 슬라이드 쇼를 이용해 대시보드 구현할 수 있다.
- 모니터링 된 항목을 내장된 그래프 기능을 사용하여 즉시 그래프로 표현할 수 있음.
- 웹 모니터링
- 웹 사이트에서 시뮬레이션 된 마우스 클릭 경로를 따라 기능 및 응답시간을 확인할 수 있음.
- 데이터 저장
- 수집한 데이터를 MySQL 등의 데이터베이스에 저장
- 데이터 저장 기간을 자유롭게 구성할 수 있고, 데이터베이스 백업 기능이 지원됨.
- 쉬운 구성
- 템플릿 사용
- 템플릿을 사용해 검사 시간을 절약할 수 있음.
- 다른 템플릿을 상속할 수 있는 템플릿
- 네트워크 발견
- 네트워크 장치를 자동 검색
- 에이전트를 자동으로 등록하고, 파일 시스템, 네트워크 인터페이스 및 SNMP OID 발견
- 빠른 웹 인터페이스
- PHP 웹 기반 프론트 엔드
- 어디서든 액세스 할 수 있는 장점.
- Zabbix API
- 대량 조작, 타사 소프트웨어 통합 등의 목적을 위해 Zabbix에 프로그래밍 가능 인터페이스를 제공한다.
- 사용 권한 시스템
- 시스템에 대한 사용자의 권한을 설정해서 특정 사용자를 특정 뷰에 한정할 수 있다.
- 모든 기능을 갖춘, 쉽게 확장 가능한 에이전트
- Linux와 Windonws 모두에 배포 가능
- 복잡한 환경에 대비
- zabbix 프록시를 사용해 원격 모니터링을 쉽게 할 수 있음.
zabbix 구조
Server + Web Interface + Proxy + Agent + Database
- Server
- 모니터링을 수행하는 중앙 프로세스이자 데이터 저장소
- 가용성 및 무결성 정보 제공
- 통계 데이터, 설정 데이터 저장.
- Web Interface
- zabbix Access Interface 제공
- 설치시 APM 사전 설치 필요
- Proxy
- zabbix 서버의 부하 분산에 사용
- 서버를 대신하여 성능/가용성 데이터 수집
-Agent
- 리소스와 애플리케이션 모니터링
- 수집 데이터를 Database에 전송
- Host: 수집 대상의 논리적인 단위.
서버, 네트워크 장비, 특정 네트워크 장비의 일부 아이템 등이 그 대상이 될 수 있다.
- Item은 수집 항목.
CPU나 메모리 사용량 등..
- Trigger/Event : 임계치 설정/임계치 도달 시 발생
CPU가 90% 사용됐을 때 이벤트를 발생시켜라 등. 이런 임계치가 되면 이벤트가 발생한다.
- Condition : 이벤트가 발생할 수 있는 조건들.
- 전체적인 순서 : 설정해놓은 임계치가 되면 Trigger가 동작하며 Event를 발생시키고, Condition(조건)에 맞춰 Operation을 발생시킨다. SMA/E-mail 발송 등을 Operation을 통해 설정할 수 있다.
- 템플릿 : 수집(감시)항목들의 세트
SNMP(Simple Network Management Protocol)
SNMP
SNMP2
개념
- IP 기반 네트워크 상 각 호스트로부터 정기적으로 여러 관리 정보를 자동으로 수집, 실시간으로 상태를 모니터링 및 설정할 수 있는 서비스로 시스템이나 네트워크 관리자가 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있게 해주는 네트워크 관리 프로토콜.
- SNMP는 프로토콜일 뿐이며, 이를 활용해 실제 네트워크 관리정보를 얻기 위해서는 관련 프로그램이 있어야 함.
약점
- 관리의 편의성을 주지만, 여러 취약점이 존재. 서비스 거부 공격(DoS), 버퍼 오버플로우, 비인가 접속 등이 그것.
구성
- 관리 시스템과 관리 대상으로 구성
관리 시스템은 Manager, 관리 대상은 Agent라고 부른다.
- SNMP Manager은 Agent에 필요한 정보를 요청하는 모듈. SNMP Agent는 관리 대상 시스템에 설치되어 필요한 정보를 수집, Manager에게 전달해주는 역할을 수행하는 모듈.
- 네트워크 관리를 위한 목적으로 주로 서버나 네트워크 장비에서 SNMP를 설정한 MRGT 프로그램을 이용해 트래픽 관리 등을 위해 사용된다.
- MRGT(Multiple Router Traffic Grapher) : SNMP 기반의 장비 모니터링 프로그램. 주 용도는 네트워크 트래픽 사용량 모니터링이지만, 벤더에서 제고하는 MIB 값을 사용해 다양한 정보 수집 가능.
- SNMP는 OSI 7계층으로 Application 계층 프로토콜. 메시지는 단순히 요청과 응답 형식의 프로토콜에 의해 교환되기 때문에 전송계층 프로토콜로 UDP 프로토콜 사용.
MIB
- MIB(Management Information Base) : 관리되어야 할 정보, 자원을 객체라하고, 이러한 객체들을 모아놓은 집합체를 MIB라고 함. 즉 관리자가 조회하거나 설정할 수 있는 객체들의 데이터베이스.
MIB는 객체별로 트리 형식의 구조를 이룸. 정보값을 문자로 표현
- OID(Object Identifier) : 정보값을 숫자로 표현
설치 및 환경 구성
상세 참고(소스코드로 설치하는 법 포함)
cnetos7 and zabbix
cnetos7 and zabbix2
Install Zabbix 공식
cnetos7 and zabbix3
단일 구성
version : zabbix 5.0
OS : CentOS 7
zabbix component : Server, Frontend, Agent
Database : MySQL
Web Server : Apache
- zabbix 공식 홈페이지에 접속하여, 다운로드 탭에서 설치 형태/버전 등의 옵션을 선택할 수 있다.
- 이 방식 외에도
Cloud Images
Docker Containers
등의 방식으로 다운받을 수 있다.
zabbix 대쉬보드 띄워보기
서버 생성 및 접속
- ncloud에서 서버를 생성하고, 공인 IP를 발급받아서 접속한다.
단일 구성해보는 것이 목표임으로 classic 환경에서 진행했다.
1. zabbix 레포지토리 생성
- zabbix 파일이 들어있는 레포지토리를 연결한다.
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
2. zabbix 다운로드
- sever, frontend, agent를 패키지로 다운받는다.
yum install zabbix-server-mysql zabbix-agent
3. zabbix frontend 설치
yum install centos-release-scl
4. frontend 활성화
- 다음 repo 파일을 수정해줘서 frontend를 활성화해준다.
enabled 값을 수정하자.
# vi /etc/yum.repos.d/zabbix.repo
enabled=0
으로 초기설정되어 있는 것을 =1로 바꿔주고 :wq
로 저장, 나간다.
5. frontend 패키지 설치
- zabbix frontend 패키지를 설치해준다.
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
6. Database 설치
- 그러고보니, MySQL을 설치하지 않았었다.
MySQL설치한다. 자세한 방법은 MySQL 설치. 여기에.
- 잘 설치했고, root 비밀번호를 변경해서 접속도 잘 된다.
7. Database 생성 및 설정
- 다시 zabbix로 돌아와서 Database를 생성/계정 생성한 뒤 권한 설정을 한다.
# mysql -u root -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
character set
: 문자표현
collate utf8_bin
: 대소문자 구분
create user zabbix@localhost
: localhost 유저 zabbix 생성.
grant all privileges on zabbix.* to zabbix@localhost
: 유저 zabbix에게 이름에 zabbix이 들어간 모든 테이블에 대해 모든 권한 부여
8. Schema 적용
- zabbix 서버 호스트에서 초기 스키마 및 데이터를 가져와 방금 생성한 Database에 적용.
- 데이터 베이스를 생성했을 때 설정한 패스워드를 입력하라는 메시지가 표시된다. root 사용자의 계정을 입력하면 된다.
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
- 이후 데이터베이스의 테이블을 확인해 정상적으로 적용됐는지 확인하자.
9. 데이터베이스 설정
- zabbix 서버에 대한 Database를 설정한다.
vi /etc/zabbix/zabbix_server.conf
10. Timezone 설정 후 실행
- zabbix frontend의 Timezone을 설정한다.
vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
파일을 수정해서 Timezone을 수정해준다.
# systemctl start zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
11. 오류 발생 및 해결
실행 오류 해결
- zabbix 서버가 실행되지 않고 있다는 메시지가 출력된다.
mysql> alter user 'zabbix'@'localhost' identified with mysql_native_password by '비밀번호';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> flush privileges;
- mysql에서 user zabbix의 비밀번호를 변경해줬고,
zabbix 권한을 주었으며,
flush privileges;
로 권한 적용을 해줬다.
- 아까 설정했던 DBPassword도 바꿔줬다.
11-2. 오류 발생 및 해결
php-fpm 다운로드
- 이번에는
rh-php72-php-fpm.service
에서 오류가 발생하는 것 같다.
Job for rh-php72-php-fpm.service failed because the control process exited with error code.
참고로 이번 설치에서 웹 서버는 nginx 대상이다.
12. 방화벽 설정
- frontend에 접속할 수 있도록 zabbix 서버의 방화벽을 설정하여, http 포트를 오픈하자.
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --reload
- 방화벽을 꺼놓았기 때문에 딱히 설정 없이 넘어가도록 한다.
13. Frontend 설정
- 이제 웹으로 접속해서 기타 설정을 마무리하자.
http://{공인IP}/zabbix
- 모든 항목이
OK
이어야하지만, Fail이 하나 있다.
"data.timezone
문제인 것 같으니 수정하러가자.
vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
파일에 들어간다.
; php_value{data.timezone] = { }
행 앞의 ;
를 제거해준다.
- 그 후에
systemctl restart rh-php72-php-fpm
를 이용해 php를 재시작해 준다.
- 패스워드에는 아까 변경한
ZabbiX12323!@#
가 들어갔다.
- 상세 내용으로는
- Database type : zabbix DB의 종류
- Database host : 0으로 지정하면 MySQL 기본 포트로 지정됨. 포트를 바꿔서 보안을 강화할 수 있을듯.
- Database name : zabbix DB 이름
- User : zabbix DB 접속 ID를 입력
- Password : zabbix DB 패스워드 입력
- Name 안에는 상단 탭에 보여질 이름이 들어가야한다.
Master
로 해줬다.
- Host : zabbix 서버의 IP
port : zabbix 서버의 사용 포트 입력
- Username과 Password는
Admin
과 zabbix
로 통일인 것 같다. 추후 바꿔주도록 하자.
한글설정
- 기본적으로 zabbix는 영어이다. 영어에 능란한 사람이라면 모를까, 나는 한글을 사랑하니, 한글로 설정해주자.
참고
- 왼쪽 아래의
User setting
을 눌러준다.
- 이러한 창을 볼 수 있다.
첫번째는 비밀번호 바꾸기, 두번째가 언어 사용 언어 설정이다.
계정
계정 그룹 관리
- 생성한 계정에 그룹을 지정해주고, 그룹에 따라서 접근 권한을 부여할 수 있다.
- 여러 유저 그룹이 나오는데, 그 중에 Guests를 선택해주자.
계정 관리
- 이번에는 유저로 들어간다.
오른쪽 상단에 유저 작성
을 볼 수 있다. 클릭!
- 로그인 이름과 그룹, 암호를 지정해서 유저를 생성해주자.
로그인 이름
란에 파란색으로 나오는 이름들을 선택해서 설정을 변경해 줄 수 있다.
- 암호 변경을 눌러 암호 변경이 가능하다.
로그인 이름
항목 앞의 체크박스를 누르면 하단 블록을 해제
삭제
가 활성화되는데, 이를 통해서 유저를 삭제할 수 있다.
에이전트-호스트 등록
전체 구성
Agent 설치
참고 동영상 - 윈도우에 에이전트 설치
agent-host 설정하기
Linux 서버 모니터링하기
리눅스에 Agent 설치
- Linux 서버 감시를 위해 Agent를 설치하자.
1. zabbix 레포 추가
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
2. agent 설치
# yum install zabbix-agent
3. 설정파일 수정
vi /etc/zabbix/zabbix_agentd.conf
로 conf 파일을 수정하자.
Server
ServerActive
의 경우, 127.0.0.1
과 zabbix server
의 IP를 넣어주면 된다.
- 호스트 작성할 때의 기입하는
호스트 명
과 같은 이름을 Hostname
에 넣어주자.
- 서버의 hostname 알아보는 법
4. zabbix agent 재시작 및 서비스 등록
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent
5. 호스트 등록
- 호스트명 : conf 파일에 설정해 준 Hostname과 같이 설정.
- 그룹 : Linux Servers. 리눅스 서버를 모니터링 할 것이기 때문.
- 호스트 등록이 된 것을 확인할 수 있다.
ZBX에 초록색 불이 들어오면, 모니터링이 성공적으로 되고 있다는 뜻이다.
모니터링 확인
모니터링 > 최근 데이터
에 들어간다. 호스트 그룹과 호스트에 원하는 그룹과 호스트를 넣어주면 데이터가 출력된다.
- 호스트에 직접 들어가서 확인해보자. 원하는 호스트를 왼클릭해주고 그래프로 들어간다.
윈도우 서버 모니터링 하기
윈도우에 Agent 설치
- 윈도우에 zabbix 에이전트를 설치하고 zabbix 서버에 windows 호스트를 추가해보자
- zabbix 서버에 맞춰 agent를 다운받자.
- HARDWARE : 대상 OS의 시스템 종류
- 시스템 종류가
64비트 운영체제, x64 기반 프로세서
라고 표시되면 컴퓨터가 AMD-64 기반. AMD-64 또는 32비트 버전의 프로그램을 사용할 수 있다.
- 이게 아니라면 i386, x32, x86 또는 32비트라는 용어로 참조되며 32비트 소프트웨어와만 호환됨.
- ENCRYPTION : 암호화 여부
agent vs agent2
agent vs agent2
정리
- 이런 것이 나온다. 뭐가 다른 것일까?
- zabbix agent 2 is capable of doing all agent 1 does + some more. It's not "daemonized" on *NIX because this job is propagated to systemd. The same with privileges, while agent 1 is capable of switching user that it is run as, agent 2 doesn't have this functionality and this is controlled by systemd instead.
- zabbix 에이전트 2는 에이전트 1이 수행하는 모든 작업과 그 이상을 수행할 수 있습니다. 이 작업이 systemd로 전파되기 때문에 *NIX에서 "데몬화"되지 않습니다. 권한과 동일하지만 에이전트 1은 실행되는 사용자를 전환할 수 있지만 에이전트 2는 이 기능이 없으며 대신 systemd에서 제어합니다.
- 공식 답변이라고 한다.
이번 실습에서는 그냥 agent를 사용해서 해보자.
1. 에이전트 다운받기
공식 메뉴얼
- 다운받은 압축파일은 C드라이브에 따로 폴더를 만들어서 옮겨준다.
- 압축을 풀어주자. 다음, 명령 프롬프트를 켜준다. 관리자로 켜줘야한다.
- C:\ 디렉토리로 가서 dir로 zabbix 디렉토리가 추가됐다는 것을 확인할 수 있다.
zabbix\bin\zabbix_agentd.exe -c c:\zabbix\conf\zabbix_agentd.conf -i
를 입력해주자.
zabbix_agentd.exe
를 우클릭하고 속성 > 호환성
으로 가 관리자 권한으로 이 프로그램을 실행
을 체크하면 권한 부여와 관련된 오류나 문제가 발생하지 않도록 할 수 있다.
2. 에이전트 실행
- 에이전트를 실행하는데에는 2가지 방법이 있다.
- 1) 명령 프롬프트 사용하기
- 2) 서비스로 이동해서 수동으로 실행하기
- 첫번째 방법
bin 폴더로 이동한다.
zabbix_agentd.exe -start
를 입력한다.
- 두번째 방법
실행창을 띄우고 serveces.msc
를 입력해서 서비스를 킨다.
- 아래쪽에 있는 Zabbix Agent를 찾아서 마우스 오른쪽 버튼을 누르고 시작을 눌러 실행시킨다.
3. 설정 파일 편집
c: > zabbix > conf
이동해서 zabbix_agentd.conf
파일을 수정해줘야한다. 수정파일 형식을 지원안하는 것처럼 열리지 않을수도 있는데, 그럴 때는 파일을 오른쪽 클릭하고 연결 프로그램
을 선택하면 연결할 수 있는 프로그램 형식들이 나온다.
역시 메모장이 제일 익숙하고 무난하니, 메모장으로 선택해준다.
- 먼저 찾기 창을 띄워서
server
를 검색해준다.
- Passive 방식을 사용할 때 필요한 IP 주소이다.
이곳의 IP 주소를 변경해주자.
127.0.0.1, {zabbix server IP}
- 다음은 활성 서버를 바꿔준다.
serveractive
로 검색해준다.
- 역시
127.0.0.1, {zabbix server IP}
로 바꿔주면 된다.
- 다음 검색어는
hostname
4. 방화벽 설정
- 방화벽에서 10050 포트를 열어줘야 데이터를 주고 받을 수 있다.
제어판 > 모든 제어판 항목 > Windows Defender 방화벽 > 고급설정 > 인바운드 규칙 > 새 규칙 > 포트허용 > 10050
- 새 규칙이 생성되었다. 방화벽을 Stop하면 보안이 너무 취약해지기 때문에 지양하도록 하자.
- 더 강한 보안을 원한다면
속성 > 영역 > 원격 IP 주소 > 다음 IP 주소 > 추가 > Zabbix Server IP > 적용 > 확인
- 이렇게 할수 있지만, 이렇게까지 하지는 않았다.
5. zabbix 서버에서 호스트 추가
설정 > 호스트
로 이동해준다.
오른쪽 위에 호스트 작성 클릭.
- 호스트 명은 아까
hostname
에 넣은 것을 똑같이 넣어준다.
그룹은 Templates/Operating systems
로 설정.
호스트를 추가하였습니다
- zabbix 서버를 띄운 PuTTY로 가서,
zabbix_server -R config_cache_reload
를 입력해준다.
5. 모니터링 확인하기
- 모니터링 탭으로 가서 호스트를 확인하자.
새로 추가된 윈도우 에이전트(정보화 본부 컴퓨터)
- 여러 옵션들을 확인할 수 있다. 그래프를 눌러보자.
conf 파일 항목
- EnableRemoteCommands : 명령어를 수행하게 할지 말지. 0으로 하면 쉘을 실행해서 기입한 명령어를 수행할 수 없다.
- AllowRoot : root로 실행을 시킬지 말지 결정. 대부분 1을 하지만, 보안에 좋지는 않다.
- zabbix 로그를 확인해보면 작동하는지 확인할 수 있다.
에이전트 로그 경로는 /var/log/zabbix/zabbix_agentd.log
서버 로그 경로는 /var/log/zabbix/zabbix_server.log
ps -eaf |grep zabbix
로 agent 모듈 실행을 확인할 수 있다.
Event 설정해서 외부에서 받아보기
E-mail
참고
1. gmail 연동하기
ssmtp
를 설치해야한다.
EPEL
레포지토리를 설치하고 ssmtp를 설치하자.
# yum install epel-release
# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install ssmtp
- ssmtp 구성 파일을 편집하여 Gmail 계정에 연결한다.
# vi /etc/ssmtp/ssmtp.conf
root=rlawogus70@gmail.com
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rlawogus70@gmail.com
AutoPass=~~~~~~~~
UseTLS=YES
- 잘 연동됐는지 확인해보기
echo "E-Mail using the command-line" | ssmtp virtualcoin.videos@gmail.com
- 실패했다
ssmtp: Authorization failed (535 5.7.8 https://support.google.com/mail/?p=BadCredentials n30-20020aa7985e000000b00563517deaa8sm4408390pfq.117 - gsmtp)
- https://accounts.google.com/DisplayUnlockCaptcha < 여기에서 해결 가능하다고 한다.
실패
보안 수준이 낮은 앱에서 액세스
자체를 이제 차단한다고 한다.
SMS
텔레그램
텔레그램 연동
텔레그램 연동2
텔레그램 연동3
텔레그램 연동4
0.초기설정
yum -y install epel-release
yum -y install python-pip git
pip3 install requests
pip3 install telegram
pip3 install python-telegram-bot
# yum install python-pip
# pip install --upgrade pip
# pip install requests
이 방법으로 request가 설치되지 않으면 아래의 방법을 사용하자.
# yum makecache
# yum -y install python-requests
1. telegram bot 생성 및 설정
참고
- zabbix_server.conf 파일에 alertscript 경로 설정
# vi /etc/zabbix/zabbix_server.conf
파일에 들어가서
AlertScriptsPath=/usr/lib/zabbix/alertscripts
를 넣어준다.
경로는 크게 상관 없다고 하며, 지정 후 서비스를 재시작해준다.
- telegram bot 설정
텔레그램을 켜서 botfather
을 대화 상대로 찾는다.
- 오른쪽 상단의 돋보기 버튼을 클릭해서 검색할 수 있다.
https://api.telegram.org/<bot + bot에게 받은 token >/getUpdates
https://api.telegram.org/<bot5400120960:AAHiH-hVFCuaiykLdN9juBcwZofjtz_Bc0A>/getUpdates
2. zabbix 유저 생성
3. zbxtg 스크립트 다운 및 설정
zbxtg 받기
- zbxtg 스크립트를 다운받아야한다.
- git clone을 이용해서 다운받자
git clone https://github.com/ableev/Zabbix-in-Telegram
- 다운받은 후 아까 alertscript 경로로 지정한
/usr/lib/zabbix/alertscripts
에 넣어준다.
# mv Zabbix-in-Telegram/* /usr/lib/zabbix/alertscripts
- 텔레그램 채팅 id를 확인할 파이썬 파일을 하나 만들어주자.
여기서는 bot
단어를 추가하지 않고, father 봇에게 받았던 코드를 그대로 사용해도 된다.
cd ~
vim chat.py
#!/usr/bin/env python
import telegram
import requests
my_token = '[father봇에게 받았던 코드]'
bot = telegram.Bot(token = my_token)
updates = bot.getUpdates()
for u in updates :print(u.message)
- 파이썬을 실행시켜 파일을 실행한다.
python3 chat.py
'chat': {'id': 5653387586,
가 필요하다.
- 이 방법 외에도 사용할 수 있는 방법이 Telegram에서
idbot
을 검색하고 결과에서 나온 IDBot을 선택한 후 하단 대화창 시작
버튼을 클릭하는 것이다.
- 바로 알 수 있다.
- id가 확인되었다면 사용할 파일을 만들어야하는데, 샘플 파일을 복사 후 권한을 설정해주자.
cp /usr/lib/zabbix/alertscripts/zbxtg_settings.example.py /usr/lib/zabbix/alertscripts/zbxtg_settings.py
chown -R root.zabbix /usr/lib/zabbix/alertscripts
usermod -a -G zabbix zabbix
- 복사된 모습
복사된 파일 zbxtg_settings.py
로 이동한 후 수정하자.
# vi /usr/lib/zabbix/alertscripts/zbxtg_settings.py
tg_key = "[father봇에게 받은 코드]" # telegram bot api key
zbx_server = "http://[자빅스 서버 IP]/zabbix/" # zabbix server full url
zbx_api_user = "zabbix"
zbx_api_pass = "zabbix"
zbx_basic_auth_user = "[bot 이름]" # 아까 생성했던 봇 이름
zbx_basic_auth_pass = "[사용할 패스워드]"
zbx_tg_daemon_enabled_ids = ["[아까 확인한 chat id]", ]
zbx_tg_daemon_enabled_users = ["bot 이름", ] # 아까 생성했던 봇 사용자명
zbx_db_host = "localhost"
zbx_db_database = "zabbix"
zbx_db_user = "zabbix"
zbx_db_password = "[자빅스 설치 시 생성한 자빅스 계정 패스워드]"
- 마지막으로
/var/tmp/zbxtg/uids.txt
파일을 설정해주어야 한다고 한다.
mkdir /var/tmp/zbxtg
chown -R zabbix.zabbix /var/tmp/zbxtg
vi /var/tmp/zbxtg/uids.txt
# [봇 이름];private;[chat id]
4. bot 작동 확인
- 설정이 완료됐으면 bot이 제대로 작동하는지 확인하자.
/etc/zabbix/bin/zbxtg.py "{username}" "hello" "how are you?"
/etc/zabbix/bin/zbxtg.py "jaestury" "hello" "how are you?"
zbxtg.py: User 'jaestury' needs to send some text bot in private
라는 에러가 출력된다.
- telegram을 열고 아까 봇으로 만들었던 telegram bot으로 간다.
- 나에게 쪽지가 전송되는 것을 확인할 수 있다. 성공이다!
- zabbix와 연동하자.
5. zabbix, telegram 연동하기
- media type 생성
어떤 매체로 알람을 받을지 선택할 수 있다.
Email, SMS, script등 다양하게 선택이 가능하다.
관리 > 미디어 타입
탭으로 가서 생성해주자.
연락 방법 작성
클릭!
- 다음과 같이 설정해주었다.
SENDTO
는 datagram 데이터를 전송하는 함수라고 한다.
다음은 추가 클릭.
- action 생성
- 따로 사용자를 만들어서 사용해도되고, Admin 계정을 사용해도 된다.
별도로 사용자 계정을 사용할 때는 최소 Only-Read 권한이 있어야한다.
설정 > 액션
탭에 들어가서 액션을 설정할 수 있다. 액션 작성을 눌러주자.
- 별도 조건식이 필요하다면 Conditions에 추가하면 된다. 이번에는 이름만 작성하고 넘어가자.
Send to user
에 Admin
을 추가한다.
Send only to
에서 아까 만들었던 Media types
이름을 선택한 후 Custom Message
를 체크하면 칸이 늘어난다.
- Subject는 알림 제목이고, 아래는 알람의 메시지이다.
{{{TRIGGER.SEVERITY}}} [TEST ZABBIX] 문제 발생
호스트: {HOST.NAME} ({HOST.IP})
심각도: {TRIGGER.SEVERITY}
알람 명: {TRIGGER.NAME}
발생 시기: {EVENT.DATE} , {EVENT.TIME}
Event ID: {EVENT.ID}
설명: {TRIGGER.DESCRIPTION}
Last value: {ITEM.LASTVALUE1} ({TIME})
zbxtg;graphs
zbxtg;graphs_period=10800
zbxtg;graphs_width=900
zbxtg;graphs_height=300
zbxtg;itemid:{ITEM.ID1}
zbxtg;title:{HOST.HOST} - {TRIGGER.NAME}
- 개인적인 바리에이션을 가미하면 더 좋을 것 같다.
Last value
밑에 있는 코드는 그래프를 가져오기 위한 내용이라고 한다.
- 다 설정했다면 Add을 눌러 추가한다.
- 다음은
Recovery operations
에서 Add 클릭.
여기는 정상화 알람 설정이다.
- 아까와 똑같이 설정한다.
- Subject와 Message는 아래 내용을 참고한다.
정상화 알람이니까 내용은 바꿔주자!
{{OK}} [DEV ZABBIX] 문제 해결(복구)
호스트: {HOST.NAME} ({HOST.IP})
심각도: {TRIGGER.SEVERITY}
알람 명: {TRIGGER.NAME}
복구 시기 : {EVENT.RECOVERY.DATE}, {EVENT.RECOVERY.TIME}
Event ID: {EVENT.ID}
Last value: {ITEM.LASTVALUE1} ({TIME})
zbxtg;graphs
zbxtg;graphs_period=10800
zbxtg;graphs_width=900
zbxtg;graphs_height=300
zbxtg;itemid:{ITEM.ID1}
zbxtg;title:{HOST.HOST} - {TRIGGER.NAME}
- 이후 Add 클릭해서 Action을 추가해준다.
- 다음은 관리 > Users를 클릭한 후 Admin 계정을 클릭한다.
Type
과 Send to
를 설정해준다.
bot 이름을 넣어주자.
- Add를 눌러 추가해주고, Update를 눌러줘야한다.
6. 텔레그램 알람 확인
# python3 /usr/lib/zabbix/alertscripts/zbxtg.py "@[봇 이름]" "제목" "내용"
트리거 사용해보기
- Token에는 bot에서 발급된 HTTP API 토큰을 넣어준다.
- ParseMode에는 3가지 중 하나를 선택할 수 있다.
- Markdow2, HTML, MarkdownV2
- 갱신을 눌러준다.
- test를 눌러서 테스트 해볼수 있다.
Message
: 본문 내용으로 임의 입력 할 수 있다.
Subject
: 본문 제목으로 임의 입력할 수 있다.
To
: chat ID를 넣어준다.
- 성공 메시지가 출력되고, 텔레그램에도 메시지가 전송된다.
- 관리 > 유저 > Admin 탭에 들어간다.
연락방법 > 추가 눌러준 후 종류를 Telegram으로 바꿔주고 수신처를 이전에 발급받은 chat ID로 설정. 추가를 눌러준다. 갱신을 눌러야 반영이 된다.
- 트리거 액션에서도 활성 및 Telegram 전달 설정을 해줘야한다.
- 설정 > 액션 탭에 들어간 후,
Report problems to Zabbix administrators
가 비활성 된 것을 클릭해 활성으로 전환해준다.
Report problems to Zabbix administrators
클릭
- 오퍼레이션 탭으로 이동한 후 편집 클릭
미디어를 Telegram으로 바꿔주고 갱신을 눌러준다.
Telegram 추가된 것을 확인한 후 갱신.
- 이후 에이전트 서버를 꺼서 알람이 오는지 확인하자.. 제발
안온다.. 아직 실력이 부족한가보다..
미래의 나는 할 수 있겠지..?