Infra

속전속결! 모니터링 시스템 구축하기 (Zabbix 설치 및 설정)

sediary 2022. 5. 24. 11:14

안녕하세요. TG360 Technologies SE(System engineer) 담당자입니다.

 

SE는 사전적으로 "서버나 하드웨어를 관리 및 유지를 담당하는 사람을 시스템 엔지니어"라고 흔히들 지칭합니다.

인프라스트럭쳐가 거대해짐에 따라 서버나 하드웨어를 관리하는데 있어서도 효율적인 시스템이 필요합니다.

저희 TG360은 최초에 사내 모니터링 시스템이 없고 타사 모니터링 시스템에 의존하여 서버를 관리하고 있었습니다.

실제 운영을 해보니 여러 문제점들이 보여서 자체 모니터링 시스템을 구축하고자 하였습니다.

 

기존의 문제점

  • 신규 서버 모니터링 등록이 필요한 경우 타사에 요청이 필요하기 때문에 등록 시간이 필요
  • 기존 타사에서 제공하는 모니터링 템플릿만 적용가능
  • 하나의 알람 채널로만 알람 수신 가능

일부 협업을 통한 개선이 가능하지만 자체적으로 운영할때보다 많은 품의와 검토가 필요한 상태였습니다.

자체 모니터링 시스템을 구축하기로 결심 했다면 이제 어떤 모니터링 플랫폼으로 구축할지 검토가 필요합니다.

 

모니터링 시스템 구축 고려 사항

  1. 가장 먼저 고려할 내용은 비용일 것입니다.
    시스템 기본적인것 부터 시작하여 추후 필요에 따라 점진적으로 수집대상을 확대할 예정으로 정확한 비용산출이 어려워 무료인 오픈소스 소프트웨어로 구축하기로 하였습니다.
  2. “빠른 기간내에 타사 모니터링 대체할 수 있는가!”
    만약 모든 시스템 지표에 대한 값을(수집 주기, 수집 데이터) 직접 지정해주어야 한다면 구축이 완료될때 까지 많은 시간이 필요할 것입니다. 모니터링 시스템내에서 제공하는 기본 템플릿이 있다면 빠르게 구축 할 수 있습니다.
  3. “모니터링 시스템의 한계를 알기!”
    Timestamp 기반의 값만 수집이 가능한지, Log와 같은 Text 기반의 값도 수집이 가능한지 검토가 필요합니다.
  4. “강력한 WebUI!“
    예를 들어 고전적인 모니터링 솔루션인 MRTG는 snmp값을 수집하여 PNG파일로 만들어 사용자에게 Traffic UI를 제공합니다.
    이미지 형태로 제공하다보니 “3일전 하루동안의 트래픽 확인“ 이라는 미션이 제공된다면 별로도 WebUI를 만들어야 합니다.
  5. “다양한 어플리케이션 모니터링!”
    사내에서 사용하고 있는 Hadoop, Elasticsearch와 같은 어플리케이션도 모니터링할 수 있다면 문제가 생겼을때 더 빠르게 파악할 수 있을 것 입니다.

요구사항을 정리해보자면 “무료!, 빠른구축!, 다양한 데이터 수집!, 사용자 친화적인 WebUI!“ 이렇게 정리할 수 있겠습니다.

 

ELK-Stack, Prometheus 등과 같이 많은 모니터링 시스템이 있으나, 빠르게 구축하기 위해 기존에 경험이 있는 Zabbix를 채택하였습니다.(추후, 여러 모니터링 솔루션을 도입하여 하나의 대시보드에서 모니터링 하는 것이 저의 목표라고 할 수 있겠습니다.)

 

 

빠르게 설치부터 진행해보자!!

Zabbix 설치 방법은 꽤 간단하므로 공식 설치 문서 링크를 첨부하겠습니다. 
지원가능한 OS를 선택하셔서 매뉴얼대로 진행해주신다면 설치는 어렵지 않을 것입니다.
Database는 Mysql, PostgreSQL을 지원하며, Web Server는 Apache, Nginx를 지원하고 있습니다.
저희는 Mysql에 Apache를 사용하여 구축하였습니다.(현재 Zabbix는 6.0 버전까지 출시가 되었으나, 기존 구축된 환경을 설명하기 위해 5.0LTS 버전을 토대로 문서가 작성 되었습니다.)

 

https://www.zabbix.com/download

 

Download and install Zabbix

 

www.zabbix.com

 

  • Zabbix 관련 Repository 및 패키지 설치
#Install Zabbix repository
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all

#Install Zabbix server and agent
yum install zabbix-server-mysql zabbix-agent2

#Install Zabbix frontend
yum install centos-release-scl
  • Zabbix Repository 수정
# Edit file /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository.
[zabbix-frontend]
...
enabled=1
...
  • Zabbix Frontend 패키지 설치
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
  • Mariadb 또는 Mysql 설치 & 실행
yum install mariadb-server
systemctl start mariadb
  • mysql_secure_installation
mysql_secure_installation
#Set root password? [Y/n] y
#New password:{패스워드 입력}
#Re-enter new password:{패스워드 입력}
#Password updated successfully!
#Remove anonymous users? [Y/n] y
# ... Success!
# Disallow root login remotely? [Y/n] y
# ... Success!
# Remove test database and access to it? [Y/n] y
# - Dropping test database...
# ... Success!
# - Removing privileges on test database...
# ... Success!
# Reload privilege tables now? [Y/n] y
# ... Success!

#Cleaning up...
  • Mysql Zabbix User 생성 및 설정
# mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by '{사용자 비밀번호}';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
  • 스키마 및 데이터 임포트
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
  • Zabbix Server DB 정보 설정
#vi /etc/zabbix/zabbix-server.conf
DBPassword={패스워드입력}
  • Zabbix Time Zone 설정
 vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
 php_value[date.timezone] = Asia/Seoul
  • Zabbix 관련 데몬 활성화 및 시작
systemctl restart zabbix-server zabbix-agent2 httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent2 httpd rh-php72-php-fpm

 

  • Zabbix Frontend Web 페이지 접속
http://{Server_URL}/zabbix
# 만약 접속이 불가한 경우 firewalld 또는 Selinux를 점검해보시길 바랍니다.

 

  • 결과 화면

위와 같은 화면이 출력된다면 설정은 완료되었습니다. 나머지 세부적인 작업은 대부분 Web 페이지 내에서 진행될 예정입니다.

 

  • Zabbix Frontend, DB 연결
    사전에 설정한 Database port와 비밀번호를 입력해 주시면 됩니다.
    기존에 설치되어 있는 DB에 연결할 경우 설정을 다시한번 확인해 주시길 바랍니다.
    이후 설정은 개인 설정이므로 넘어가도록 하겠습니다.

 

  • Web 로그인 접속정보
    최초 로그인 접속정보는 ID : Admin , Passwd : zabbix 입니다.

 

 

어떻게 잘 사용할 수 있을까?

설정을 진행하기전 몇가지 용어에 대해 간단히 정의하고 넘어가겠습니다.
  1. zabbix-agent2 : Zabbix는 Server Agent 개념으로 여러 서버의 데이터를 수집하는 Zabbix-server가 있고 데이터를 보내는 Agent Client가 있습니다.
  2. Template : Zabbix Frontend Web 페이지에는 기본적인 데이터를 수집할 수 있는 템플릿 양식이 있습니다.

설치가 완료되었다면 모니터링하고자 하는 서버를 등록해주시면됩니다.
Zabbix Agent2에서 설치 및 설정 후 Zabbix Frontend WEB에서 해당 Agent 서버를 등록해주면 됩니다.

 

  • Zabbix Agent2 설정
#zabbix-agent2 설치
yum install zabbix-agent2

#zabbix-agent2 설정
vi /etc/zabbix/zabbix-agent2.conf
#Server=127.0.0.1 를 Server={현재 설치한 Zabbix Server IP}로 변경

#zabbix-agent 재시작
systemctl start zabbix-agent2

 

  • Zabbix Frontend Web 설정
    Configuration -> Create Host (IP, Group, Interface 입력)-> Templates (Template OS Linux by Zabbix agent 선택)

이렇게 1대의 서버에 대한 등록과 모니터링 항목 추가 설정을 완료하였습니다. 꽤 빠른 시간내에 모니터링 시스템을 구축하고 데이터 수집을 시작하게 되었습니다. 기존에 잘 만들어진 템플릿을 사용하므로써 어떤걸 수집해야하는지 고민도 줄일 수 있고, 직접 작성해야하는 수고로움을 덜 수 있었습니다. " Template OS Linux by Zabbix agent" 템플릿을 사용하면 Memory, Traffic, CPU 등 기본적으로 SE 가 모니터링해야되는 데이터는 모두 확인할 수 있습니다. 이것 때문에 제가 제일 먼저 Zabbix를 구축한 이유이기도 합니다.

 

 

관리하는 모든 호스트를 등록해보자!!

모니터링 시스템을 구성하고자 하시는분들께서는 적어도 모니터링해야할 서버의 갯수가 10대 이상은 될것이라고 가정하겠습니다.

딱히 1~2대라면 이런 설정이 필요 없을 수도 있겠습니다만, 100대를 기준으로 모든 서버들 Zabbix Server에 등록하고자 한다면 위 설명드린 작업을 100번만 진행해주시면됩니다(단순반복 싫어요!!).

이런 반복작업을 최소화 하기위해 Zabbix Server에는 Auto Registration 이라는 기능이 있습니다.

사전에 지정한 metadata를 통해 Zabbix-agent2가 기동되면서 자동으로 Zabbix Server에 등록할 수 있습니다.

 

  •  Auto Registration  설정
    Configuration -> Actions -> Autoregistration actions -> Create action

위와 같이 Host metadata에 "test"라는 문자열이 포함되어 있다면 Operations에 설정한 명령들을 수행하게됩니다.

저는 호스트를 등록하고, Linux 관련 모니터링 Template을 등록하도록 지정하였습니다.

  • Zabbix-agent2 서버 설정
vi /etc/zabbix/zabbix_agent2.conf
HostMetadata=test
systemctl restart zabbix-agent2

HostMetadata 값을 설정 후 zabbix-agent2를 재시작해주면 자동으로 서버와 모니터링할 항목들이 등록됩니다. Metadata 값과 Operation을 잘 이용한다면 빠르고 정확하게 모니터링을 시작할 수 있습니다.

 

 

이 부분은 알고 가자!!

모니터링 시스템을 구축하고 Zabbix Agent를 대량으로 등록하게되면 데이터가 유실되거나 지연되는 현상이 발생하실 수 있습니다.

이를 확인하는 지표는 nvps(Required server performance, new values per second)라는 값입니다.

아마 기본으로 설정된 대시보드에서 확인하실 수 있습니다.

제가 임의로 구축한 시스템에서는 1.53이라는 수치를 보이고 있습니다. 이는 초당 Zabbix Server로 들어오는 데이터의 개수라고 생각하시면 됩니다.

Zabbix는 Template 내에 Item이라는 항목으로 데이터를 수집하고 있습니다. 이 Item내에는 어떤 주기로 데이터를 수집할지 결정하는 Interval이라는 값이 있습니다. 만약 수집 주기(Interval)을 1s로 설정하였다면 nvps는 1이 되게 됩니다.

이런 item이 100개가 된다면 nvps는 100이 됩니다. 이 값이 높으면 높을 수록 DB에 기록해야될 데이터가 많아지기 때문에 성능이 떨어지게 됩니다.

해결 방법으로는 좀 더 빠른 디스크, Raid 구성, Zabbix-proxy를 통한 중간 버퍼, Interval 시간 조정 등이 있겠습니다. 다양한 해결책이 있으므로 현재 운영하고 있는 시스템 상태에 맞추어서 사용하시길 권장드립니다.

기본 Template으로 제공되는 Item의 수집주기는 제 기준에 꽤 잦은 편이여서 변경을 추천드립니다.

 

 

이 글을 마치며!!

시스템 모니터링 방법에 대해 소개를 해보았습니다.

물론 더 많은 기능을 가지고 있으나 최소 기본적인 항목은 모니터링 할 수 있는 환경을 만들자는 취지로 이글을 작성해보았습니다.

처음에는 컨셉은 기존에 수집하고 있던 항목을 동일하게 자체적인 운영을 하는 것으로 목표하였으나, 점점 더 많은 시스템항목을 수집하고 있습니다.

다음 포스팅에서는 Zabbix에서 지원하지 않는 데이터 항목 수집, Grafana를 통한 좀더 강력한 Web 대시보드, API 사용방법 등 세부적인 설정방법에 대해 이야기해보는 시간을 가질 수 있도록 해보겠습니다.