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개월마다 출시가 되므로, 중간에 발생한 문제는 해결이 되지 않습니다.
- sudo mkdir -p /opt/observium && cd /opt
- sudo wget http://www.observium.org/observium-community-latest.tar.gz
- sudo tar zxvf observium-community-latest.tar.gz
- sudo rm observium-community-latest.tar.gz
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를 지원합니다.