웹사이트 검색

Ubuntu 16.04에서 원격 서버를 안전하게 모니터링하기 위해 Zabbix를 설치 및 구성하는 방법


소개

Zabbix는 네트워크 및 애플리케이션용 오픈 소스 모니터링 소프트웨어입니다. 서버, 가상 머신 및 기타 모든 종류의 네트워크 장치에서 수집된 수천 개의 메트릭에 대한 실시간 모니터링을 제공합니다. 이러한 메트릭은 IT 인프라의 현재 상태를 확인하고 고객이 불만을 제기하기 전에 하드웨어 또는 소프트웨어 구성 요소의 문제를 감지하는 데 도움이 될 수 있습니다. 유용한 정보는 데이터베이스에 저장되므로 시간이 지남에 따라 데이터를 분석하고 제공되는 서비스의 품질을 개선하거나 장비 업그레이드를 계획할 수 있습니다.

Zabbix는 클라이언트-서버 아키텍처를 사용하고 모니터링되는 클라이언트에서 작은 에이전트를 사용하여 데이터를 수집하고 Zabbix 서버로 보냅니다. Zabbix 버전 3은 서버와 연결된 클라이언트 간의 암호화된 통신을 지원하므로 데이터가 안전하지 않은 네트워크를 통해 이동하는 동안 데이터가 보호됩니다.

Zabbix 서버는 MySQL, PostgreSQL 또는 Oracle 기반의 관계형 데이터베이스에 데이터를 저장합니다. 또한 데이터를 보고 시스템 설정을 구성할 수 있는 웹 인터페이스를 제공합니다. 이 자습서에서는 두 대의 컴퓨터를 구성합니다. 하나는 서버로 구성되고 다른 하나는 모니터링할 클라이언트로 구성됩니다. 서버는 MySQL 데이터베이스를 사용하여 모니터링 데이터를 기록하고 Apache를 사용하여 웹 인터페이스를 제공합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자로 각각 구성된 Ubuntu 16.04 서버 2대. 이 초기 Ubuntu 서버 설정 문서에 따라 이를 설정할 수 있습니다.
  • Zabbix 서버를 실행할 서버에는 Apache, MySQL 및 PHP가 설치되어 있어야 합니다. 서버 중 하나에서 구성하려면 이 가이드를 따르세요.

1단계 - Zabbix 서버 설치

먼저 MySQL, Apache, PHP를 설치한 서버에 Zabbix Server를 설치해야 합니다. 이 튜토리얼에서는 이 머신을 "Zabbix 서버\라고 합니다. 루트가 아닌 사용자로 이 머신에 로그인합니다.

  1. ssh sammy@your_zabbix_server_ip_address

Zabbix를 설치하기 전에 Zabbix에 필요한 몇 가지 PHP 모듈을 설치해야 합니다. 먼저 시스템의 사용 가능한 패키지 목록을 업데이트합니다.

  1. sudo apt-get update

그런 다음 Zabbix에 필요한 PHP 모듈을 설치합니다.

  1. sudo apt-get install php7.0-xml php7.0-bcmath php7.0-mbstring

이제 Zabbix를 설치할 수 있습니다.

Zabbix는 Ubuntu의 패키지 관리자에서 사용할 수 있지만 구식이므로 공식 Zabbix 저장소를 사용하여 최신 안정 버전을 설치합니다. 리포지토리 구성 패키지를 다운로드하고 설치합니다.

wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

다음 출력이 표시됩니다.

Output
Selecting previously unselected package zabbix-release. (Reading database ... 55276 files and directories currently installed.) Preparing to unpack zabbix-release_3.2-1+xenial_all.deb ... Unpacking zabbix-release (3.2-1+xenial) ... Setting up zabbix-release (3.2-1+xenial) ...

새 리포지토리가 포함되도록 패키지 인덱스를 업데이트합니다.

sudo apt-get update

그런 다음 MySQL 데이터베이스를 지원하는 Zabbix 서버 및 웹 프런트엔드를 설치합니다.

sudo apt-get install zabbix-server-mysql zabbix-frontend-php

Zabbix 서버 상태 자체에 대한 데이터를 수집할 수 있는 Zabbix 에이전트도 설치하겠습니다.

sudo apt-get install zabbix-agent

Zabbix를 사용하기 전에 Zabbix 서버가 에이전트에서 수집할 데이터를 보관할 데이터베이스를 설정해야 합니다.

2단계 - Zabbix용 MySQL 데이터베이스 구성

새로운 MySQL 데이터베이스를 만들고 Zabbix에 적합하도록 몇 가지 기본 정보로 채워야 합니다. 또한 이 데이터베이스에 대한 특정 사용자를 생성하여 Zabbix가 root 계정으로 MySQL에 로그인하지 않도록 합니다.

MySQL 서버 설치 중에 설정한 루트 암호를 사용하여 루트 사용자로 MySQL에 로그인합니다.

mysql -uroot -p

UTF-8 문자를 지원하는 Zabbix 데이터베이스를 만듭니다.

  1. create database zabbix character set utf8 collate utf8_bin;

그런 다음 Zabbix 서버가 사용할 사용자를 만들고 새 데이터베이스에 대한 액세스 권한을 부여한 다음 사용자의 비밀번호를 설정합니다.

  1. grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';

그런 다음 다음 새 권한을 적용합니다.

  1. flush privileges;

사용자와 데이터베이스를 관리합니다. 데이터베이스 콘솔을 종료하십시오.

  1. quit;

다음으로 초기 스키마와 데이터를 가져와야 합니다. Zabbix 설치는 이를 설정하는 파일을 제공했습니다.

다음 명령을 실행하여 스키마를 설정하고 데이터를 zabbix 데이터베이스로 가져옵니다. 파일의 데이터가 압축되어 있으므로 zcat을 사용합니다.

zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix

프롬프트가 표시되면 구성한 zabbix MySQL 사용자의 비밀번호를 입력하십시오.

이 명령은 성공한 경우 오류를 출력하지 않습니다. ERROR 1045 (28000): Access Denied for user zabbix@localhost (using password: YES) 오류가 표시되면 zabbix 사용자의 암호를 사용했는지 확인하고 루트 사용자가 아닙니다.

Zabbix 서버에서 이 데이터베이스를 사용하려면 Zabbix 서버 구성 파일에서 데이터베이스 비밀번호를 설정해야 합니다. 편집기에서 구성 파일을 엽니다.

sudo nano /etc/zabbix/zabbix_server.conf

파일의 다음 섹션을 찾습니다.

### Option: DBPassword                           
#       Database password. Ignored for SQLite.   
#       Comment this line if no password is used.
#                                                
# Mandatory: no                                  
# Default:                                       
# DBPassword=

파일의 이러한 주석은 데이터베이스에 연결하는 방법을 설명합니다. 파일의 DBPassword 값을 데이터베이스 사용자의 암호로 설정해야 합니다. 해당 주석 아래에 다음 행을 추가하여 데이터베이스를 구성하십시오.

DBPassword=your_zabbix_mysql_password

그러면 Zabbix 서버 구성이 처리되지만 Zabbix 웹 인터페이스가 제대로 작동하려면 PHP 설정을 약간 수정해야 합니다.

3단계 - Zabbix용 PHP 구성

Zabbix 웹 인터페이스는 PHP로 작성되었으며 특별한 PHP 서버 설정이 필요합니다. Zabbix 설치 프로세스는 이러한 설정을 포함하는 Apache 구성 파일을 생성했습니다. /etc/zabbix 디렉토리에 있으며 Apache에 의해 자동으로 로드됩니다. 이 파일을 약간 변경해야 하므로 엽니다.

sudo nano /etc/zabbix/apache.conf

이 파일에는 Zabbix 웹 인터페이스에 필요한 요구 사항을 충족하는 PHP 설정이 포함되어 있습니다. 변경해야 하는 유일한 변경 사항은 기본적으로 주석 처리된 적절한 시간대를 설정하는 것입니다.

...
<IfModule mod_php7.c>
    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    php_value always_populate_raw_post_data -1
    # php_value date.timezone Europe/Riga
</IfModule>

위에서 강조 표시된 시간대 줄의 주석을 해제하고 해당 시간대로 변경합니다. 이 지원되는 시간대 목록을 사용하여 적합한 시간대를 찾을 수 있습니다. 그런 다음 파일을 저장하고 닫습니다.

이제 Apache를 다시 시작하여 이러한 새 설정을 적용하십시오.

sudo systemctl restart apache2

이제 Zabbix 서버를 시작할 수 있습니다.

sudo systemctl start zabbix-server

그런 다음 Zabbix 서버가 제대로 실행되고 있는지 확인하십시오.

sudo systemctl status zabbix-server

다음 상태가 표시됩니다.

Output
● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled) Active: :active (running) since Thu 2017-06-08 06:40:43 UTC; 6s ago Process: 15201 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) ...

마지막으로 서버가 부팅 시 시작되도록 활성화합니다.

  1. sudo systemctl enable zabbix-server

서버가 설정되고 데이터베이스에 연결됩니다. 이제 웹 프런트엔드를 설정해 보겠습니다.

4단계 - Zabbix 웹 인터페이스 설정 구성

웹 인터페이스를 사용하면 보고서를 보고 모니터링하려는 호스트를 추가할 수 있지만 사용하기 전에 몇 가지 초기 설정이 필요합니다. 브라우저를 실행하고 http://your_zabbix_server_ip_address/zabbix/ 주소로 이동합니다. 첫 화면에 환영 메시지가 표시됩니다. 계속하려면 다음 단계를 클릭하십시오.

다음 화면에는 Zabbix를 실행하기 위한 모든 전제 조건이 나열된 표가 표시됩니다.

이 테이블의 모든 값은 정상이어야 하므로 정상인지 확인하십시오. 아래로 스크롤하여 모든 전제 조건을 살펴보십시오. 모든 것이 준비되었음을 확인했으면 다음 단계를 클릭하여 계속 진행합니다.

다음 화면에서는 데이터베이스 연결 정보를 묻습니다.

Zabbix 서버에 데이터베이스에 대해 알렸지만 Zabbix 웹 인터페이스도 호스트를 관리하고 데이터를 읽기 위해 데이터베이스에 액세스해야 합니다. 따라서 2단계에서 구성한 MySQL 자격 증명을 입력하고 다음 단계를 클릭하여 계속 진행합니다.

다음 화면에서 옵션을 기본값으로 둘 수 있습니다.

이름은 선택 사항입니다. 모니터링 서버가 여러 개인 경우 웹 인터페이스에서 하나의 서버를 다른 서버와 구별하는 데 사용됩니다. 계속하려면 다음 단계를 클릭하십시오.

다음 화면에는 모든 것이 올바른지 확인할 수 있도록 사전 설치 요약이 표시됩니다.

다음 단계를 클릭하여 최종 화면으로 진행합니다.

웹 인터페이스 설정이 완료되었습니다! 이 프로세스는 나중에 백업하고 사용할 수 있는 구성 파일 /usr/share/zabbix/conf/zabbix.conf.php를 생성합니다. 마침을 클릭하여 로그인 화면으로 이동합니다. 기본 사용자는 Admin이고 암호는 zabbix입니다.

로그인하기 전에 다른 서버에서 Zabbix 에이전트를 설정하겠습니다.

5단계 - Zabbix 에이전트 설치 및 구성

이제 모니터링 데이터를 Zabbix 서버로 보낼 에이전트 소프트웨어를 구성해야 합니다.

"모니터링 서버\라고 하는 두 번째 서버에 로그인합니다.

  1. ssh sammy@your_monitored_server_ip_address

그런 다음 Zabbix 서버에서와 마찬가지로 다음 명령을 실행하여 리포지토리 구성 패키지를 설치합니다.

  1. wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
  2. sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

다음으로 패키지 색인을 업데이트합니다.

  1. sudo apt-get update

그런 다음 Zabbix 에이전트를 설치합니다.

  1. sudo apt-get install zabbix-agent

Zabbix는 인증서 기반 암호화를 지원하지만 인증 기관 설정은 이 튜토리얼의 범위를 벗어나지만 사전 공유 키(PSK)를 사용하여 서버와 에이전트 간의 연결을 보호할 수 있습니다.

따라서 먼저 PSK를 생성합니다.

  1. sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

키를 어딘가에 복사할 수 있도록 보여주세요. 호스트를 구성하는 데 필요합니다.

  1. cat /etc/zabbix/zabbix_agentd.psk

키는 다음과 같이 표시됩니다.

Output
cd12686e166a80aa09a227ae5f97834eaa3d5ae686d2ae39590f17ef85dd6de5

이제 Zabbix 에이전트 설정을 편집하여 Zabbix 서버에 대한 보안 연결을 설정하십시오. 텍스트 편집기에서 에이전트 구성 파일을 엽니다.

  1. sudo nano /etc/zabbix/zabbix_agentd.conf

이 파일 내의 각 설정은 파일 전반에 걸쳐 유익한 주석을 통해 문서화되지만 일부만 편집하면 됩니다.

먼저 Zabbix 서버의 IP 주소를 편집해야 합니다. 다음 섹션을 찾습니다.

### Option: Server
#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
#       Incoming connections will be accepted only from the hosts listed here.
#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
# Mandatory: no
# Default:
# Server=

Server=127.0.0.1

기본값을 Zabbix 서버의 IP로 변경합니다.

Server=your_zabbix_server_ip_address

그런 다음 Zabbix 서버에 대한 보안 연결을 구성하고 사전 공유 키 지원을 활성화하는 섹션을 찾으십시오. 다음과 같은 TSLConnect 섹션을 찾습니다.

### Option: TLSConnect
#       How the agent should connect to server or proxy. Used for active checks.
#       Only one value can be specified:
#               unencrypted - connect without encryption
#               psk         - connect using TLS and a pre-shared key
#               cert        - connect using TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSConnect=unencrypted

그런 다음 이 줄을 추가하여 사전 공유 키 지원을 구성합니다.

TLSConnect=psk

다음으로 다음과 같은 TLSAccept 섹션을 찾습니다.

### Option: TLSAccept
#       What incoming connections to accept.
#       Multiple values can be specified, separated by comma:
#               unencrypted - accept connections without encryption
#               psk         - accept connections secured with TLS and a pre-shared key
#               cert        - accept connections secured with TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSAccept=unencrypted

다음 행을 추가하여 사전 공유 키를 지원하도록 수신 연결을 구성하십시오.

TLSAccept=psk

다음으로 다음과 같은 TLSPSKIdentity 섹션을 찾습니다.

### Option: TLSPSKIdentity
#       Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=

다음 행을 추가하여 사전 공유 키를 식별하는 고유한 이름을 선택하십시오.

TLSPSKIdentity=PSK 001

Zabbix 웹 인터페이스를 통해 호스트를 추가할 때 이것을 PSK ID로 사용합니다.

그런 다음 이전에 생성한 사전 공유 키를 가리키는 옵션을 설정합니다. TLSPSKFile 옵션을 찾습니다.

### Option: TLSPSKFile
#       Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=

Zabbix 에이전트가 생성한 PSK 파일을 가리키도록 다음 줄을 추가합니다.

TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

파일을 저장하고 닫습니다. 이제 Zabbix 에이전트를 시작하고 부팅 시 시작하도록 설정할 수 있습니다.

  1. sudo systemctl start zabbix-agent
  2. sudo systemctl enable zabbix-agent

적절한 측정을 위해 Zabbix 에이전트가 제대로 실행되고 있는지 확인하십시오.

  1. sudo systemctl status zabbix-agent

에이전트가 실행 중임을 나타내는 다음 상태가 표시됩니다.

Output
● zabbix-agent.service - Zabbix Agent Loaded: loaded (/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2017-06-08 08:33:52 UTC; 4s ago Process: 18185 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS) ...

이제 에이전트가 Zabbix 서버로 데이터를 보낼 준비가 되었습니다. 하지만 사용하려면 서버의 웹 콘솔에서 연결해야 합니다.

메모:

  1. sudo ufw allow 10050/tcp

Ubuntu 16.04에서 UFW로 방화벽을 설정하는 방법에서 UFW에 대해 자세히 알아볼 수 있습니다.

6단계 - Zabbix 서버에 새 호스트 추가

모니터링하려는 서버에 에이전트를 설치하는 것은 프로세스의 절반에 불과합니다. 모니터링하려는 각 호스트는 웹 인터페이스를 통해 수행할 수 있는 Zabbix 서버에 등록해야 합니다.

주소 http://your_zabbix_server_ip_address/zabbix/로 이동하여 Zabbix 서버 웹 인터페이스에 로그인합니다.

로그인한 후 구성을 클릭한 다음 상단 탐색 모음에서 호스트를 클릭합니다. 그런 다음 화면 오른쪽 상단에 있는 호스트 만들기 버튼을 클릭합니다. 그러면 호스트 구성 페이지가 열립니다.

호스트 이름과 IP 주소를 조정하여 클라이언트 시스템의 호스트 이름과 IP 주소를 반영하십시오. 그런 다음 목록에서 그룹 중 하나를 선택하거나 고유한 그룹을 만들어 그룹에 호스트를 추가합니다. 호스트는 여러 그룹에 속할 수 있습니다. Linux 서버 그룹은 좋은 기본 선택입니다. 그룹을 추가했으면 템플릿 탭을 클릭합니다.

검색 필드에 Template OS Linux를 입력한 다음 추가를 클릭하여 이 템플릿을 호스트에 추가합니다.

그런 다음 암호화 탭으로 이동합니다. 호스트에 대한 연결과 호스트로부터의 연결 모두에 대해 PSK를 선택합니다. 그런 다음 PSK ID를 이전에 구성한 Zabbix 에이전트의 TLSPSKIdentity 설정 값인 PSK 001로 설정합니다. 그런 다음 설정

마지막으로 양식 하단의 추가 버튼을 클릭하여 호스트를 생성합니다.

모든 것이 제대로 작동하고 연결이 암호화되었음을 나타내는 녹색 레이블이 있는 새 호스트가 표시됩니다.

몇 초 후에 모니터링으로 이동한 다음 최신 데이터로 이동하여 에이전트의 데이터를 볼 수 있습니다.

제대로 작동하는지 확인하려면 모니터링되는 서버를 종료하여 Zabbix가 문제에 대해 어떻게 경고하는지 확인할 수 있습니다. 모니터링되는 서버가 오프라인 상태가 되면 기본 대시보드에 다음과 같은 경고가 표시됩니다.

모니터링해야 하는 추가 서버가 있는 경우 각 호스트에 로그인하고, Zabbix 에이전트를 설치하고, PSK를 생성하고, 에이전트를 구성하고, 첫 번째 호스트를 추가하기 위해 수행한 것과 동일한 단계에 따라 웹 인터페이스에 호스트를 추가합니다.

결론

이 자습서에서는 서버 상태를 모니터링하는 데 도움이 되는 간단하고 안전한 모니터링 솔루션을 설정하는 방법을 배웠습니다. 이제 문제에 대해 경고할 수 있으며 획득한 데이터를 기반으로 일부 그래프를 그릴 수 있으므로 이를 분석하고 그에 따라 계획할 수 있습니다.