아이티센 조사 과제 - zabbix

김재현·2022년 10월 13일
0

아이티센 프로젝트

목록 보기
27/30

zabbix란?

zabbix 참고1
참고2
참고3
zabbix 공식

  • 서버, 네트워크 업무를 하는 사람에게 굉장히 유용한 시스템.
  • 모니터링 시스템을 구축해서 장애가 생겼을 때 빠르게 대응할 수 있게 해준다.

개요

  • 엔터프라이즈에 대응한 모니터링 솔루션. 오픈 소스로 배포된다.
  • 다수의 네트워크 매개 변수 및 서버의 상태와 무결성을 모니터링하는 소프트웨어
  • 유연한 알람 메커니즘을 갖추고 있어 사용자는 모든 이벤트에 통지를 하도록 설정할 수 있음.
    이러한 기능을 통해 서버의 장애에 신속히 대응할 수 있다.
  • 저장된 데이터를 바탕으로 보고서 및 데이터의 그래픽 표시 기능을 제공
  • 폴링, 트래핑을 모두 지원.
    모든 보고서, 통계 및 구성 매개 변수는 웹 인터페이스를 통해 액세스할 수 있으며, 웹 인터페이스는어떤 장소에서도 액세스할 네트워크나 서버의 상태를 확인할 수 있다.

동작 방식

  • Active or Passive
  1. Active (Agent → Server)
    Zabbix Agent 설정 파일에 serverActive의 IP 지정. 해당 IP를 참조하여 데이터를 전송한다.
    Active는 활성이라는 뜻으로, 주기적으로 결과를 전송한다.
  2. 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 설치

  • 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

  • 이후 데이터베이스의 테이블을 확인해 정상적으로 적용됐는지 확인하자.

  • 166 줄의 데이터가 출력된다.

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를 재시작해 준다.

  • 제대로 OK가 출력된다.

  • 패스워드에는 아까 변경한 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는 Adminzabbix로 통일인 것 같다. 추후 바꿔주도록 하자.

  • 설치 완료 모습. 대쉬보드가 보인다.

한글설정

  • 기본적으로 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.1zabbix server의 IP를 넣어주면 된다.

  • 이 세 곳을 설정해주자.

  • 호스트 작성할 때의 기입하는 호스트 명과 같은 이름을 Hostname에 넣어주자.
  • 서버의 hostname 알아보는 법
    • hostname 입력.

  • IP 알아보는 법.
    • ifconfig 입력.

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

  • 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
  • pip 설치 및 업그레이드
# yum install python-pip
# pip install --upgrade pip
# pip install requests

이 방법으로 request가 설치되지 않으면 아래의 방법을 사용하자.

  • 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?"
  • username 설정하기


zbxtg.py: User 'jaestury' needs to send some text bot in private 라는 에러가 출력된다.

  • telegram을 열고 아까 봇으로 만들었던 telegram bot으로 간다.

  • 나에게 쪽지가 전송되는 것을 확인할 수 있다. 성공이다!
  • zabbix와 연동하자.

5. zabbix, telegram 연동하기

  1. media type 생성
    어떤 매체로 알람을 받을지 선택할 수 있다.
    Email, SMS, script등 다양하게 선택이 가능하다.

  • 관리 > 미디어 타입 탭으로 가서 생성해주자.
    연락 방법 작성 클릭!

  • 다음과 같이 설정해주었다.
    SENDTO는 datagram 데이터를 전송하는 함수라고 한다.
    다음은 추가 클릭.
  1. action 생성
  • 따로 사용자를 만들어서 사용해도되고, Admin 계정을 사용해도 된다.
    별도로 사용자 계정을 사용할 때는 최소 Only-Read 권한이 있어야한다.

  • 설정 > 액션 탭에 들어가서 액션을 설정할 수 있다. 액션 작성을 눌러주자.
  • 별도 조건식이 필요하다면 Conditions에 추가하면 된다. 이번에는 이름만 작성하고 넘어가자.

  • 오퍼레이션 클릭.

  • Send to userAdmin을 추가한다.
    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 계정을 클릭한다.

  • Media > Add 순으로 클릭.

  • TypeSend to를 설정해준다.
    bot 이름을 넣어주자.
  • Add를 눌러 추가해주고, Update를 눌러줘야한다.

6. 텔레그램 알람 확인

  • zabbix 서버로 돌아가서 테스트해보자.
# 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 추가된 것을 확인한 후 갱신.
  • 이후 에이전트 서버를 꺼서 알람이 오는지 확인하자.. 제발
    안온다.. 아직 실력이 부족한가보다..
    미래의 나는 할 수 있겠지..?

0개의 댓글