본문 바로가기
서버 및 보안

Observium

by 다움위키 2023. 12. 22.

Nagios, Icinga, cacti를 설치한 후에 좀 더 미려한 인터페이스를 가진 강력한 도구를 찾고 있었습니다. 아마도 그 중에 하나가 Observium일 것입니다.

Install Dependencies

Apache, mysql 대신에 nginx, mariadb를 사용할 예정이므로 관련 패키지는 제외했습니다. 또한 커뮤니티 판과 데비안/우분투 계열과는 맞지 않는 부분이 있습니다. 이것도 수정을 해서 반영을 했습니다.

  • sudo apt install php7.4-cli php7.4-gd php7.4-json php7.4-mysql graphviz imagemagick php-pear snmp snmpd fping python3-mysqldb rrdtool subversion whois mtr-tiny ipmitool python3-pymysql python-is-python3

libvirt 가상 머신을 모니터링하려면 libvirt-bin을 설치하십시오 (주의: 서버에 필요하지 않은 많은 종속성을 가져옵니다):

  • sudo apt install libvirt-bin

Download Observium

상용 제품이 별도로 존재합니다. 여기서는 무료로 배포되는 커뮤니티 버전을 다운로드 받습니다. 커뮤니티 버전은 6개월마다 출시가 되므로, 중간에 발생한 문제는 해결이 되지 않습니다.

Configuration

아래에서 만들 데이터베이스와 사용자, 암호를 정확히 맞추어야 합니다.

  • cd observium
  • sudo cp config.php.default config.php

설정 config.php를 아래와 같이 수정합니다.

// Database config ---  This MUST be configured
$config['db_extension'] = 'mysqli';
$config['db_host']      = 'localhost';
$config['db_user']      = 'observium';
$config['db_pass']      = 'dbpassword';
$config['db_name']      = 'observium';

MariaDB Database

Create the MariaDB database

  • mysql -u root -p
MariaDB [(none)]> CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost' IDENTIFIED BY 'dbpassword';
MariaDB [(none)]> exit;

Setup the MariaDB database and insert the default schema

  • ./discovery.php -u

Create required directories

  • sudo mkdir logs rrd
  • sudo chown www-data:www-data rrd

Nginx Configuration

미디어위키가 80번 포트를 사용하고 있어서, 다른 포트(4000)를 사용하게 설정을 해보았지만 정상적으로 동작을 하지 않았습니다. 그래서 사용하지 않는 https 프로토콜로 접근하도록 /etc/nginx/site-available/observium 파일을 했습니다.

server {
    listen 443 ssl http2;
 
    root /opt/observium/html;
 
    index index.html index.htm index.php;
 
    server_name brajo.duckdns.org;
 
    client_max_body_size 32M;
 
    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }
 
    location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
       fastcgi_read_timeout 60;
    }
    ssl_certificate /etc/ssl/certs/dawoum.duckdns.org.crt;
    ssl_certificate_key /etc/ssl/private/dawoum.duckdns.org.key;

    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
 
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Powered-By "Mon PHP !";
}

SSL 키는 로컬에서 만든 것을 사용하셔도 좋습니다. 웹 브라우저에서 Exception을 설정해야 합니다. serve_name을 반드시 설정해야 합니다.

  • cd /etc/nginx/site-enabled
  • sudo ln -sf /etc/nginx/site-available/observium .
  • sudo systemctl restart nginx

Add Initial User and Device

디바이스 생성이 정상적으로 이루어지지 않았습니다. 이 부분은 외부 문서의 내용을 추가한 것입니다. 복잡한 암호는 반드시 ' ' 로 감싸줍니다.

  • ./adduser.php username 'password' 10
  • sudo cp scripts/distro /usr/bin/distro

설정 /etc/snmp/snmpd.conf의 맨 아래쪽에 다음 내용을 추가합니다.

com2sec readonly  default         my_device 
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
view all    included  .1                               80
access MyROGroup ""      any       noauth    exact  all    none   none
syslocation Asia/Seoul
syscontact user@email.com
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro
  • sudo systemctl restart snmpd
  • ./add_device.php localhost my_device

Perform Initial Discovery and Poll

  • ./discovery.php -h all && ./poller.php -h all

Cron Job

주기적으로 데이터를 업데이트하도록 /etc/cron.d/observium을 추가합니다. crontab -e는 동작하지 않는다는 정보도 있습니다.

# Run a complete discovery of all devices once every 6 hours
33  */6   * * *   root    /opt/observium/discovery.php -h all >> /dev/null 2>&1

# Run automated discovery of newly added devices every 5 minutes
*/5 *     * * *   root    /opt/observium/discovery.php -h new >> /dev/null 2>&1

# Run multithreaded poller wrapper every 5 minutes
*/5 *     * * *   root    /opt/observium/poller-wrapper.py 4 >> /dev/null 2>&1

# Run housekeeping script daily for syslog, eventlog and alert log
13 5 * * * root /opt/observium/housekeeping.php -ysel >> /dev/null 2>&1

# Run housekeeping script daily for rrds, ports, orphaned entries in the database and performance data
47 4 * * * root /opt/observium/housekeeping.php -yrptb >> /dev/null 2>&1

이제 모든 준비가 끝났습니다. https://brajo.duckdns.org 으로 접근하셔서 즐기시길 바랍니다.

문제점/해결책

device remove

웹 화면에 언제부터인지 virbr0 NAT가 생겼습니다.

  • sudo virsh net-list

default active yes yes

아래와 같이 제거해 버립니다.

  • sudo virsh net-destroy default
  • sudo virsh net-undefine default
  • sudo virsh net-list
  • sudo systemctl status libvirtd
  • sudo systemctl stop libvirtd
  • sudo systemctl disable libvirtd

그리고 Settings->Users를 열어서 사용하지 않는 사용자를 없애 버립니다.

php7.2

흰 화면으로 표시됩니다. 커뮤니티 버전은 6개월마다 업데이트되기 때문에 당장 코드가 수정되었는지 확인이 불가능합니다. 오류 메시지를 보는 법을 알아야겠습니다.

Nginx 오류를 확인해 보니, mcrypt_encrypt() 함수를 사용합니다. 원래는 php-mcrypt에서 지원하는 함수인데, 더 이상 지원을 하지 않습니다. 2018년 9월 3일: 커뮤니티 버전 18.9.9413도 php7.2를 지원합니다.

External Resources