Icinga

Installation des neuen Icinga Web Frontend

Einleitung

Das neue Icinga Web wird aktuell sehr stark weiterentwickelt, sodass sich diese Dokumentation unter Umständen noch ändern kann/wird. Falls Sie eine detaillierte Installationsanleitung benötigen, konsultieren Sie bitte doc/INSTALL aus dem Source-Paket. Mehr Informationen über die gesamte Architektur können Sie auf unserer Webseite nachlesen: http://www.icinga.org/architecture/ Falls Sie mehr über das Icinga Web development und die Modularchitektur wissen wollen, verfolgen Sie bitte stetig aktualisierte Einträge im Development-Wiki von Icinga Web: Icinga Wiki

  1. Voraussetzungen

    Die Pakete mysql und php5 sind installiert (mit PEAR und CLI), Icinga samt IDOUtils läuft, die Icinga-API ebenfalls, dann ab zu 2., ansonsten bitte:

    Ubuntu / Debian

     #> apt-get install php5 php5-cli php-pear php5-xmlrpc php5-xsl php5-pdo php5-ldap php5-gd php5-mysql
    [Anmerkung] Anmerkung

    Für Ubuntu gibt es kein php5-pdo- Packet, die benötigten PDO- Extensions sind in den Paketen php5 und php5-mysql enthalten!

    Fedora / RHEL / CentOS

    Stellen Sie sicher, dass Sie ein Repository bzw. Pakete für PHP 5.2.3 und PCRE 7.6 haben - RHEL/CentOS enthalten bisher lediglich PHP 5.1.6 und PCRE 6.6.

     #> yum install php php-cli php-pear php-xmlrpc php-xsl php-pdo php-ldap php-gd php-mysql
    [Anmerkung] Anmerkung

    Aktuelle Pakete für PHP und PRCE finden Sie beispielsweise unter: Les RPM de Remi oder http://www.jasonlitka.com/category/yum-repo-news/

    OpenSuSE

    Benutzen Sie yast, um die Pakete "php5", "php5-pear", "php5-xmlrpc", "php5-xsl", "php5-<rdbm>", "php5-soap", "php5-gettext", "php5-pdo", "php5-ldap", "php5-gd" und "php5-mysql" zu installieren. Die CLI ist im php5-Paket enthalten.

    [Anmerkung] Anmerkung

    Zumindest bei SLES10 SP2 fehlt die Funktion hash_hmac.

    Die Installation von Icinga mit den IDOUtils bzw. der Icinga-API ist in der Icinga-Schnellstartanleitung und dem Abschnitt über die Icinga-API beschrieben.

  2. Die Installation

    Laden Sie das Archiv herunter von http://sourceforge.net/projects/icinga/files/ oder klonen Sie von icinga-web.git, um mit der aktuellsten Version zu arbeiten:

     #> git clone git://git.icinga.org/icinga-web.git

    Extrahieren Sie das Archiv (tarball) wie folgt:

     #> tar xzvf icinga-web-1.2.tar.gz

    Wechseln Sie in das Verzeichnis:

     #> cd icinga-web

    Icinga Web stellt verschiedene configure Optionen zur Verfügung z.B.

     #> ./configure 
                            --prefix=/usr/local/icinga-web 
                            --with-web-user=www-data 
                            --with-web-group=www-data 
                            --with-web-path=/icinga-web 
                            --with-web-apache-path=/etc/apache2/conf.d 
                            --with-db-type=mysql 
                            --with-db-host=localhost 
                            --with-db-port=3306 
                            --with-db-name=icinga_web 
                            --with-db-user=icinga_web 
                            --with-db-pass=icinga_web 
                            --with-icinga-api=/usr/local/icinga/share/icinga-api
                            --with-api-type=APICON API type (default CONNECTION_IDO)
                            --with-api-subtype=TYPE DB driver or network connection
                            --with-api-host=HOST Host to connect (DB or other) (default localhost)
                            --with-api-port=PORT Port for connection (default 3306)
                            --with-api-socket=PATH Path to socket (default none)
    [Anmerkung] Anmerkung

    Bitte beachten Sie, dass Sie hier die Icinga Web-Datenbank konfigurieren, und nicht die Icinga-IDOUtils-Datenbank! User- und Gruppenname des Web-Prozesses sind abhängig von der verwendeten Distribution.

    Alle Konfigurationsmöglichkeiten sehen Sie mit:

     #> ./configure --help
    [Anmerkung] Anmerkung

    Falls Sie keine Optionen angeben, erwartet der Installer die Icinga API in /usr/local/share/icinga-api.

    Ohne weitere Optionen wird das Icinga Webinterface mit:

     #> ./configure
     #> make install

    unter /usr/local/icinga-web installiert.

    Installation der neuen Apache Konfiguration

    #> make install-apache-config

    Wenn Sie das nicht möchten, können Sie das bisherige Verfahren nutzen, durch die Eingabe von:

    #> make install-javascript

    Dies installiert die bisherigen Symlinks.

    Erzeugen des Installationsberichtes:

    #> make install-done
    
    Installation of icinga-web succeeded. 
    Please check the new Apache2 configuration (etc/apache2/icinga-web.conf).

    Passwort zurücksetzen:

    #> make icinga-reset-password

    Setzt das Passwort für jeden Account auf icinga-web zurück.

  3. PHP-Abhängigkeiten

    Bitte prüfen Sie die PHP-Abhängigkeiten mit:

     #> make testdeps

    Alle "require"-Tests sollten erfolgreich sein. Eventuell müssen Sie die php.ini anpassen:

    Die "magic_quote_gpc" in der Apache- und der CLI-php.ini auf "Off" setzen! Bitte beachten Sie, dass die Pfade von der Distribution abhängig sind.

     #> vi /etc/php5/apache/php.ini
       magic_quotes_gpc = off
    
     #> vi /etc/php5/cli/php.ini
       magic_quotes_gpc = off
    [Anmerkung] Anmerkung

    Beide Dateien müssen vorhanden sein, sonst erhalten Sie eine Agavi-Meldung, weil der Default von magic_quotes_gpc "ON" ist.

  4. Datenbank-Installation

    Icinga Web benötigt eine eigene Datenbank z.B. icinga_web. Sie können die Datenbank von IDOUtils mitverwenden, dies wird allerdings nicht empfohlen, um bei Upgrades keine Probleme zu haben.

    Anlegen des Datenbankbenutzers:

    Der Benutzer muss mindestens diese Privilegien haben: SELECT, UPDATE, INSERT, DELETE.

     SQL> GRANT USAGE ON *.* TO 'icinga_web'@'localhost' IDENTIFIED BY 'icinga_web';
    
     SQL> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON icinga_web.* TO 'icinga_web'@'localhost';
    
     SQL> FLUSH PRIVILEGES;

    MySQL

     #> mysql -u root -p
      
     mysql> GRANT USAGE ON icinga_web.* TO 'icinga_user'@'localhost' IDENTIFIED BY 'icinga_pass' WITH MAX_QUERIES_PER_HOUR 0      MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
       
            GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON icinga_web.* TO 'icinga_user'@'localhost';
     
            FLUSH PRIVILEGES ;
    
            quit

    Anlegen der Datenbank

    Icinga Web bringt Doctrine mit, womit in Zukunft die Datenbank verwaltet wird. Mittels 'make' kann diese initialisiert oder gelöscht werden.

     #> make db-initialize      - legt eine Icinga web Datenbank an und füllt diese mit initialen Werten
     #> make db-drop            - löscht die komplette Datenbank, inklusive Securityabfrage um ungewolltes Löschen zu verhindern
     #> make db-doc2sql         - falls Sie SQL scripts beispielsweise für Packaging oder manuelles Setup benötigen, können Sie diese Option verwenden um die SQL scripts aus Doctrine zu extrahieren
    

    Um die Datenbankanlege-Befehle nutzen zu können, müssen Sie dem Benutzer der diese DB Befehle ausführen soll, auch die entsprechenden Privilegien zuordnen. Falls derjenige Benutzer, der für das Icinga Web in configure vorgesehen wurde, zu wenig Berechtigungen hat, gibt es in 'make' eine Abfrage, ob Sie einen anderen Benutzer mit mehr Privilegien verwenden wollen. Falls dies nicht funktioniert, sollten sie etc/build.properties editieren und einen root Benutzer einfuegen

    Das Installieren der Datenbank funktioniert mittels:

     #> make db-initialize

    Manuelles Anlegen der Datenbank

    Sofern Sie die Datenbank manuell installieren wollen z.B. für Package building, können Sie mit diesem Befehl die SQL Scripts extrahieren

     #> make db-doc2sql

    und dann diese in die frisch angelegte Datenbank importieren.

  5. Icinga-Web Konfiguration

    Im Normalfall können Sie die Datenbankeinstellungen während configure vornehmen. Sollten Sie diese allerdings anpassen wollen oder nachsehen wollen im Fehlerfall, öffnen sie folgende Datei mit einem Editor Ihrer Wahl.

     #> vi app/config/databases.xml
     <databases default="icinga_web">
    
                            <database name="icinga_web" class="AgaviDoctrineDatabase">
    
                                    <!--
    
                                            Doctrine dsn strings:
    
                                            http://www.doctrine-project.org/documentation/manual/1_1/en/introduction-to-connections
    
                                    -->
    
                                    <ae:parameter name="dsn">mysql://icinga_web:icinga_web@127.0.0.1:3306/icinga_web</ae:parameter>
    
                                    <!-- Generic credentials  -->
    
                                    <!-- <ae:parameter name="username">icinga_web</ae:parameter> -->
    
                                    <!-- <ae:parameter name="password">icinga_web</ae:parameter> -->
    
                                    <!-- DB encoding type -->
    
                                    <ae:parameter name="charset">utf8</ae:parameter>
    
                                    <!--
    
                                            Doctrine_Manager configuration
    
                                    -->
    
                                    <ae:parameter name="manager_attributes">
    
                                            <!-- This allows lazy loading of the models -->
    
                                            <ae:parameter name="Doctrine_Core::ATTR_MODEL_LOADING">CONSERVATIVE</ae:parameter>
    
                                    </ae:parameter>
    
                                    <!-- The path to our models -->
    
                                    <ae:parameter name="load_models">%core.module_dir%/AppKit/lib/database/models/generated</ae:parameter>
    
                                    <ae:parameter name="models_directory">%core.module_dir%/AppKit/lib/database/models</ae:parameter>
    
                            </database>

    Konfiguration von Icinga API Parametern

    Diese Einstellungen werden direkt in Icinga Web vorgenommen das diese Informationen dann entsprechend aufbereitet an die Icinga API weitergibt. Öffnen Sie app/modules/Web/config/icinga-io.xml um die IcingaApi factories zu sehen: IcingaData und IcingaCommand.

     #> vi app/modules/Web/config/icinga-io.xml

    [Anmerkung] Anmerkung

    Optional: Ihre spezifischen Icinga Verbindungseinstellungen, wie die API-Anmeldeinformationen, können Sie vornehmen in app / modules / Web / config / icinga-io.site.xml. Diese Informationen bleiben während eines Update- Prozesses erhalten.

    In IcingaData werden die Parameter für die Icinga API festgelegt, um beispielsweise die Icinga IDOUtils Datenbank als Datenquelle einzustellen.

    [Anmerkung] Anmerkung

    Bitte beachten Sie, dass Sie zuvor IDOUtils installieren müssen (so wie im Icinga IDOUtils Quickstart hier beschrieben).

                                    <!--
                                            See doc/icinga-api-types.txt for options
                                    --/>
                                    <setting name="api.interfaces.data"/>
                                            <!-- IcingaApi connection interface --/>
                                            <ae:parameter name="api_type"/>IcingaApi::CONNECTION_IDO</ae:parameter/>
    
                                            <!-- Suits for all interfaes --/>
                                            <ae:parameter name="config_type"/>mysql</ae:parameter/>
                                            <ae:parameter name="config_host"/>localhost</ae:parameter/>
                                            <ae:parameter name="config_port"/>3306</ae:parameter/>
    
                                            <!-- ###BEGIN_CONNECTION_IDO### --/>
                                            <!-- Database specific (IcingaApi::CONNECTION_IDO) --/>
                                            <ae:parameter name="config_database"/>icinga</ae:parameter/>
                                            <ae:parameter name="config_user"/>icinga</ae:parameter/>
                                            <ae:parameter name="config_password"/>icinga</ae:parameter/>
                                            <ae:parameter name="config_table_prefix"/>icinga_</ae:parameter/>
                                            <!-- ###END_CONNECTION_IDO### --/>
    
                                    </setting/>

    In IcingaCommand können Sie einstellen, wie Befehle an die Icinga Core command pipe gesendet werden - lokal or remote via SSH. Abhängig davon, ob die jeweilige Option 'enabled' ist, wird diese verwendet/nicht verwendet. Standardmäßig wird die lokale Pipe verwendet.

                                    <setting name="api.interfaces.command">
                                            <ae:parameter name="pipe1">
                                                    <ae:parameter name="type">IcingaApi::COMMAND_PIPE</ae:parameter>
                                                    <ae:parameter name="enabled">true</ae:parameter>
    
                                                    <ae:parameter name="pipe">/usr/local/icinga/var/rw/icinga.cmd</ae:parameter>
    
                                                    <ae:parameter name="instance">default</ae:parameter>
                                                    <ae:parameter name="broadcast">false</ae:parameter>
                                            </ae:parameter>
    
                                            <!--
    
                                                    * This examples show how to send commands to specific instances
                                                    * Use 'instance' to send commands to this instance only
                                                    * Use 'brodcast' to send all commands to this instances!
    
                                            <ae:parameter name="pipe1-instance-test">
                                                    <ae:parameter name="type">IcingaApi::COMMAND_PIPE</ae:parameter>
                                                    <ae:parameter name="enabled">true</ae:parameter>
    
                                                    <ae:parameter name="pipe">/usr/local/icinga/var/rw/icinga.cmd</ae:parameter>
    
                                                    <ae:parameter name="instance">test</ae:parameter>
                                                    <ae:parameter name="broadcast">false</ae:parameter>
                                            </ae:parameter>
    
                                            <ae:parameter name="pipe1-broadcast">
                                                    <ae:parameter name="type">IcingaApi::COMMAND_PIPE</ae:parameter>
                                                    <ae:parameter name="enabled">false</ae:parameter>
    
                                                    <ae:parameter name="pipe">/usr/local/icinga/var/rw/icinga.cmd</ae:parameter>
    
                                                    <ae:parameter name="instance"></ae:parameter>
                                                    <ae:parameter name="broadcast">true</ae:parameter>
                                            </ae:parameter>
    
                                            -->
    
                                            <ae:parameter name="ssh1">
                                                    <ae:parameter name="type">IcingaApi::COMMAND_SSH</ae:parameter>
                                                    <ae:parameter name="enabled">false</ae:parameter>
    
                                                    <ae:parameter name="ssh_bin">/usr/bin/ssh</ae:parameter>
                                                    <ae:parameter name="ssh_user">icinga</ae:parameter>
                                                    <ae:parameter name="ssh_host">127.0.0.15</ae:parameter>
                                                    <ae:parameter name="ssh_port">22</ae:parameter>
                                                    <ae:parameter name="ssh_timeout">20</ae:parameter>
                                                    <ae:parameter name="ssh_pipe">/usr/local/icinga/var/rw/icinga.cmd</ae:parameter>
    
                                                    <ae:parameter name="instance">default</ae:parameter>
                                                    <ae:parameter name="broadcast">false</ae:parameter>
                                            </ae:parameter>
                                    </setting> 
    [Anmerkung] Anmerkung

    Nachdem Sie Änderungen an diesen Konfigurationen vorgenommen haben, müssen Sie den Cache leeren!

     #> rm -rf app/cache/config/*.php
  6. Apache-Konfiguration

    Voraussetzungen:

    • mod_rewrite, vielleicht müssen Sie einen Verweis erstellen:

     #> ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

    Bei OpenSuSE können Sie das Modul mit "a2enmod rewrite" aktivieren. Falls das nicht funktioniert, gibt es in der Datei /etc/sysconfig/apache2 die Zeile "APACHE_MODULES=...", der das Modul "rewrite" hinzugefügt werden muss.

    Editieren Sie die .htaccess unter /usr/local/icinga-web/pub und ändern Sie die RewriteBase (ab Zeile 14):

     DirectoryIndex index.php
    
     Options -MultiViews -Indexes +FollowSymLinks
     Order allow,deny
     Allow from all
    
     <IfModule mod_rewrite.c>
        RewriteEngine On
    
        # This depends on your path
        # on independent hosts the base is '/'
        RewriteBase /icinga-web/
    
            # If the requested URL does not exist (it's likely an agavi route),
            # pass it as path info to index.php, the Agavi dispatch script.
            RewriteRule ^$ index.php?/ [QSA,L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule (.*) index.php?/$1 [QSA,L]
     </IfModule>
    
     <IfModule mod_deflate.c>
            SetOutputFilter DEFLATE
    
            BrowserMatch ^Mozilla/4 gzip-only-text/html
            BrowserMatch ^Mozilla/4\.0[678] no-gzip
    
            BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
            BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    
            Header append Vary User-Agent env=!dont-vary
     </IfModule>
    
     <IfDefine APACHE2>
            AcceptPathInf  On
     </IfDefine>
    
     #<IfModule mod_auth_basic.c>
     #       AuthType Basic
     #       AuthName "My http basic auth realm"
     #       AuthUserFile /path/to/my/htusers
     #       require valid-user
     #</IfModule>

    Bitte wechseln Sie in das Konfigurationsverzeichnis Ihres Webservers. Überprüfen Sie, ob die, mit make install-apache-config erstellte Konfiguration Ihren Anforderungen entspricht, oder erstellen Sie noch einen neuen Alias im Konfigurationsverzeichnis des Webservers (hier in der icinga-web.conf):

    #> vi /etc/apache2/conf.d/icinga-web.conf
    #>
    #> icinga-web apache configuration
    #> - Enable all options .htaccess
    #> - Add extjs library to alias
    #>
    
    Alias /icinga-web/js/ext3 /usr/local/icinga-web/lib/ext3
    Alias /icinga-web /usr/local/icinga-web/pub
    <Directory /usr/local/icinga-web/lib/ext3>
        Order allow,deny
        Allow from all
    </Directory>
       Alias /icinga-web /usr/local/icinga-web/pub
      <Directory /usr/local/icinga-web/pub>
            AllowOverride All
      </Directory>

    Leeren Sie den Cache:

     #> rm /usr/local/icinga-web/app/cache/config/*.php

    und starten Sie den Webserver neu:

     #> service apache2 restart

    bzw.

     #> /etc/init.d/apache2 restart

    oder

     #> /etc/init.d/httpd restart
  7. Testen

    [Anmerkung] Anmerkung

    Bitte achten Sie darauf, dass Ihre Datenbank, Apache, IDOUtils und Icinga gestartet sind!

    Öffnen Sie im Webbrowser http://localhost/icinga-web. Überprüfen Sie, ob das Webinterface ohne Fehler "exceptions" startet, und loggen Sie sich mit dem User 'root' und dem Passwort 'password' ein.

    Viel Spaß :-)

  8. Test &Fehler?

    Diese Sammlung beinhaltet einige nützliche Informationen, wie Sie Fehler finden und lösen können. Ebenso wird darauf hingewiesen, welche Informationen Sie im Fehlerfall angeben sollen, wenn Sie eine Frage auf den Mailinglisten oder auf http://www.icinga-portal.org stellen.

    * Geben Sie immer die verwendete Version an - tar.gz oder GIT?

    * Browser, Version

    * Falls das Problem mit der Datenquelle besteht: Ausführliche Informationen zu API, IDOUtils, Core (Version, Debug Logs).

    Wo können Sie nachsehen?

    * Apache Error Logs, PHP Errors, PHP Dateien können nicht gefunden werden

    * /var/log/messages, /path/to/icinga/var/icinga.log

    Änderungen an der Icinga Web-Konfiguration (z.B. API/IDOUtils-Einstellungen geändert) werden nicht aktualisiert?

    * Löschen Sie den Konfigurationscache in app/cache/config/*.php

    Icinga Web zeigt eine leere Seite?

    * Apache Errors Logs => mod_rewrite enabled, PHP-Abhängigkeiten ok? 'make testdeps'

    * .htaccess/VHost-Konfiguration => Pfade nicht korrekt? Icinga-Web zeigt keine Daten?

    * Sehen Sie in den Apache Error Logs nach, ob dort ein Fehler bezüglich fehlender IcingaApi.php auftritt => Überprüfen Sie anhand des Installationguides, ob Sie die Icinga-API korrekt installiert haben.

    * Datenbankzugriff verweigert => Überprüfen Sie, ob die Datenbankeinstellungen für Icinga Web korrekt sind.

    IDOUtils Datenbank wird nicht gefüllt?

    * "Error writing to data sink" => Überprüfen Sie die IDOUtils (ido2db runs 2x - ok?), ido2db.cfg debug_level=-1, debug_verbosity=2, restarten Sie IDOUtils und suchen Sie Fehler in ido2db.debug

    * Keine Daten vorhanden => Überprüfen Sie icinga.log, ob IDOMOD zu Beginn geladen wird. Falls nicht, enablen Sie das Event Broker Modul in icinga.cfg so wie im Icinga Core im IDOUtils Quickstart Guide beschrieben.

    * IDOUtils DB-Schema ist die aktuellste Version? => Falls nicht, überprüfen Sie mögliche Upgrades anhand der Docs dafür.

    * Sockets sind korrekt definiert? => Unix oder TCP Socket, TCP wahlweise mit oder ohne SSL

    Testing the Web:

     #> cd etc/tests/
     #> php icingaWebTesting.php
    [Anmerkung] Anmerkung

    Nicht vergessen - Ändern von PHP-Einstellungen in der php.ini erfordert einen Apache reload/restart!

    * PHP Fatal error: Allowed memory size of ... bytes exhausted (tried to allocate ... bytes) => Überprüfen Sie Ihre php.ini (apache2 und cli) und setzen Sie den Wert memory_limit auf 128M oder höher.

    * Keine Verbindung zur API. The API Connector returned the following message: getConnection failed: Database connection failed: SQLSTATE[28000] [1045] Access denied for user 'icinga'@'localhost' (using password: YES))

    => Überprüfen Sie Ihre IDOUtils DB-Referenzen in der ido2db.cfg und fügen Sie diese in app/module/Web/config/module.xml als API-Referenzen ein. Ab Icinga Web1.0.3 können die Werte direkt während des configure gesetzt werden.

    * touch: cannot touch `/usr/local/icinga-web/.../cache/testfile.txt': Permission denied

    => Die Konfiguration in den xml-Dateien wird vom Framework ge-'pre-cached'. Daher müssen spezielle Berechtigungen für die Caching-Verzeichnisse gesetzt werden. Durch die Ausführung von icingaWebTesting.php in etc/tests können die richtigen Berechtigungen automatisch gesetzt werden.

    * PHP Fatal error: Uncaught exception '...' with message 'Couldn't locate driver named mysql' => Stellen Sie sicher, dass php pdo installiert und geladen ist, auch wenn testdeps sagt, dass alles in Ordnung ist.

    * Das Login wird nicht angezeigt => Aktivieren Sie short_open_tag in Ihrer php.ini

    => Editieren Sie open_basedir in Ihrer php.ini und fügen Sie die Installationsverzeichnisse von Icinga Web und von Icinga API (z.B. /usr/local/icinga/share/) hinzu.

    * Leeres Icinga Web? => Wenn mod_rewrite aktiviert ist und 'index.php' erscheint in der angefragten URL, dann funktioniert das Portal nicht. Entfernen Sie index.php aus Ihrer URL und alles sollte funktionieren

    * Die Ergebnisse in den Status Cronks passen nicht zu Ihrer Konfiguration? => Überprüfen Sie in Ihrem Backend, d.h. IDOUtils DB, welche Werte für die Status-Tabellen selektiert werden.

    * Keine Daten in den Cronks ? => Überprüfen Sie ob alle Berechtigungen korrekt gesetzt sind, insbesondere von log/

    Sofern Sie Fragen oder Updates haben, zögern Sie bitte nicht, uns diese mitzuteilen! :-)