[Monitoring] zabbix 1편: zabbix server 설치하기

엔터프라이즈급 오픈소스 모니터링 솔루션인 zabbix를 설치하고 초기 설정 하는 방법을 알아보겠습니다.

서버 대수가 늘어날수록 서비스 상태를 일일이 확인하는 것은 불가능에 가깝습니다. zabbix를 이용하면 서버의 CPU, 메모리, 트레픽 상태는 물론 장애 발생 시 실시간 알림까지 받을 수 있는 스마트한 환경을 구축할 수 있습니다.

zabbix 란 무엇인가요?

zabbix는 네트워크 서비스, 서버, 하드웨어 등 다양한 IT리소스를 실시간으로 감시하는 통합 모니터링 도구입니다.

  • 높은 확장성 : 수만 대의 서버도 한곳에서 효율적으로 관리할 수 있습니다.
  • 시각화 도구 : 수집된 데이터를 그래프나 맵(Map)형태로 대시보드를 구성할 수 있습니다.
  • 다양한 알림 : 장애 발생 시 이메일, 슬랙(Slack), SMS 등 다양한 경로로 알림을 보냅니다.

설치 전 준비 사항(Nginx, PHP, MariaDB stack)

zabbix 는 데이터를 저장할 DB와 웹 화면을 보여줄 웹서버가 필요합니다. 본 가이드는 Rocky Linux 9환경에서 MariaDBnginx조합을 기준으로 설명합니다.

  1. nginx 설치
$ cat <<EOF >/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

$ dnf install nginx -y
  1. php 설치
$ dnf config-manager --set-enabled crb

$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

$ dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

$ dnf module switch-to php:remi-8.3

$ dnf module install php:remi-8.3

$ dnf install php-gd -y
  1. MariaDB 설치
$ wget https://r.mariadb.com/downloads/mariadb_repo_setup
$ echo "ad125f01bada12a1ba2f9986a21c59d2cccbe8d584e7f55079ecbeb7f43a4da4 mariadb_repo_setup" \
    | sha256sum -c -
$ chmod +x mariadb_repo_setup
$ ./mariadb_repo_setup \
   --mariadb-server-version="mariadb-10.11"
   
$ dnf install MariaDB-server MariaDB-client MariaDB-backup -y

Zabbix 서버 설치

zabbix 서버는 현재 7.0 버전이 LTS 버전이라 7.0 기반으로 설치를 진행합니다.

레포지토리 등록

$ rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
$ dnf clean all

zabbix 서버, frontend, agnet 설치

$ dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2

설치 시 다음과 같은 오류가 발생한다면

GPG key at file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-08EFA7DD (0x08EFA7DD) is already installed
The GPG keys listed for the "Zabbix Official Repository non-supported - x86_64" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.. Failing package is: fping-5.1-1.el8.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-08EFA7DD
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: GPG check FAILED

아래와 같이 처리합니다.

$ rpm --import https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX

데이터베이스 생성 및 스키마 가져오기

zabbix 가 사용할 데이터베이스를 생성하고 권한을 부여합니다.

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

MariaDB(또는 MySQL) 접속 후 실행

이후, 기본 데이터를 데이터베이스에 넣어줍니다.

$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

기본 데이터 주입이 끝나면 log_bin_trust_function_creators옵션을 비활성화 해줍니다.

mysql> set global log_bin_trust_function_creators = 0;
mysql> quit

MariaDB(또는 MySQL) 접속 후 실행

zabbix 서버 설정 수정

zabbix 설정파일에서 아래 내용을 찾아 수정합니다.

💡
설정파일의 위치는 /etc/zabbix/zabbix_server.conf 입니다.
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBSocket=/tmp/mysql.sock # mariadb가 사용하는 소켓파일 경로
DBPassword=password
DBPort=3306

/etc/zabbix/zabbix_server.conf

nginx 설정

zabbix 설치시 기본적으로 nginx 의 설정파일을 복사해 줍니다. 해당 파일에서 아래 내용을 찾아 수정합니다.

💡
Nginx의 zabbix 설정파일의 위치는 /etc/nginx/conf.d/zabbix.conf 입니다.
listen 8080;
server_name your.zabbix.domain.name;

PHP 설정

timezone 설정 추가

php_value[date.timezone] = Asia/Seoul

/etc/php-fpm.d/zabbix.conf

서비스 구동

모든 설정이 마무리 되면 아래 명령을 통해 서비스를 구동합니다.

$ systemctl enable zabbix-server zabbix-agent2 nginx php-fpm mariadb
$ systemctl start zabbix-server zabbix-agent2 nginx php-fpm mariadb

zabbix 웹 인터페이스 접속 및 마무리

이제 브라우저로 http://zabbix주소:8080/로 접속하면 설치 마법사가 나타납니다.
언어 설정, DB정보 확인 등을 거치면 모든 설치가 마무리 됩니다!

💡
기본 계정은 Admin / zabbix 입니다.

마치며

지금까지 zabbix 서버 설치 및 설정에 대해 다루어 보았습니다. 다음 포스팅은 zabbix-agent 설치에 대한 내용을 다뤄보도록 하겠습니다.

Read more

매번 헷갈리는 RPO와 RTO

RPO와 RTO는 재해 복구(DR) 계획을 세울때 가장 핵심이 되는 지표 입니다. 용어가 비슷해서 헷갈리기 쉽지만, 어느 시점의 데이터로 돌아갈 것인가(RPO) 와 얼마나 빨리 복구할 것인가(RTO)의 차이로 이해하시면 쉽습니다. 백업 정책 예를 통해 살펴 봅시다. 운영중인 데이터베이스 서버가 있다고 가정합니다. 백업 정책은 아래와 같습니다. * 일 4회(6시간

By Onlab

[Monitoring] zabbix 2편: zabbix agent 설치하기

zabbix 서버는 zabbix agent, SNMP 등을 통해 원격 컴퓨터를 모니터링 합니다. 앞서 zabbix 서버 설치에 대해 다루어 보았는데 이번에는 zabbix-agent 설치에 대해서 다루어 보겠습니다. agent는 두가지 버전을 제공합니다. zabbix-agent와 zabbix-agent2 로 나뉘어 있습니다. agent2가 차세대 버전쯤으로 생각하면 됩니다. 자세한 내용은 아래 링크를 참고하세요. 15 Agent vs agent 2 comparisonDocs 이

By Onlab

[Tip]터미널에서 AWS Profile 전환을 효율적으로 하는 방법

개요 aws cli를 사용할 때 profile 기능을 이용하면 여러개의 자격 증명을 등록하고 스위칭 해서 효율적으로 사용할 수 있다. default 프로파일을 사용하는 것은 human error 를 초래할 수 있어 권장되지 않아 cli를 사용할때 매번 --profile 옵션을 추가해야 하는 번거로움이 발생한다. 이 같은 번거로움을 조금이라도 회피해 보고자 합니다. AWS CLI의 default profile

By Onlab

AWS VPC환경에서 dnsmasq를 이용한 local dns cache 구현

배경 AWS VPC환경의 ec2에서 실행되는 애플리케이션에서 DNS질의에 실패하는 사례가 발생함 원인 AWS VPC환경에서 제공하는 DNS에는 초당 1024개의 패킷만 허용하게 되어있음. 이 한도를 초과하는 트레픽은 거부하게 됨 Understanding Amazon DNS - Amazon Virtual Private CloudAs an AWS architect or administrator, one of the foundational networking components you’ll encounter is the

By Onlab