CentOS 7 + Zabbix 4 + Grafana 5 구축하기

상용 모니터링 솔루션을 도입해서 한두달 운영하던 중 부족한 기능에 대해 커스터마이징을 요구 했더니 의지가 없는건지 불가능한건지..추가비용 이야기만 하는 통에 반품하고 오픈소스를 찾아보다 Zabbix 가 적당할 것으로 판단하고 구축을 진행했습니다. (도대체 내가 왜 이걸 하고 있나..자괴감이..)

대부분의 오픈소스 솔루션들이 그렇듯이 구축은 비교적 쉬우나 입맛에 맞게 커스터마이징하는 부분에서 역시 시간과 노력을 필요로 합니다.

모니터링 솔루션 요구사항

  • 다양한 서버 OS 및 HW 자원을 모니터링 해야함 (Windows, Linux, Solaris, HP-UX)
  • 다수의 웹사이트를 모니터링 해야함 (장애여부, 응답속도)
  • (옵션) 네트워크 트래픽을 모니터링 해야함
  • 장애 발생시 다양한 방법으로 알림을 제공해야함 (문자메시지, 이메일, 소리 등)

위 요구사항 중 네트워크 트래픽은 이미 Cacti 로 모니터링을 하고 있었고 Zabbix 로 통합한다면 기존의 Cacti 데이터는 모두 날리고 네트워크 트래픽을 새로 수집해야하는 부분이 문제…결정적으로 Cacti 가 워낙 훌륭한 솔루션이라 Zabbix 로 굳이 (복잡하게) 통합할 필요는 없다고 판단했습니다.

결과적으로 네트워크 장비와 트래픽 모니터링은 Cacti 로 계속하고 그 외 서버와 스토리지, 웹 어플리케이션만 모니터링 하기로 하고 Zabbix 구축을 진행했습니다.

설치 순서

  1. CentOS 7 x64 설치 : Minimal 설치된 상태에서 필요한 패키지는 개별 설치
  2. MariaDB 5.5 설치 : CentOS 7 에 포함된 기본 패키지로 설치
  3. Zabbix 4.0 LTS 설치 : Zabbix Repo. 등록 후 최신버전 설치
  4. Grafana 5 설치 : Grafana Repo. 등록 후 최신버전 설치
  5. SMS 및 Telegram API 연동 : 이메일 외 SMS 와 Telegram 메시지로 알림 설정

CentOS 7 x64 설치

  • Minimal 설치 후 yum update 하여 최신 버전으로 업데이트 수행
  • wget, telnet, vim 등 필요 패키지 yum 설치
  • selinux 비활성화 하거나 80, 3306, 3000, 10050, 10051 포트 서비스 등록

MariaDB 5.5 설치

  • yum install -y mariadb-server
  • 설치 후 /etc/my.cnf 설정 최적화 (언어셋 설정 UTF8, InnoDB설정 등)
# yum install -y mariadb-server

# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

# vi /etc/my.cnf (아래 내용을 적절히 병합)

[mysqld]

init_connect=”SET collation_connection = utf8_general_ci”   init_connect=”SET NAMES utf8″   character-set-server = utf8 collation-server = utf8_general_ci

[client]

port=3306 default-character-set = utf8

[mysqldump]

default-character-set = utf8

[mysql]

default-character-set = utf8 # systemctl enable mariadb # systemctl start mariadb # mysqladmin -uroot password ‘비밀번호’ (비밀번호 설정)

  • MariaDB에 Zabbix DB 스크립트 실행
# mysql -uroot -p

mysql> create database zabbix character set utf8 collate utf8_bin; (Zabbix DB 생성)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '비밀번호';  (Zabbix 계정 생성)

mysql> flush privileges;

Zabbix 4.0 LTS 설치Zabbix 공식 설치 가이드 참조

  • Zabbix Repository 등록
# wget https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# rpm -ivh zabbix-release-4.0-1.el7.noarch.rpm
  • Zabbix 패키지 설치
# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent (패키지 의존성에 의해 httpd, php 도 함께 설치됨)
  • Zabbix DB SQL 실행
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
  • Zabbix 서버 설정
# vi /etc/zabbix/zabbix_server.conf

DBPassword=password
  • Apache 웹서버 설정
# vi /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Seoul
  • 데몬 자동시작 설정
# systemctl enable zabbix-server zabbix-agent httpd
# systemctl start zabbix-server zabbix-agent httpd

추가로 Apache 설정에서 보안서버 SSL 인증서 추가하였고 http 접근과 루트 접근시 https://domain/zabbix 로 Redirect 설정하였습니다. 이제 Zabbix 까지 모두 설치 완료되었으니 Zabbix WebUI 로 접속하여 아래의 공식 Zabbix 설치 문서를 참고하여 환경 설정을 진행합니다.

http://IP or Domain/zabbix 로 접속 – Zabbix Frontend Installation Wizard 

Zabbix Agent 배포

Zabbix 설치까지 모두 마무리 되어 서버 모니터링을 위한 기본 환경은 모두 완료되었습니다. 이후로는 모든 서버에 Zabbix-Agent 를 설치해야 하며 Agent 는 Zabbix 홈페이지에 이미 컴파일된 버전이 있으므로 이를 다운로드하여 배포하시면 됩니다. Zabbix Download – Precompiled Agent 그러나, 4.0 버전 Agent 에 아직까진 빠지거나 지원하지 않는 OS가 있으므로 4.0 Agent가 없다면 3.x 이나 2.x 버전의 Agent를 이용해도 무방합니다. 실제 Agent 를 배포하다보니 HP-UX 와 일부 Linux 의 경우 컴파일된 Agent 가 동작하지 않아 직접 소스 컴파일한 경우도 있었으며 수백대 서버에 Agent 를 배포하던 중 4.0 과 3.x 버전이 안되서 결국 2.2 버전까지 내려가니 잘 동작하는 경우도 있었습니다.

Agent 배포 및 설정 시 추후 서버 IP 변경을 고려하여 IP 보다는 도메인으로 설정하시기 바라며 방화벽 등을 거쳐가는 경우 Agent 는 10050 포트, Server는 10051 포트를 Listen 하고 있으므로 이를 고려하여 양방향 정책을 추가해야 합니다.

Grafana 5 설치

# vi /etc/yum.repo.d/grafana.repo

[grafana]

name=grafana baseurl=https://packagecloud.io/grafana/stable/el/7/$basearch repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt

  • Grafana 설치
# yum install grafana

# systemctl daemon-reload
# systemctl enable grafana-server
# systemctl start grafana-server
  • Zabbix Plug-in 설치
# grafana-cli plugins install alexanderzobnin-zabbix-app
  • (옵션) Server-side Image Rendering 필요시 설치
# yum install fontconfig freetype* urw-fonts

이제 Grafana 까지 설치가 완료되었고 Zabbix 와 연동을 위한 Plug-in 도 설치가 되었습니다. Grafana 는 패키지 설치 후 까다로운 설정 없이도 잘 동작하므로 데몬 시작 후 웹브라우저로 Grafana WebUI에 접속하여 Zabbix 와 연동을 진행하시면 됩니다. Grafana : http://IP or Domain:3000/ Grafana 에는 웹서버가 내장되어 있고 기본 포트는 3000 번입니다. 이 기본 포트를 바꾸려면 여기를 참고하시면 됩니다.  

SMS 연동 (웹 호출 방식의 KT, 뿌리오, EMMA 등)

대부분의 휴대폰 SMS 문자 발송 서비스업체에는 문자 발송을 위한 API 가 있어 손쉽게 연동이 가능합니다. 제 환경은 서비스 업체 측의 API 를 이용하는 방식이 아닌 SMS Agent 방식으로 Agent가 내부의 DB를 모니터링하면서 새롭게 추가된 행이 있는 경우 즉시 SMS 발송을 하는 방식이므로 Zabbix 의 알림을 받기 위해서는 DB 테이블에 쿼리 데이터 한줄만 넣어주면 되는 상황입니다. Zabbix 에서 이벤트 발생시 호출되는 알람을 직접 쉘 스크립트로 작성하여 “수신자번호”, “장애내용” 을 변수로 담아 스크립트를 호출해주도록 했습니다. 작성된 쉘 스크립트의 내용은 아래의 예처럼 단순히 wget 이나 curl 명령으로 URL 주소를 호출해주는 방식입니다.

smsto = $1
smstext = $2
wget http://sms.send.com/sms_alert.php?smsto=$1\&smstext=$2

해당 스크립트를 Zabbix 서버에 생성하고 실제 호출되는 sms_alert.php 페이지는 아무 웹서버에나 넣어두고 해당 웹페이지에서는 DB 로 발송 요청을 insert 하면 됩니다.  

Telegram 연동

모니터링 대상 장비가 많다보니 SMS 문자 발송으로는 비용도 만만치 않고 무엇보다 80자 제한에 걸려 정확한 장애 내용을 보여주기 힘들기 때문에 Telegram 연동을 진행했습니다. Zabbix 에서 이벤트 발생시 스크립트를 실행할 수 있기 때문에 쉘 스크립트나 파이썬 등으로 API를 제공하는 다양한 메시징을 이용할 수 있을 것 같습니다. 구글링해보니 Zabbix 에서는 Telegram 과 Line 메신저 연동을 가장 많이 쓰는 것 같아서 제 휴대폰에 설치된 Telegram과 연동을 진행했습니다. Zabbix 와 Telegram 연동 순서는 다음과 같습니다.

  1. 메시지를 보내줄 텔레그램 봇(Telegram Bot) 생성 – Telegram Bot 생성 방법(구글검색)
  2. Telegram 연동을 위해 Python3 및 모듈 설치 (CentOS 7에 기본 설치된 Python 2 는 스크립트 실행시 에러 발생)
  3. 메시지를 발송해줄 Python 스크립트 설정 – Zabbix in Telegram 스크립트 다운로드
  4. Zabbix 알람 등록 및 설정

You may also like...