Jan 14, 2023

Install OPM (Open PostgreSQL Monitoring)

Install OPM (Open PostgreSQL Monitoring) – A free software suite designed to help you manage your PostgreSQL servers. It’s a flexible tool that will follow the activity of each instance. It can gather stats, display dashboards and send warnings when something goes wrong. The long-term goal of the project is to provide similar features to those of Oracle Grid Control or SQL Server Management Studio.

To install OPM, you need

  • a PostgreSQL 9.3+ cluster,
  • standard compiling tools,
  • nagios and
  • pg_config

The PostgreSQL cluster and Nagios can be installed either on same server or different servers.

Prerequisites:

apt-get update

# Install required packages
apt-get -y install gcc make build-essential libgd2-xpm-dev openssl libssl-dev xinetd apache2-utils unzip

# Install Apache server
apt-get –y install apache2 apache2-utils

# Install PHP
apt-get –y install php5 libapache2-mod-php5 php5-mcrypt php5-curl

# Install PostgreSql
apt-get –y install postgresql postgresql-contrib postgresql-server-dev-all postgresql-common

# Install pg_config
apt-get –y install libpq-dev python-dev pgtune

apt-get update

Click here to see Nagios Installation Guide

Install OPM Core

Run below commands as root user to install and configure opm-core:

# Change directory to /usr/local/src
cd /usr/local/src

# Create new directory opm and enter into it
mkdir opm
cd opm

# Download & unzip OPM
wget https://github.com/OPMDG/opmdg.github.io/releases/download/REL_2_3/OPM_2_3.zip
unzip OPM_2_3.zip

# Rename the extracted directories
mv opm-core-REL_2_3 opm-core
mv opm-wh_nagios-REL_2_3 opm-wh_nagios
mv check_pgactivity-REL1_13 check_pgactivity

# Install opm-core
cd opm-core/pg
make install

# Change to postgres user & login to postgresql database
su postgres
psql -u postgres -p 5432

postgres@postgres=# CREATE DATABASE opm;
postgres@postgres=# \c opm
postgres@opm=# CREATE EXTENSION opm_core;
postgres@opm=# SELECT create_admin('admin1', 'admin1');
postgres@opm=# \q
postgres:/usr/local/src/opm# exit
root:/usr/local/src/opm#

admin1 is the user you will be using to log on to the OPM user interface.

wh_nagios

To install wh_nagios module run below commands as root user:

# change to appropriate directory
cd /usr/local/src/opm/opm-wh_nagios/pg
make install

# Change to postgres user & login to postgresql database
su postgres
psql -u postgres -p 5432
postgres@opm=# CREATE EXTENSION hstore;
postgres@opm=# CREATE EXTENSION wh_nagios;

Then, create a crontab that will process incoming data and dispatch them.

* * * * * psql -c 'SELECT wh_nagios.dispatch_record()' opm  # trigger it every minute

This crontab can belong to any user, as long as it can connect to the PostgreSQL opm database with any PostgreSQL role. To allow a PostgreSQL role to import data in a warehouse, you need to call public.grant_dispatch. For instance, if the PostgreSQL role is user1 and the warehouse is wh_nagios:

postgres@opm=# SELECT grant_dispatcher('wh_nagios', 'user1');

Nagios & nagios_dispatcher

The dispatcher nagios_dispatcher is aimed to dispatch perfdata from Nagios files to the wh_nagios warehouse. nagios_dispatcher requires the DBD::Pg perl module.

# Install DBD::Pg perl
# For Debian
apt-get install libdbd-pg-perl

# For CentOS
yum install perl-DBD-Pg

Now you need to setup Nagios to create its perfdata files that nagios_dispatcher will poll and consume. As user root, create the required command file and destination folder:

mkdir -p /var/lib/nagios4/spool/perfdata/
chown nagios:nagios /var/lib/nagios4/spool/perfdata/
chown -R nagios:nagios /var/lib/nagios4/
cat <<'EOF' >> /usr/local/nagios/etc/objects/commands.cfg
define command{
    command_name    process-service-perfdata-file
    command_line    /bin/mv /var/lib/nagios4/service-perfdata /var/lib/nagios4/spool/perfdata/service-perfdata.$TIMET$
}
define command{
    command_name    process-host-perfdata-file
    command_line    /bin/mv /var/lib/nagios4/host-perfdata /var/lib/nagios4/spool/perfdata/host-perfdata.$TIMET$
}
EOF

Then, in Nagios main configuration file (nagios.cfg), append following parameters accordingly:

process_performance_data=1
host_perfdata_file=/var/lib/nagios4/host-perfdata
service_perfdata_file=/var/lib/nagios4/service-perfdata
host_perfdata_file_processing_command=process-host-perfdata-file
service_perfdata_file_processing_command=process-service-perfdata-file
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tHOSTOUTPUT::$HOSTOUTPUT$
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$\tSERVICEOUTPUT::$SERVICEOUTPUT$
host_perfdata_file_mode=a
service_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
service_perfdata_file_processing_interval=15

and then create the dispatcher configuration file:

cd
mkdir -p /usr/local/etc/
cat <<EOF > /usr/local/etc/nagios_dispatcher.conf
daemon=1
directory=/var/lib/nagios4/spool/perfdata/
frequency=5
db_connection_string=dbi:Pg:dbname=opm host=127.0.0.1
db_user=YOUR_USER
db_password=YOUR_PASS
debug=0
syslog=1
hostname_filter = /^$/ # Empty hostname. Never happens
service_filter = /^$/ # Empty service
label_filter = /^$/ # Empty label
EOF

# Change the ownership of nagios_dispatcher file to nagios
chown nagios:nagios /usr/local/etc/nagios_dispatcher.conf

# Install the nagios_dispatcher.pl file into the /usr/local/bin/ directory:
cp /usr/local/src/opm/opm-wh_nagios/bin/nagios_dispatcher.pl /usr/local/bin/

Now, If your operating system uses inittab , add following line at the end of the /etc/inittab file:

d1:23:respawn:/usr/bin/perl -w /usr/local/bin/nagios_dispatcher.pl --daemon --config /usr/local/etc/nagios_dispatcher.conf

Reload the /etc/inittab file:

init q

And, if your operating system uses upstart , create the file /etc/init/nagios_dispatcher.conf, with following content:

# This service maintains nagios_dispatcher

start on stopped rc RUNLEVEL=[2345]
stop on starting runlevel [016]

respawn
exec /usr/local/bin/nagios_dispatcher.pl -c /usr/local/etc/nagios_dispatcher.conf

And start the job:

initctl start nagios_dispatcher

User interface

The default user interface is based on the web framework Mojolicious. You need to install:

  • Perl (5.10 or above)
  • Mojolicious (4.63 or above, less than 5.0)
  • Mojolicious::Plugin::I18N (version 0.9)
  • DBD::Pg perl module
  • PostgreSQL (9.3 or above)
  • A CGI/Perl webserver

You can install Mojolicious using CPAN or your Linux distribution package system if available. Here is an example with CPAN:

curl -L cpanmin.us | perl - Mojolicious@4.99
curl -L cpanmin.us | perl - Mojolicious::Plugin::I18N@0.9
curl -L cpanmin.us | perl - DBI
curl -L cpanmin.us | perl - DBD::Pg

To install the UI plugin wh_nagios (or any other UI plugin), from your opm directory as user root:

cd /usr/local/src/opm/opm-core/ui/modules
ln -s /usr/local/src/opm/opm-wh_nagios/ui wh_nagios

Then, on OPM database side, you need to create an opm user for the UI:

postgres@opm=# CREATE USER opmui WITH ENCRYPTED PASSWORD 'opmui';
postgres@opm=# SELECT * from grant_appli('opmui');

Finally, in the directory /usr/local/src/opm/opm-core/ui, copy the opm.conf-dist file to opm.conf, and edit it to suit our needs, for instance:

{
    ...
    "database" : {
        "dbname"   : "opm",
        "host"     : "127.0.0.1",
        "port"     : "5432",
        "user"     : "opmui",
        "password" : "opmui"
    },
    ...
    "plugins" : [ "wh_nagios" ]
}

This user is only needed for the connection between the UI and the database. You only have to use it in the opm.conf file

To test the web user interface quickly, you can use either morbo or hypnotoad, both installed with Mojolicious. Example with Morbo:

cd /usr/local/src/opm/opm-core/ui
morbo script/opm
[Sun Jan 31 13:45:41 2016] [debug] Reading configuration file "/usr/local/src/opm/opm-core/ui/opm.conf".
[Sun Jan 31 13:45:41 2016] [debug] Helper "url_for" already exists, replacing.
[Sun Jan 31 13:45:41 2016] [info] Listening at "http://*:3000".
Server available at http://127.0.0.1:3000.

Using hypnotoad, which suit better for production:

user:/usr/local/src/opm/ui/opm/opm-core$ hypnotoad -f script/opm

Removing -f”/code> makes it daemonize.

Configure PostgreSql services with Nagios:

cd ~
wget http://bucardo.org/downloads/check_postgres.tar.gz
cp check_postgres.pl /usr/local/nagios/libexec/
cd /usr/local/nagios/libexec/
perl ../check_postgres.pl --symlinks

cd /usr/local/nagios/etc/objects

vi pgcommands.cfg # add the postgresql commands 
vi pgservices.cfg # add the postgresql services

vi /usr/local/nagios/etc/nagios.cfg # include the path of above 2 files.

Sample Postgresql command:

define command {
command_name check_edb_bloat
command_line $USER1$/check_postgres.pl --host $HOSTADDRESS$ --dbuser=pgmonitor--dbpass=password -db postgres -p 5444 --action bloat
}

Sample Postgresql Service:

define service {
    use                     generic-service
    host_name               localhost
    service_description     Postgres bloat
    is_volatile             0
    check_period            24x7
    max_check_attempts      3
    normal_check_interval   5
    retry_check_interval    1
    contact_groups          admins
    notification_interval   120
    notification_period     24x7
    notification_options
    check_command           check_edb_bloat!3000000!9000000!flr
}

Note: OPM heavily depends on Nagios so you ought to be comfortable with nagios services and commands. To monitor postgreSql database, you need to install and configure check_postgres plugin from bucardo.

Reference: NRPE_PostgreSQL_check
monitor postgresql with nagios
Install and configure nagios for postgresql PPAS on linux

Your comments/suggestions will be highly appreciated.

No comments:

Post a Comment