모니터링 소프트웨어 · 19 min read · Nov 07, 2025

우분투 22.04 LTS에 Icinga 2 모니터링 소프트웨어 설치하기

Icinga2는 네트워크의 리소스 가용성을 확인하고 사용자에게 중단을 알리는 무료 오픈 소스 네트워크 모니터링 소프트웨어입니다. Icinga2를 사용하여 네트워크 서비스(SMTP, POP3, HTTP, NNTP, ping), 호스트 리소스(CPU 사용량, 디스크 사용량) 및 네트워크 구성 요소(스위치, 라우터, 온도 및 습도 센서)를 모니터링할 수 있습니다. Nagios 플러그인과 통합할 수 있습니다.

다음 튜토리얼에서는 우분투 22.04 서버에 Icinga2를 설치하고 클라이언트 노드에 연결하는 방법을 배웁니다. 기본 Apache 서버 대신 Nginx를 사용하여 Icinga2 Web을 실행합니다.

전제 조건

  • 우분투 22.04에서 실행되는 두 대의 머신. 그 중 하나는 마스터 서버 역할을 하고 다른 하나는 모니터링을 위한 클라이언트 역할을 합니다.
  • 두 서버 모두에서 sudo 권한이 있는 비루트 사용자.
  • 마스터 서버의 완전한 도메인 이름(FQDN) icinga.example.com과 클라이언트 노드 client.example.com.
  • 모든 것이 업데이트되었는지 확인하십시오. $ sudo apt update $ sudo apt upgrade
  • 시스템에 필요한 몇 가지 패키지. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y 이러한 패키지 중 일부는 이미 시스템에 설치되어 있을 수 있습니다.

1단계 - 마스터 서버에서 방화벽 구성

첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(간단한 방화벽)를 제공합니다.

방화벽이 실행 중인지 확인하십시오.

$ sudo ufw status

다음과 같은 출력이 표시되어야 합니다.

상태: 비활성

SSH 포트를 허용하여 방화벽이 활성화될 때 현재 연결이 끊어지지 않도록 합니다.

$ sudo ufw allow OpenSSH

서버에 연결하기 위해 Icinga2 클라이언트가 필요한 포트 5665를 허용합니다.

$ sudo ufw allow 5665

HTTP 및 HTTPS 포트도 허용합니다.

$ sudo ufw allow http
$ sudo ufw allow https

방화벽을 활성화합니다.

$ sudo ufw enable
명령이 기존 ssh 연결을 방해할 수 있습니다. 작업을 진행하시겠습니까 (y|n)? y
방화벽이 활성화되었으며 시스템 시작 시 활성화됩니다.

방화벽 상태를 다시 확인하십시오.

$ sudo ufw status

유사한 출력을 볼 수 있어야 합니다.

상태: 활성

목적지                      작업        출처
--                         ------      ----
OpenSSH                    허용       모든 곳
80/tcp                     허용       모든 곳
443                        허용       모든 곳
5665                       허용       모든 곳
OpenSSH (v6)               허용       모든 곳 (v6)
80/tcp (v6)                허용       모든 곳 (v6)
443 (v6)                   허용       모든 곳 (v6)
5665 (v6)                  허용       모든 곳 (v6)

2단계 - MySQL 설치

우분투 22.04에는 최신 버전의 MySQL이 포함되어 있습니다. 단일 명령으로 설치할 수 있습니다.

$ sudo apt install mysql-server

MySQL 버전을 확인하십시오.

$ mysql --version
mysql  Ver 8.0.32-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

이 단계는 MySQL 버전 8.0.28 이상에 필요합니다. MySQL 셸에 들어갑니다.

$ sudo mysql

루트 사용자에 대한 비밀번호를 설정하는 다음 명령을 실행합니다. 숫자, 대문자, 소문자 및 특수 문자가 혼합되어 있는지 확인하십시오.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

셸을 종료합니다.

mysql> exit

MySQL 보안 설치 스크립트를 실행합니다.

$ sudo mysql_secure_installation

먼저 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 입력하십시오. 다음으로 비밀번호 유효성 검사 구성 요소를 설치할 것인지 묻는 메시지가 표시됩니다. MySQL에서 사용되는 비밀번호의 강도를 확인합니다. 설치하려면 Y를 누르십시오. 다음으로 비밀번호 유효성 검사 정책의 수준을 설정하라는 메시지가 표시됩니다. 가장 강력한 2를 선택하십시오.

MySQL 서버 배포 보안 설정 중.

루트 사용자 비밀번호를 입력하십시오:

VALIDATE PASSWORD COMPONENT를 사용하여 비밀번호를 테스트하고 보안을 향상시킬 수 있습니다. 비밀번호의 강도를 확인하고 사용자가 충분히 안전한 비밀번호만 설정할 수 있도록 합니다. VALIDATE PASSWORD 구성 요소를 설정하시겠습니까?

예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오: Y

비밀번호 유효성 검사 정책의 세 가지 수준이 있습니다:

낮음    길이 >= 8
중간 길이 >= 8, 숫자, 대소문자 혼합 및 특수 문자
강력한 길이 >= 8, 숫자, 대소문자 혼합, 특수 문자 및 사전 파일

0 = 낮음, 1 = 중간 및 2 = 강력한 것을 입력하십시오: 2
기존 비밀번호를 루트에 사용합니다.

비밀번호의 예상 강도: 100

다음으로 루트 비밀번호 변경을 거부하기 위해 N을 입력하십시오. 또한 익명 사용자를 제거하고 원격 루트 로그인을 금지하며 테스트 데이터베이스를 제거하고 권한 테이블을 다시 로드하기 위해 Y를 입력하십시오.

루트 비밀번호를 변경하시겠습니까? ((예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : N

 ... 건너뜁니다.
기본적으로 MySQL 설치에는 익명 사용자가 있어, 사용자 계정이 생성되지 않고도 누구나 MySQL에 로그인할 수 있습니다. 이는 테스트 용도로만 사용되며 설치를 조금 더 원활하게 진행하기 위한 것입니다. 프로덕션 환경으로 이동하기 전에 제거해야 합니다.

익명 사용자를 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.

일반적으로 루트는 'localhost'에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.

원격으로 루트 로그인을 금지하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.

기본적으로 MySQL에는 'test'라는 데이터베이스가 포함되어 있어 누구나 접근할 수 있습니다. 이는 테스트 용도로만 사용되며 프로덕션 환경으로 이동하기 전에 제거해야 합니다.

테스트 데이터베이스 및 접근을 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
 - 테스트 데이터베이스 삭제 중...
성공.

 - 테스트 데이터베이스에 대한 권한 제거 중...
성공.

권한 테이블을 다시 로드하면 지금까지 수행된 모든 변경 사항이 즉시 적용됩니다.

권한 테이블을 지금 다시 로드하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : Y
성공.

모두 완료되었습니다!

3단계 - MySQL 구성

MySQL 셸에 로그인합니다. 프롬프트가 표시되면 루트 비밀번호를 입력하십시오.

$ sudo mysql -u root -p

Icinga 데이터베이스를 생성합니다.

mysql> CREATE DATABASE icinga2;

Icinga2용 SQL 사용자 계정을 생성합니다. 데이터베이스와 사용자 이름은 기본적으로 이미 설정되어 있으므로 변경하지 마십시오. 변경하려면 5단계에서 MySQL 드라이버를 설치하는 동안 몇 가지 추가 단계를 수행해야 합니다. 비밀번호를 입력하면 오류가 발생하고 사용자 정의 데이터베이스 이름과 사용자를 지정할 수 있는 재구성 요청이 표시됩니다.

mysql> CREATE USER 'icinga2'@'localhost' IDENTIFIED BY 'Your_password2';

사용자에게 데이터베이스에 대한 모든 권한을 부여합니다.

mysql> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost';

사용자 권한을 플러시합니다.

mysql> FLUSH PRIVILEGES;

셸을 종료합니다.

mysql> exit

4단계 - 마스터 서버에 Icinga2 및 모니터링 플러그인 설치

설치를 위해 Icinga2 공식 저장소를 사용할 것입니다. Icinga2 GPG 키를 다운로드하고 가져옵니다.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg

다음 명령을 실행하여 APT 소스 목록에 Icinga2 저장소 정보를 생성하고 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list

시스템 저장소 목록을 업데이트합니다.

$ sudo apt update

Icinga2 및 모니터링 플러그인을 설치합니다.

$ sudo apt install icinga2 monitoring-plugins -y

5단계 - 마스터 서버에 IDO MySQL 드라이버 설치

Icinga2가 작동하려면 데이터베이스가 필요합니다. 이를 위해 IDO MySQL 드라이버를 설치하고 데이터베이스 연결을 설정해야 합니다. MySQL 드라이버를 설치하려면 다음 명령을 실행합니다.

$ sudo apt install -y icinga2-ido-mysql

드라이버를 설정하고 dbconfig-common 유틸리티를 사용하여 데이터베이스를 생성하라는 메시지가 표시됩니다. 계속하려면 를 선택하십시오.

다음으로 icinga2 데이터베이스의 MySQL 비밀번호를 입력하라는 메시지가 표시됩니다. 3단계에서 구성한 비밀번호를 입력하여 계속하십시오.

Icinga2 데이터베이스 비밀번호 입력

비밀번호를 다시 확인하라는 메시지가 표시됩니다.

Icinga2 비밀번호 확인

다음으로 ido-mysql 기능을 활성화하라는 메시지가 표시됩니다. 계속하려면 를 선택하십시오.

Icinga IDO-MySQL 기능

데이터베이스 세부정보는 /etc/icinga2/features-available/ido-mysql.conf 파일에서 확인할 수 있습니다.

$ cat /etc/icinga2/features-available/ido-mysql.conf
/**
 * db_ido_mysql 라이브러리는 MySQL에 대한 IDO 기능을 구현합니다.
 */

library "db_ido_mysql"

object IdoMysqlConnection "ido-mysql" {
  user = "icinga2",
  password = "Your_password2",
  host = "localhost",
  database = "icinga2"
}

ido-mysql 기능을 활성화합니다.

$ sudo icinga2 feature enable ido-mysql

Icinga2 서비스를 재시작합니다.

$ sudo systemctl restart icinga2

서비스 상태를 확인합니다.

$ sudo systemctl status icinga2
? icinga2.service - Icinga 호스트/서비스/네트워크 모니터링 시스템
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Mon 2023-05-01 08:02:36 UTC; 1s ago
    Process: 9823 ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/default/icinga2 (code=exited, status=0/SUCCESS)
   Main PID: 9828 (icinga2)
     Status: "Startup finished."
      Tasks: 10
     Memory: 17.6M
        CPU: 657ms
     CGroup: /system.slice/icinga2.service
             ??9828 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??9846 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??9849 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

6단계 - Icinga2 API 구성

HTTP를 통해 Icinga2 모니터링을 관리하고 구성하려면 Icinga2 API를 구성해야 합니다. 다음 명령을 실행하여 Icinga2 API를 활성화하고, Icinga2에 대한 TLS 인증서를 생성하고, Icinga2 구성을 업데이트합니다.

$ sudo icinga2 api setup

다음과 유사한 출력을 얻을 수 있습니다.

정보/cli: 새로운 CA 생성 중.
정보/기본: 개인 키를 '/var/lib/icinga2/ca//ca.key'에 작성 중.
정보/기본: X509 인증서를 '/var/lib/icinga2/ca//ca.crt'에 작성 중.
정보/cli: '/var/lib/icinga2/certs//icinga.example.com.csr'에 새로운 CSR 생성 중.
정보/기본: 개인 키를 '/var/lib/icinga2/certs//icinga.example.com.key'에 작성 중.
정보/기본: 인증서 서명 요청을 '/var/lib/icinga2/certs//icinga.example.com.csr'에 작성 중.
정보/cli: CA로 CSR 서명하고 인증서를 '/var/lib/icinga2/certs//icinga.example.com.crt'에 작성 중.
정보/pki: 인증서를 파일 '/var/lib/icinga2/certs//icinga.example.com.crt'에 작성 중.
정보/cli: CA 인증서를 '/var/lib/icinga2/certs//ca.crt'에 복사 중.
정보/cli: '/etc/icinga2/conf.d/api-users.conf'에 새로운 ApiUser 'root' 추가 중.
정보/cli: '/etc/icinga2/icinga2.conf' 읽는 중.
정보/cli: 'api' 기능 활성화 중.
기능 api를 활성화합니다. 이러한 변경 사항이 적용되려면 Icinga 2를 재시작해야 합니다.
정보/cli: '/etc/icinga2/constants.conf'에서 'NodeName' 상수 업데이트 중.
정보/cli: 백업 파일 '/etc/icinga2/constants.conf.orig' 생성 중.
정보/cli: '/etc/icinga2/constants.conf'에서 'ZoneName' 상수 업데이트 중.
정보/cli: 백업 파일 '/etc/icinga2/constants.conf.orig'가 이미 존재합니다. 백업 건너뜁니다.
완료.

이제 Icinga 2 데몬을 재시작하여 설치를 마무리하십시오!

위 명령은 기본 사용자 root가 Icinga2 API에 대한 모든 권한을 가진 /etc/icinga2/conf.d/api-users.conf 파일을 생성합니다. Icinga Web에서 필요한 최소 권한을 가진 새 사용자가 필요합니다.

api-users.conf 파일을 편집하기 위해 엽니다.

$ sudo nano /etc/icinga2/conf.d/api-users.conf

파일 끝에 다음 코드를 추가합니다.

/** Icingaweb2용 api */
object ApiUser "icingaweb2" {
  password = "PassWordApiIcingaWeb2"
  permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ]
}

나중에 웹사이트에 접근할 때 필요한 자격 증명을 기록해 두십시오. Icinga2 API 서버는 기본적으로 포트 5665에서 수신 대기합니다. 변경 사항이 적용되도록 서비스를 재시작하십시오.

$ sudo systemctl restart icinga2

다음 단계는 Icinga 웹 인터페이스를 설치하는 것입니다. Apache에 대해 미리 구성되어 있지만 Nginx 서버를 사용할 것입니다. 따라서 먼저 Nginx 및 SSL 인증서를 설치해야 합니다.

7단계 - Nginx 설치

우분투 22.04에는 이전 버전의 Nginx가 포함되어 있습니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginx의 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginx의 안정적인 버전 저장소를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

시스템 저장소를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인합니다.

$ nginx -v
nginx version: nginx/1.24.0

Nginx 서버를 시작합니다.

$ sudo systemctl start nginx

8단계 - SSL 설치

SSL 인증서를 생성하기 위해 Certbot을 설치해야 합니다. 우분투의 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

우분투 22.04에는 기본적으로 Snapd가 설치되어 있습니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core && sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

Certbot 명령이 /usr/bin 디렉토리에서 실행될 수 있도록 기호 링크를 생성하여 확인합니다.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령을 실행하여 SSL 인증서를 생성합니다.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d icinga.example.com

위 명령은 서버의 /etc/letsencrypt/live/icinga.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbot 갱신 스케줄러 서비스 확인합니다.

$ sudo systemctl list-timers

스케줄된 서비스 중 하나로 snap.certbot.renew.service를 찾을 수 있습니다.

NEXT                        LEFT          LAST                        PASSED         UNIT                     ACTIVATES
------------------------------------------------------------------------------------------------------------------------------------
Mon 2023-05-01 13:37:57 UTC 3h 45min left Mon 2023-05-01 07:20:42 UTC 2h 31min ago   ua-timer.timer           ua-timer.service
Mon 2023-05-01 14:39:29 UTC 4h 47min left Sat 2023-02-04 16:04:18 UTC 2 months ago   motd-news.timer          motd-news.service
Mon 2023-05-01 15:53:00 UTC 6h left       n/a                         n/a            snap.certbot.renew.timer snap.certbot.renew.service

SSL 갱신이 잘 작동하는지 확인하기 위해 프로세스를 드라이 런합니다.

$ sudo certbot renew --dry-run

오류가 없으면 모든 설정이 완료된 것입니다. 인증서는 자동으로 갱신됩니다.

9단계 - Nginx 및 PHP 구성

Icinga는 Apache에 대해 구성되어 있으므로 기본적으로 PHP-FPM 패키지가 설치되어 있지 않습니다. PDF로 그래프를 내보내려면 PHP Imagick 모듈도 필요합니다. 다음 명령을 실행하여 PHP-FPM 및 PHP Imagick 라이브러리를 설치합니다.

$ sudo apt install php-fpm php-imagick

PHP-FPM 구성

/etc/php/8.1/fpm/pool.d/www.conf 파일을 엽니다.

$ sudo nano /etc/php/8.1/fpm/pool.d/www.conf

PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-datagroup=www-data 줄을 찾아 nginx로 변경합니다.

...
; 프로세스의 Unix 사용자/그룹
; 주의: 사용자는 필수입니다. 그룹이 설정되지 않으면 기본 사용자의 그룹이 사용됩니다.
;       사용자가 설정되어 있습니다.
user = nginx
group = nginx
...

파일에서 listen.owner = www-datalisten.group = www-data 줄을 찾아 nginx로 변경합니다.

; Unix 소켓에 대한 권한을 설정합니다. Linux에서는 읽기/쓰기 권한이 설정되어야 웹 서버에서 연결할 수 있습니다. 많은 BSD 파생 시스템은 권한에 관계없이 연결을 허용합니다. 소유자 및 그룹은 이름 또는 숫자 ID로 지정할 수 있습니다.
; 기본값: 사용자 및 그룹은 실행 중인 사용자로 설정됩니다.
;                 모드는 0660으로 설정됩니다.
listen.owner = nginx
listen.group = nginx

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력합니다.

PHP-FPM 서비스를 재시작합니다.

$ sudo systemctl restart php8.1-fpm

Nginx 구성

/etc/nginx/conf.d/icinga.conf 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/nginx/conf.d/icinga.conf

다음 코드를 붙여넣습니다.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  icinga.example.com;

    access_log  /var/log/nginx/icinga.access.log;
    error_log   /var/log/nginx/icinga.error.log;

    # SSL
    ssl_certificate      /etc/letsencrypt/live/icinga.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/icinga.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/icinga.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location ~ ^/index\.php(.*)$ {
        # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP 버전에 따라 다름
        fastcgi_index index.php;
        # try_files $uri =404;
        # fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
        fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
        fastcgi_param REMOTE_USER $remote_user;
    }

    location ~ ^/(.*)? {
        alias /usr/share/icingaweb2/public;
        index index.php;
        rewrite ^/$ /dashboard;
        try_files $1 $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        return 404;
    }
}

# HTTPS 강제 적용
server {
    listen       80;
    listen       [::]:80;
    server_name  icinga.example.com;
    return 301   https://$host$request_uri;
}

Nginx 구성에서 사용할 루트 디렉토리는 /usr/share/icingaweb2/public임을 주의하십시오.

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력합니다.

/etc/nginx/nginx.conf 파일을 편집하기 위해 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력합니다.

Nginx 구성 파일 구문을 확인합니다.

$ sudo nginx -t
nginx: 구성 파일 /etc/nginx/nginx.conf 구문이 올바릅니다.
ginx: 구성 파일 /etc/nginx/nginx.conf 테스트가 성공했습니다.

Nginx 서비스를 재시작합니다.

$ sudo systemctl restart nginx

10단계 - 웹 설정 준비

Icinga Web에 접근하기 전에 설정해야 합니다. Icinga Web을 사용할 때는 토큰을 사용하여 인증해야 합니다. 다음 명령을 사용하여 토큰을 생성합니다.

$ sudo icingacli setup token create
새로 생성된 설정 토큰은: 3c4d4e155635f512

토큰을 기록해 두십시오. 나중에 다음 명령을 사용하여 항상 가져올 수 있습니다.

$ sudo icingacli setup token show
현재 설정 토큰은: 3c4d4e155635f512

다음 단계는 데이터베이스와 데이터베이스 사용자를 생성하는 것입니다. MySQL 셸에 로그인합니다.

$ sudo mysql -u root -p

Icinga Web 데이터베이스를 생성합니다.

mysql> CREATE DATABASE icingaweb2;

Icinga Web용 SQL 사용자 계정을 생성합니다.

mysql> CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'Your_password3';

사용자에게 데이터베이스에 대한 모든 권한을 부여합니다.

mysql> GRANT ALL PRIVILEGES ON icingaweb2.* TO 'icingaweb2'@'localhost';

사용자 권한을 플러시합니다.

mysql> FLUSH PRIVILEGES;

셸을 종료합니다.

mysql> exit

11단계 - IcingaWeb 설정

브라우저에서 https://icinga.example.com URL을 열면 다음 화면이 표시됩니다.

Icinga Web 설정 페이지

이전 단계에서 생성된 토큰을 입력하고 다음 버튼을 눌러 진행합니다.

Icinga 모듈 설정

다음 화면에서 설치할 모듈을 선택하고 다음을 클릭하여 진행합니다. 모니터링 모듈은 기본적으로 선택되어 있습니다. 다음 페이지에서는 요구 사항이 충족되었는지 확인합니다. 모든 요구 사항이 녹색으로 표시되어 있는지 확인하십시오.

Icinga 요구 사항 페이지

다음을 클릭하여 다음 페이지로 진행하여 인증 유형을 선택합니다.

Icinga 인증 유형

인증 유형은 기본적으로 데이터베이스로 설정되어 있습니다. 다음을 클릭하여 진행합니다. 다음 페이지에서 데이터베이스 자격 증명을 입력하라는 메시지가 표시됩니다.

Icinga Web 데이터베이스 자격 증명

10단계에서 생성한 데이터베이스 자격 증명을 입력하십시오. 구성 확인 버튼을 클릭하여 자격 증명을 확인합니다. 확인되면 다음을 클릭하여 진행합니다. 다음으로 인증 백엔드의 이름을 지정하라는 메시지가 표시됩니다.

Icinga 인증 백엔드

기본값을 그대로 두고 다음을 클릭하여 진행합니다. 다음 페이지에서는 관리자 계정을 생성하라는 메시지가 표시됩니다.

Icinga 관리자 세부정보

새 관리자 계정에 대한 자격 증명을 입력하고 다음을 클릭하여 진행합니다. 다음으로 응용 프로그램 구성 페이지가 표시됩니다.

Icinga 응용 프로그램 구성

응용 프로그램 및 로깅 구성에 대한 모든 기본값을 그대로 두고 다음을 클릭하여 진행합니다. 마지막 페이지에서 구성을 검토하라는 메시지가 표시됩니다.

Icinga 구성 검토

설정을 변경하려면 뒤로 가기를 클릭할 수 있습니다. 만족스러우면 다음을 클릭하여 진행합니다.

다음을 클릭하여 모니터링 모듈 구성을 진행합니다. 다음으로 Icinga 데이터베이스 자격 증명을 입력하라는 메시지가 표시됩니다.

Icinga 데이터베이스 자격 증명

3단계에서 입력한 데이터베이스 자격 증명을 입력하고 구성 확인을 클릭하여 연결을 확인합니다. 확인되면 다음을 클릭하여 진행합니다. 다음으로 API 세부 정보를 입력하라는 메시지가 표시됩니다.

Icinga API 세부정보

6단계에서 생성한 API 자격 증명을 입력하고 구성 확인을 클릭하여 연결을 확인합니다. 다음을 클릭하여 진행합니다. 다음으로 모니터링 보안을 위한 보호된 사용자 정의 변수를 선택하라는 메시지가 표시됩니다.

Icinga 모니터링 보안

기본값을 그대로 두고 다음을 클릭하여 진행합니다. 다음으로 모니터링 구성을 검토하라는 메시지가 표시됩니다. 원하시면 변경할 수 있습니다.

Icinga 모니터링 구성 검토

만족스러우면 완료를 클릭하여 설치를 완료합니다.

Icinga 설치 완료

성공적으로 완료되면 Icinga Web 2에 로그인 버튼을 클릭하여 로그인 페이지를 엽니다.

Icinga Web 로그인 페이지

관리자 계정 세부 정보를 입력하고 로그인 버튼을 클릭하여 Icinga Web 대시보드를 엽니다.

Icinga Web 대시보드

개요 >> 서비스 페이지를 방문하여 마스터 서버의 상태를 확인하십시오.

Icinga Web 서비스 페이지

12단계 - 마스터 서버 초기화

다음 단계는 마스터 서버를 마스터 노드로 초기화하는 것입니다. 마스터 노드는 모니터링 스택의 주요 컨트롤러 역할을 합니다. 초기화 프로세스를 시작하려면 다음 명령을 실행합니다.

$ sudo icinga2 node wizard

에이전트 설정인지 묻는 메시지가 표시됩니다. 마스터 노드를 설정하려면 n을 입력합니다.

Icinga 2 설정 마법사에 오신 것을 환영합니다!

필요한 모든 구성 세부정보를 안내해 드리겠습니다.

이것이 에이전트/위성 설정인지 지정하십시오('n'은 마스터 설정을 설치합니다) [Y/n]: n

다음으로 공통 이름 또는 도메인 이름을 입력하라는 메시지가 표시됩니다. 표시된 기본값을 선택하려면 Enter를 누릅니다.

공통 이름(CN)을 지정하십시오 [icinga.example.com]:
Icinga 재구성 중...
'icinga.example.com'에 대한 기존 인증서 확인 중...
CN 'icinga.example.com'에 대한 인증서 '/var/lib/icinga2/certs//icinga.example.com.crt'가 이미 존재합니다. 인증서 생성을 건너뜁니다.
Icinga 2에 대한 마스터 구성을 생성 중입니다.
'api' 기능이 이미 활성화되어 있습니다.

다음으로 마스터 존 이름을 입력하고 Enter를 눌러 진행합니다. 이 경우 서버 도메인 이름과 동일합니다.

마스터 존 이름 [master]: icinga.example.com

다음으로 추가 글로벌 존을 추가할 것인지 묻는 메시지가 표시됩니다. 추가하지 않으려면 n을 눌러 건너뛰고 Enter를 눌러 진행합니다.

기본 글로벌 존: global-templates director-global
추가 글로벌 존을 지정하시겠습니까? [y/N]: n

다음 단계에서 API 바인드 호스트 및 포트를 기본값으로 두고 Enter를 눌러 진행합니다.

API 바인드 호스트/포트를 지정하십시오(선택 사항):
바인드 호스트 []:
바인드 포트 []:

다음으로 /etc/icinga2/conf.d/ 디렉토리 내의 구성을 비활성화하려면 Y를 눌러 진행합니다. 나중에 Icinga2 존 구성을 사용할 것입니다.

구성을 부모 노드에서 비활성화하시겠습니까? [Y/n]: Y
conf.d 디렉토리 포함 비활성화 중...
api-users.conf 파일이 존재하는지 확인 중...

완료.

이제 Icinga 2 데몬을 재시작하여 설치를 마무리하십시오!

변경 사항을 적용하려면 서비스를 재시작합니다.

$ sudo systemctl restart icinga2

마지막으로 클라이언트 서버에 대한 티켓을 생성하려면 다음 명령을 실행합니다. 인수로 클라이언트의 도메인 이름을 사용합니다.

$ sudo icinga2 pki ticket --cn 'client.example.com'
365cd931d3091537622a95b113b17775893a224f

나중에 사용할 수 있도록 티켓을 기록해 두십시오.

13단계 - 클라이언트 서버에서 Icinga2 에이전트 초기화

클라이언트 서버에 로그인하고 Icinga2 및 모니터링 플러그인을 설치합니다. 다음 명령을 실행하여 수행합니다.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ sudo apt update
$ sudo apt install icinga2 monitoring-plugins -y

Icinga 서비스가 활성화되어 실행 중인지 확인합니다.

$ sudo systemctl status icinga2
? icinga2.service - Icinga 호스트/서비스/네트워크 모니터링 시스템
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Tue 2023-05-02 07:32:07 UTC; 59min ago
   Main PID: 7602 (icinga2)
     Status: "Startup finished."
      Tasks: 8
     Memory: 13.9M
        CPU: 1.018s
     CGroup: /system.slice/icinga2.service
             ??7602 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??7620 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??7623 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

클라이언트 서버에서 에이전트를 초기화하기 위해 Icinga 노드 마법사를 시작합니다.

$ sudo icinga2 node wizard

에이전트 설정인지 묻는 메시지가 표시됩니다. 에이전트를 설정하려면 Y를 입력합니다.

Icinga 2 설정 마법사에 오신 것을 환영합니다!

필요한 모든 구성 세부정보를 안내해 드리겠습니다.

이것이 에이전트/위성 설정인지 지정하십시오('n'은 마스터 설정을 설치합니다) [Y/n]: Y

다음으로 공통 이름을 지정하라는 메시지가 표시됩니다. 기본값을 그대로 두고 Enter를 눌러 진행합니다.

에이전트/위성 설정 루틴 시작 중...

공통 이름(CN)을 지정하십시오 [client.example.com]:

다음으로 부모 엔드포인트를 icinga.example.com으로 지정하고 클라이언트에서 부모 노드에 연결하려면 Y를 입력합니다.

부모 엔드포인트(마스터 또는 위성)를 지정하십시오. 이 노드가 연결해야 합니다:
마스터/위성 공통 이름(CN): icinga.example.com

이 노드에서 부모 노드에 연결하시겠습니까? [Y/n]: Y

다음으로 마스터 서버의 IP 주소를 입력하고 포트 값은 기본값으로 두십시오.

마스터/위성 연결 정보:
마스터/위성 엔드포인트 호스트(IP 주소 또는 FQDN): 199.247.31.184
마스터/위성 엔드포인트 포트 [5665]:

추가 마스터 엔드포인트를 추가하지 않으려면 N을 입력합니다.

추가 마스터/위성 엔드포인트를 추가하시겠습니까? [y/N]: N

다음으로 마스터 서버의 인증서 정보가 표시됩니다. 정보를 확인하려면 Y를 눌러 확인하고 진행합니다.

부모 인증서 정보:

 버전:             3
 주체:             CN = icinga.example.com
 발급자:              CN = Icinga CA
 유효 시작:          May  1 08:28:26 2023 GMT
 유효 종료:         Jun  1 08:28:26 2024 GMT
 일련 번호:              53:50:d4:1a:85:c5:70:5b:b1:f6:0e:c3:b6:e4:db:62:df:8d:5e:d9

 서명 알고리즘: sha256WithRSAEncryption
 주체 대체 이름:   icinga.example.com
 지문:         DC BB 90 68 29 E5 C4 B5 74 F5 BC 8C BF A1 8F BF D2 9D A4 E5 A9 9A 43 2C 3B 24 AE A9 CD 19 32 F4

이 정보가 맞습니까? [y/N]: Y

다음으로 이전 단계에서 생성된 요청 티켓을 입력합니다.

부모 Icinga 2 마스터에서 생성된 요청 티켓을 지정하십시오(선택 사항).
 (힌트: # icinga2 pki ticket --cn 'client.example.com'): 365cd931d3091537622a95b113b17775893a224f

API 바인드 호스트 및 포트를 기본값으로 두고 Enter를 눌러 계속합니다.

API 바인드 호스트/포트를 지정하십시오(선택 사항):
바인드 호스트 []:
바인드 포트 []:

다음으로 마스터 노드에서 구성 및 명령을 수락하려면 Y를 두 번 입력합니다.

부모 노드에서 구성을 수락하시겠습니까? [y/N]: Y
부모 노드에서 명령을 수락하시겠습니까? [y/N]: Y

기본 로컬 존 이름을 수락하려면 Enter를 누르고 부모 존 이름으로 마스터 도메인 이름을 입력하여 진행합니다.

Icinga 재구성 중...
구성 비활성화 중...
알림 기능 비활성화 중. 이러한 변경 사항이 적용되려면 Icinga 2를 재시작해야 합니다.
'api' 기능을 활성화합니다. 이러한 변경 사항이 적용되려면 Icinga 2를 재시작해야 합니다.

로컬 존 이름 [client.example.com]:
부모 존 이름 [master]: icinga.example.com

추가 글로벌 존을 추가하지 않으려면 N을 입력합니다.

기본 글로벌 존: global-templates director-global
추가 글로벌 존을 지정하시겠습니까? [y/N]: N

/etc/icinga2/conf.d/ 디렉토리의 구성을 비활성화하려면 Y를 입력합니다.

구성을 conf.d 디렉토리에서 비활성화하시겠습니까? [Y/n]: Y
conf.d 디렉토리 포함 비활성화 중...

완료.

이제 Icinga 2 데몬을 재시작하여 설치를 마무리하십시오!

구성 변경 사항을 적용하려면 Icinga 서비스를 재시작합니다.

$ sudo systemctl restart icinga2

14단계 - 마스터 서버에서 존 구성 생성

서버에 다시 로그인하고 기본 존으로 새 디렉토리를 생성합니다.

$ sudo mkdir -p /etc/icinga2/zones.d/icinga.example.com/

새로 생성된 디렉토리에서 구성 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/client.example.com.conf

다음 코드를 붙여넣습니다. 코드의 IP 주소는 클라이언트의 공용 IP 주소와 일치해야 합니다.

// 엔드포인트
object Endpoint "client.example.com" {
}
// 존
object Zone "client.example.com" {
    endpoints = [ "client.example.com" ]
    parent = "icinga.example.com"
}
// 호스트 객체
object Host "client.example.com" {
    check_command = "hostalive"
    address = "95.179.138.148"
    vars.client_endpoint = name
}

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력합니다.

서비스 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/services.conf

다음 코드를 붙여넣습니다.

// 핑
 apply Service "Ping" {
 check_command = "ping4"
 assign where host.address // 마스터에서 실행된 체크
 }
 // 시스템 부하
 apply Service "System Load" {
 check_command = "load"
 command_endpoint = host.vars.client_endpoint // 클라이언트에서 실행된 체크
 assign where host.vars.client_endpoint
 }
 // SSH 서비스
 apply Service "SSH Service" {
 check_command = "ssh"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }
 // Icinga 2 서비스
 apply Service "Icinga2 Service" {
 check_command = "icinga"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }

구성을 확인하려면 다음 명령을 실행합니다.

$ sudo icinga2 daemon -C

다음과 유사한 출력을 얻을 수 있습니다.

[2023-05-02 11:21:23 +0000] 정보/cli: Icinga 애플리케이션 로더(버전: r2.13.7-1)
[2023-05-02 11:21:23 +0000] 정보/cli: 구성 파일을 로드합니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 구성 항목을 커밋합니다.
[2023-05-02 11:21:23 +0000] 정보/ApiListener: 내 API ID: icinga.example.com
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 IcingaApplication을 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 호스트를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 FileLogger를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 IdoMysqlConnection을 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 CheckerComponent를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 4 존을 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 2 엔드포인트를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 2 ApiUsers를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 ApiListener를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 1 NotificationComponent를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 244 CheckCommands를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ConfigItem: 4 서비스를 인스턴스화했습니다.
[2023-05-02 11:21:23 +0000] 정보/ScriptGlobal: 변수를 파일 '/var/cache/icinga2/icinga2.vars'에 덤프합니다.
[2023-05-02 11:21:23 +0000] 정보/cli: 구성 파일을 검증하는 작업이 완료되었습니다.

구성 변경 사항을 적용하려면 Icinga 서비스를 재시작합니다.

$ sudo systemctl restart icinga2

15단계 - Icinga 대시보드에서 확인

Icinga2 웹 대시보드를 열어 클라이언트 머신 정보를 확인합니다. 왼쪽 메뉴에서 개요 >> 호스트를 선택하면 다음 화면이 표시됩니다.

Icinga Web 대시보드 호스트 페이지

클라이언트 상태가 UP으로 표시되기까지 시간이 걸릴 수 있습니다. 클라이언트를 클릭하여 자세한 정보를 확인하십시오. 개요 >> 서비스를 선택하면 클라이언트에 대한 다음 상태가 표시됩니다.

Icinga Web 클라이언트 서비스 세부정보

이는 클라이언트가 Icinga 마스터 서버에 올바르게 통계를 전송하고 있음을 확인합니다.

결론

이로써 우분투 22.04 서버에 Icinga 모니터링 소프트웨어를 설치하고 동일한 운영 체제를 실행하는 클라이언트 머신을 모니터링하도록 구성하는 튜토리얼이 완료되었습니다. 질문이 있으시면 아래 댓글로 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.