Observium setup on Debian 10 with Nginx

Observium is an auto-discovering network monitoring tool with low-maintenance and support for Cisco, Juniper, Linux, Windows, HP, Dell, FreeBSD, Brocade, NetApp, Netscaler and many more. Observium focuses on providing a beautiful and powerful yet simple and intuitive interface to the health and status of your network. Observium is powered by PHP, MariaDB and Nginx/Apache web server.

Step 1: Install PHP and required modules

sudo apt -y install wget php php-{pear,cgi,common,curl,mbstring,gd,mysql,bcmath,imap,json,xml,snmp,fpm,zip}

Configure and Start PHP-FPM

Ensure date.timezone is set in php.ini to your preferred time zone:

Modify the below files to set the timezone

sudo vim /etc/php/*/fpm/php.ini
sudo vim /etc/php/*/cli/php.ini

Change date.timezone under [Date] section:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Bahrain

sudo systemctl restart php*-fpm.service

Step 2: Install Nginx Web Server

sudo apt remove apache2 -y
sudo apt -y install nginx
sudo systemctl enable nginx

Step 3: Install and configure MariaDB

sudo apt install mariadb-server

create database and user for Observium.

Observium is not fully compatible with MySQL strict mode, disable it by modifying the  /etc/mysql/mariadb.conf.d/50-server.cnf file as below within the [mysqld] section

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
innodb_file_per_table=1

sql-mode=""

lower_case_table_names=0

Restart Mariadb

sudo systemctl restart mariadb

Create database for observium

$ sudo mysql -u root

create database observium;

grant all privileges on observium.* to observium@localhost IDENTIFIED by "YourPassword";

flush privileges;

quit

Step 4: Download and Install Observium

Install wget command line downloader using apt

sudo apt install wget

Add observium system user:

sudo useradd -r -M -d /opt/observium observium

Add this user to web user group www-data

sudo usermod -a -G observium www-data

Proceedings  to install packages required by Observium

sudo apt update
sudo apt install rrdtool whois fping imagemagick graphviz mtr-tiny nmap python3-mysqldb snmp snmpd python3-memcache mtr-tiny acl

Download the latest Observium Community edition and extract it.

wget http://www.observium.org/observium-community-latest.tar.gz
tar xvf observium-community-latest.tar.gz

Move the resulting folder to the /opt directory:

sudo mv observium /opt

Change to the observium directory and create a config file.

sudo cp /opt/observium/config.php.default /opt/observium/config.php

Edit the file to set database connection:

sudo vim /opt/observium/config.php

Set like below:

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

Create rrd and logs directory.

sudo mkdir /opt/observium/{rrd,logs}

Change permission of the directory:

sudo chown -R observium:observium /opt/observium/
sudo chmod -R 775 /opt/observium/

Configure snmpd
Copy snmpd sample file to conf

sudo cp /opt/observium/snmpd.conf.example /etc/snmp/snmpd.conf

Configure String below in snmpd.conf file.

$ sudo vim /etc/snmp/snmpd.conf
com2sec readonly default 0bs3rv1um

Restart snmpd

sudo systemctl restart snmpd

Verify service status is running:

$ systemctl status snmpd
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-07-12 12:00:14 +03; 21h ago
Process: 21776 ExecStartPre=/bin/mkdir -p /var/run/agentx (code=exited, status=0/SUCCESS)
Main PID: 21777 (snmpd)
Tasks: 1 (limit: 4915)
Memory: 5.9M
CGroup: /system.slice/snmpd.service
└─21777 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f

Step 5: Configure Nginx

Create the VirtualHost definition for Nginx to load Observium web interface.

Create new file

sudo vim /etc/nginx/conf.d/observium.conf

Paste below contents and modify according to your setup. Also make sure the existence of /var/run/php/php7.3-fpm.sock or modify version.

server {
listen 80;
server_name observium.yourdomain.local;
root /opt/observium/html;
index index.php;

charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /api/v0 {
try_files $uri $uri/ /api_v0.php?$query_string;
}
location ~ \.php {
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; 

}
location ~ /\.ht {
deny all;
}
}

Check nginx for syntax error

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

And restart nginx:

sudo systemctl restart nginx

Step 6: Configure Observium on Web UI

cd /opt/observium
sudo ./discovery.php -u

Output:

$ sudo ./discovery.php -u

___ _ _
/ _ \ | |__ ___ ___ _ __ __ __(_) _ _ _ __ ___
| | | || '_ \ / __| / _ \| '__|\ \ / /| || | | || '_ ` _ \
| |_| || |_) |\__ \| __/| | \ V / | || |_| || | | | | |
\___/ |_.__/ |___/ \___||_| \_/ |_| \__,_||_| |_| |_|
Observium Community Edition 20.9.10731
https://www.observium.org

Install initial database schema ... done.
-- Updating database/file schema
416 -> 417 # (db) .. Done (0s).
417 -> 418 # (db) . Done (0s).
418 -> 419 # (db) .... Done (0s).
419 -> 420 # (db) .. Done (0s).
420 -> 421 # (db) ... Done (0s).
421 -> 422 # (db) .. Done (0s).
422 -> 423 # (db) ...... Done (0s).
423 -> 424 # (php) Done (0s).
424 -> 425 # (db) . Done (0s).
425 -> 426 # (db) ............... Done (0s).
426 -> 427 # (db) ... Done (0s).
427 -> 428 # (db) ... Done (1s).
428 -> 429 # (db) ... Done (0s).
429 -> 430 # (db) (WARNING! Required MySQL version 5.6+ or MariaDB 10.0+).... Done (0s).
430 -> 431 # (db) ..... Done (0s).
431 -> 432 # (php) Done (0s).
432 -> 433 # (db) ......... Done (0s).
433 -> 434 # (db) ... Done (0s).
434 -> 435 # (db) . Done (0s).
-- Done.

Add admin user:

Add a user for accessing the Observium portal.

adduser.php <username> <password> <level 1-10> [email]

User access Levels:

0 – Disabled (This user disabled)
1 – Normal User (This user has read access to individual entities)
5 – Global Read (This user has global read access)
7 – Global Secure Read (This user has global read access with secured info)
8 – Global Secure Read / Limited Write (This user has secure global read access with scheduled maintenence read/write.)
10 – Administrator (This user has full administrative access)

10 is the highest level of access

$ cd /opt/observium
$ sudo ./adduser.php admin adminP@ssw0rd 10
Observium CE 20.9.10731
Add User
User admin added successfully.
$ sudo ./adduser.php netmon UserP@ssw0rd 5
Observium Community Edition 20.9.10731
Add User
User netmon added successfully.

Access Observium Web Interface

Now open your web browser to access the application

http://observium.yourdomain.local

Use the username and password of the  user to login.