====== Installing the Nagvis addon ======
Nagvis provides powerful visual representation of status of monitored devices.
Offical site: [[http://www.nagvis.org/]]
===== Requirement =====
Graphviz package is needed:
yum install graphviz graphviz-gd graphviz-php
The graphviz package in CentOS 5 is not up to date for this installation.
===== Install =====
Source used: nagvis-1.5.10 from http://www.nagvis.org/downloads
Extract and run the ''install.sh'' script to install it:
tar zxvf nagvis-1.5.10.tar.gz
cd cd nagvis-1.5.1
./install.sh -B /usr/sbin/nagios -m /usr/local/bin/ndo2db
./install.sh -B /usr/sbin/nagios -m /usr/local/bin/ndo2db
+------------------------------------------------------------------------------+
| Welcome to NagVis Installer 0.2.17 |
+------------------------------------------------------------------------------+
| This script is built to facilitate the NagVis installation and update |
| procedure for you. The installer has been tested on the following systems: |
| - Debian Etch, Hardy (4.0, 5.0) |
| - Ubuntu Hardy, Intrepid, Jaunty, Karmic, Lucid (8.04 to 10.04) |
| - SuSE Linux Enterprise Server 10 and 11 |
| |
| Similar distributions to the ones mentioned above should work as well. |
| That (hopefully) includes RedHat, Fedora, CentOS, OpenSuSE |
| |
| If you experience any problems using these or other distributions, please |
| report that to the NagVis team. |
+------------------------------------------------------------------------------+
| Do you want to proceed? [y]:
+------------------------------------------------------------------------------+
| Starting installation of NagVis 1.5.10 |
+------------------------------------------------------------------------------+
| OS : CentOS release 5.7 (Final) |
| Perl: 5.008008 |
| |
+--- Checking for tools -------------------------------------------------------+
| Using packet manager /bin/rpm found |
| |
+--- Checking paths -----------------------------------------------------------+
| Please enter the path to the nagios base directory [/usr/sbin/nagios]: /usr/share/nagios
| nagios path /usr/share/nagios found |
| Please enter the path to NagVis base [/usr/sbin/nagvis]: /usr/share/nagvis
| |
+--- Checking prerequisites ---------------------------------------------------+
| Nagios Core 3.2.2 found |
| PHP 5.1 found |
| PHP Module: gd php found |
| PHP Module: mbstring php found |
| PHP Module: gettext compiled_in found |
| PHP Module: session compiled_in found |
| PHP Module: xml php found |
| Apache mod_php found |
| Checking Backends. (Available: mklivestatus,ndo2db,ido2db,merlinmy) |
| Do you want to use backend mklivestatus? [y]: n
| Do you want to use backend ndo2db? [n]: y
| Do you want to use backend ido2db? [n]: n
| Do you want to use backend merlinmy? [n]: n
| /usr/local/bin/ndo2db (ndo2db) found |
| PHP Module: mysql php found |
| Graphviz 2.12 found |
| Error: Version >= 2.14 needed
| Graphviz Module dot 2.12 found |
| Error: Version >= 2.14 needed
| Graphviz Module neato 2.12 found |
| Error: Version >= 2.14 needed
| Graphviz Module twopi 2.12 found |
| Error: Version >= 2.14 needed
| Graphviz Module circo 2.12 found |
| Error: Version >= 2.14 needed
| Graphviz Module fdp 2.12 found |
| Error: Version >= 2.14 needed
| |
+--- Trying to detect Apache settings -----------------------------------------+
| Please enter the web path to NagVis [/nagvis]:
| Please enter the name of the web-server user [apache]:
| Please enter the name of the web-server group [apache]:
| create Apache config file [y]:
| |
+--- Checking for existing NagVis ---------------------------------------------+
| |
+------------------------------------------------------------------------------+
| Summary |
+------------------------------------------------------------------------------+
| NagVis home will be: /usr/share/nagvis |
| Owner of NagVis files will be: apache |
| Group of NagVis files will be: apache |
| Path to Apache config dir is: /etc/httpd/conf.d |
| Apache config will be created: yes |
| |
| Installation mode: install |
| |
| Do you really want to continue? [y]:
+------------------------------------------------------------------------------+
| Starting installation |
+------------------------------------------------------------------------------+
| Creating directory /usr/share/nagvis... done |
| Creating directory /usr/share/nagvis/var... done |
| Creating directory /usr/share/nagvis/var/tmpl/cache... done |
| Creating directory /usr/share/nagvis/var/tmpl/compile... done |
| Creating directory /usr/share/nagvis/share/var... done |
| Copying files to /usr/share/nagvis... done |
| Creating main configuration file... done |
| adding base="/usr/share/nagvis" done |
| setting backend to ndomy_1 done |
| Creating web configuration file... done |
| Setting permissions for web configuration file... done |
| |
| |
| |
+--- Setting permissions... ---------------------------------------------------+
| /usr/share/nagvis/etc/nagvis.ini.php-sample done |
| /usr/share/nagvis/etc done |
| /usr/share/nagvis/etc/maps done |
| /usr/share/nagvis/etc/maps/* done |
| /usr/share/nagvis/etc/automaps done |
| /usr/share/nagvis/etc/automaps/* done |
| /usr/share/nagvis/share/userfiles/images/maps done |
| /usr/share/nagvis/share/userfiles/images/maps/* done |
| /usr/share/nagvis/share/userfiles/images/shapes done |
| /usr/share/nagvis/share/userfiles/images/shapes/* done |
| /usr/share/nagvis/var done |
| /usr/share/nagvis/var/* done |
| /usr/share/nagvis/var/tmpl done |
| /usr/share/nagvis/var/tmpl/cache done |
| /usr/share/nagvis/var/tmpl/compile done |
| /usr/share/nagvis/share/var done |
| |
+------------------------------------------------------------------------------+
| Installation complete |
| |
| You can safely remove this source directory. |
| |
| For later update/upgrade you may use this command to have a faster update: |
| ./install.sh -n /usr/share/nagios -p /usr/share/nagvis -B /usr/sbin/nagios -b ndo2db -u apache -g apache -w /etc/httpd/conf.d -a y
| |
| What to do next? |
| - Read the documentation |
| - Maybe you want to edit the main configuration file? |
| Its location is: /usr/share/nagvis/etc/nagvis.ini.php |
| - Configure NagVis via browser |
| |
| - Initial admin credentials: |
| Username: nagiosadmin |
| Password: nagiosadmin |
+------------------------------------------------------------------------------+
[root@nagios nagvis-1.5.10]#
===== Configuration =====
Edit the ini file ''/usr/share/nagvis/etc/nagvis.ini.php'' to enable access to the ndo2db database:
[backend_ndomy_1]
backendtype="ndomy"
; database name for NDO-db
dbname="nagios"
; username for NDO-db
dbuser="nagios"
; password for NDO-db
dbpass=""
Edit the web servers's ''php.ini'' to make sure ''date.timezone'' is set. Example for Hong Kong:
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Asia/Hong_Kong"
===== Output bug fix =====
For version 1.4.6, the file ''nagvis/includes/classes/GlobalPage.php'' has a BOM embedded in the beginning and causes problem. Please create new using cut and paste.
Attached here the file content:
*/
class GlobalPage {
protected $CORE;
// arrays for the header
private $title;
private $cssIncludes;
private $jsIncludes;
private $extHeader;
// String for the body
private $body;
// logged in user
private $user;
private $languageRoot;
/**
* Class Constructor
*
* @param GlobalCore $CORE
* @param Array $prop Array('name'=>'myform','id'=>'myform','method'=>'POST','action'=>'','onSubmit'=>'','cols'=>'2','enctype'=>''
* @author Lars Michelsen
*/
public function __construct($CORE, $givenProperties=Array()) {
$this->CORE = $CORE;
// Define default Properties here
$defaultProperties = Array('title'=>'NagVis Page',
'cssIncludes' => Array($this->CORE->MAINCFG->getValue('paths','htmlbase').'/nagvis/includes/css/style.css'),
'jsIncludes' => Array(),
'extHeader' => '',
'allowedUsers' => Array('EVERYONE'),
'languageRoot' => 'nagvis');
$prop = array_merge($defaultProperties,$givenProperties);
$this->body = '';
$this->title = $prop['title'];
$this->cssIncludes = $prop['cssIncludes'];
$this->jsIncludes = $prop['jsIncludes'];
$this->allowedUsers = $prop['allowedUsers'];
$this->languageRoot = $prop['languageRoot'];
$this->extHeader = $prop['extHeader'];
// Append additional header information
$this->extHeader .= '';
$this->extHeader .= ''.$prop['title'].'';
// Hint for iphone scaling (not verified - have no iphone)
// http://www.nagios-portal.org/wbb/index.php?page=Thread&threadID=13885
$this->extHeader .= '';
$this->user = getUser();
$this->CORE->MAINCFG->setRuntimeValue('user',$this->user);
self::checkPreflight();
}
/**
* Checks for valid php version
*
* @param Boolean $printErr
* @return Boolean Is Check Successful?
* @author Lars Michelsen
*/
private function checkPHPVersion($printErr) {
if(version_compare(PHP_VERSION, CONST_NEEDED_PHP_VERSION, ">=")) {
return TRUE;
} else {
if($printErr) {
new GlobalFrontendMessage('ERROR', $this->CORE->LANG->getText('wrongPhpVersion','CURRENT_VERSION~'.PHP_VERSION.',NEEDED_VERSION~'.CONST_NEEDED_PHP_VERSION));
}
return FALSE;
}
}
/**
* Checks for logged in Users
*
* @param Boolean $printErr
* @return Boolean Is Check Successful?
* @author Lars Michelsen
*/
private function checkUser($printErr) {
if($this->user != '') {
return TRUE;
} else {
if($printErr) {
new GlobalFrontendMessage('ERROR', $this->CORE->LANG->getText('noUser'));
}
return FALSE;
}
}
/**
* Checks for valid Permissions
*
* @param String $allowed
* @param Boolean $printErr
* @return Boolean Is Check Successful?
* @author Lars Michelsen
*/
private function checkPermissions(&$allowed,$printErr) {
if(isset($allowed) && !in_array('EVERYONE', $allowed) && !in_array($this->CORE->MAINCFG->getRuntimeValue('user'), $allowed)) {
if($printErr) {
new GlobalFrontendMessage('ERROR', $this->CORE->LANG->getText('permissionDenied','USER~'.$this->CORE->MAINCFG->getRuntimeValue('user')));
}
return FALSE;
} else {
return TRUE;
}
return TRUE;
}
/**
* Does the Prflight checks before building the page
*
* @return Boolean Is Check Successful?
* @author Lars Michelsen
*/
private function checkPreflight() {
$ret = TRUE;
$ret = $ret & $this->checkUser(TRUE);
$ret = $ret & $this->checkPHPVersion(TRUE);
$ret = $ret & $this->checkPermissions($this->allowedUsers,TRUE);
return $ret;
}
/**
* Adds one or more elements (lines) to the Body Array
*
* @param String/Array $lines String or Array with HTML Code
* @return Boolean TRUE
* @author Lars Michelsen
*/
public function addBodyLines($lines) {
if(is_array($lines)) {
$lines = implode("\n", $lines);
}
$this->body .= $lines;
return TRUE;
}
/**
* Gets the Header of the HTML Page
*
* @return String HTML Code of the Header
* @author Lars Michelsen
*/
private function getHeader() {
return $this->getExtHeader().$this->getJsIncludes().$this->getCssIncludes();
}
/**
* Gets the Body of the HTML Page
*
* @return String HTML Code of the Header
* @author Lars Michelsen
*/
private function getBody() {
$ret = $this->body;
return $ret;
}
/**
* Gets the lines of extended header information
*
* @return String HTML Code
* @author Lars Michelsen
*/
private function getExtHeader() {
return $this->extHeader;
}
/**
* Gets the lines of javascript inclusions
*
* @return String HTML Code
* @author Lars Michelsen
*/
protected function getJsIncludes() {
$sRet = '';
if(count($this->jsIncludes) > 0) {
foreach($this->jsIncludes AS $var => &$val) {
$sRet .= '';
}
}
return $sRet;
}
/**
* Gets the lines of css file inclusions
*
* @return String HTML Code
* @author Lars Michelsen
*/
private function getCssIncludes() {
$sRet = '';
if(count($this->cssIncludes) > 0) {
foreach($this->cssIncludes AS $var => &$val) {
$sRet .= '';
}
}
return $sRet;
}
/**
* Builds the HTML Page
*
* @return String HTML Code
* @author Lars Michelsen
*/
private function buildPage() {
$ret = '';
$ret .= ''."\n";
$ret .= ''."\n";
$ret .= $this->getHeader();
$ret .= ''."\n";
$ret .= $this->getBody();
$ret .= '';
return $ret;
}
/**
* Prints the complete HTML Page
*
* @author Lars Michelsen
*/
public function printPage() {
echo $this->buildPage();
if (DEBUG&&DEBUGLEVEL&4) debugFinalize();
// printing the page is the end of everything else - good bye! ;-)
exit;
}
/**
* Parses given Js code
*
* @param String $js Javascript code to parse
* @return Array Html
* @author Lars Michelsen
*/
public function parseJs($js) {
$ret = '';
if($js != '') {
$ret .= "";
}
return $ret;
}
/**
* Resizes the window to individual calculated size
*
* @param Int $x X-Coordinates
* @param Int $y Y-Coordinates
* @return Array JS Code
* @author Lars Michelsen
*/
public function resizeWindow($x,$y) {
$ret = Array('window.resizeTo('.$x.','.$y.')');
return $ret;
}
}
?>
===== Access URL =====
Open the following link to the main page:\\
''http:///nagios/nagvis/nagvis/index.php''
Open the following to create new maps:\\
''http:///nagios/nagvis/wui/index.php''
====== Updates for 1.5.1 ======
Quick installation:
# cd extracted source
./install.sh -n /usr/share/nagios -p /usr/share/nagvis -B /usr/sbin/nagios -b ndo2db -u apache -g apache -w /etc/httpd/conf.d -a y
The authentication is changed. A SQLite database is used to store user accounts and permissions.
The default user created is **nagiosadmin** with //Administrators// rights, and password: **nagiosadmin**.
To login Nagvis after installation, edit ''nagvis.ini.php'':
logonmodule="LogonEnv"
logonenvvar="REMOTE_USER"
And in ''/etc/httpd/conf.d/nagvis.conf'', enable:
AuthName "NagVis Access"
AuthType Basic
AuthUserFile /etc/nagios/htpasswd.users
Require valid-user
Of course, the ''/etc/nagios/htpasswd.users'' must have an entry for **nagiosadmin**.
That way, after openning the nagvis url and login as **nagiosadmin**, you can open the user manager interface
to add more users and set their roles:
{{:nagios:nagvis-user1.png|}}