Icinga2 è un potente sistema di monitoraggio e, se utilizzato in un modello master-client, può sostituire la necessità di controlli di monitoraggio basati su NRPE. Il modello master-client è più sicuro per vari motivi . Inoltre, consente un monitoraggio più distribuito consentendo la modifica dei controlli su un server e la propagazione ad altri. Fornisce inoltre una posizione centralizzata per le modifiche.
Ad esempio: supponiamo che tu abbia 4 diversi server Web con bilanciamento del carico. Se sai che sta per sorgere un picco di carico (forse una vendita o qualcosa per cui prevedi molte attività), potresti voler aumentare i livelli a cui un elevato utilizzo della CPU avvisa gli amministratori di sistema. Se stai utilizzando i controlli NRPE, dovrai accedere a ciascun server e modificare il /etc/nrpe.d/common_commands.cfg
documento su ciascuno di essi. Nel modello master-client, puoi semplicemente modificare le loro definizioni host nella /etc/icinga2/repository.d/hosts/
cartella, quindi ricaricare Icinga. I controlli si propagheranno su ciascun server e verranno raccolti automaticamente. È inoltre possibile aggiungere controlli molto facilmente modificando i /etc/icinga2/repository.d/services/
file e questi si propagheranno automaticamente e verranno riconosciuti, purché i plug-in esistano sui server client.
Prerequisiti
- Un'istanza del server con Icinga2 e Icingaweb2 già installata e configurata ( istruzioni ) denominata
icinga2master.example.com
.
- Una nuova istanza del server Vultr CentOS 6 o 7 che si desidera monitorare con nome
icinga2client.example.com
.
- Accesso al Sudo.
Alcune di queste guide rispecchieranno le istruzioni di installazione sopra elencate, ma ciò deve essere fatto sul computer client e non sul server.
Passaggio 1: aggiornare il sistema
Aggiungere il repository "ICINGA" al sistema client per installare i pacchetti Icinga.
sudo cat > /etc/yum.repos.d/ICINGA-release.repo << 'EOF'
[icinga-stable-release]
name=ICINGA (stable release for epel)
baseurl=http://packages.icinga.org/epel/$releasever/release/
enabled=1
gpgcheck=1
gpgkey=http://packages.icinga.org/icinga.key
EOF
Passaggio 2: installare i pacchetti richiesti
Installa i pacchetti richiesti.
# CentOS 6
sudo yum -y install icinga2 mysql-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli
# CentOS 7
sudo yum -y install icinga2 mariadb-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli
CentOS 7 utilizza MariaDB invece di MySQL, quindi i pacchetti necessari sono leggermente diversi. Avviare i servizi e impostarli per l'avvio all'avvio.
sudo chkconfig icinga2 on
sudo service icinga2 start
Impostare il servizio MySQL per l'avvio all'avvio e avviarlo ora in modo che possiamo proteggerlo.
# CentOS 6
sudo chkconfig mysqld on
sudo service mysqld start
#CentOS 7
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service
Proteggi l'installazione di MySQL / MariaDB. Sia CentOS 6 che 7 utilizzano lo stesso comando.
sudo mysql_secure_installation
Durante il processo, rispondi alle domande come mostrato:
Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: $newRootPassword
Re-enter new password: $newRootPassword
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Prendi nota di $newRootPassword
come ne avrai bisogno più volte, ed è un dolore da resettare.
Passaggio 3: impostare il database
È necessario creare il icinga
nome utente e importare lo schema nel database. Ciò avviene allo stesso modo su CentOS 6 e 7.
sudo mysql -u root -p
>CREATE DATABASE icinga;
>GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO 'icinga'@'localhost' IDENTIFIED BY '$someIcingaPassword';
>exit
Successivamente, importa lo schema nel database che hai appena creato.
sudo mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql
Dovrai inserire la $newRootPassword
password MySQL / MariaDB che hai usato durante il mysql_secure_installation
comando sopra, non quella $someIcingaPassword
che hai appena creato - quella verrà usata in seguito.
Abilitare il ido
modulo (database).
sudo icinga2 feature enable ido-mysql
Dovrai modificare il /etc/icinga2/features-enabled/ido-mysql.conf
file per aggiungere le informazioni del database. Puoi farlo con il seguente comando.
sudo vi /etc/icinga2/features-enabled/ido-mysql.conf
In quel file, trova le righe commentate (inizia con //
).
//user = "icinga"
//password = "icinga"
//host = "localhost"
//database = "icinga"
... e modificali usando l'utente / password che hai appena creato.
user = "icinga"
password = "$someIcingaPassword"
host = "localhost"
database = "icinga"
Assicurati di decommentare le linee rimuovendo le due barre iniziali.
Quindi, riavviare il servizio per raccogliere le modifiche.
sudo service icinga2 restart
Sarà necessario aggiungere una connessione tra il server client e il master Icinga2 che è già stato configurato. Dovrai farlo utilizzando Firewalld su CentOS 7 o IPTables in CentOS 6 o 7.
# CentOS 6
sudo vi /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT
...
#Icinga2 Master
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT
sudo iptables restart
# CentOS 7
sudo firewall-cmd --add-port=5665/tcp --permanent
sudo firewall-cmd --reload
Ora, modifica il file hosts per aggiungere il master come nome di dominio locale.
sudo vi /etc/hosts
...
$masterIP icinga2master icinga2master.example.com
Passaggio 4: inizializzare il master
Questo passaggio deve essere eseguito sul master Icinga2. Dovrai inizializzarlo come master, quindi generare una richiesta di firma del certificato che il tuo client utilizzerà per comunicare.
sudo icinga2 node wizard
Questo eseguirà la procedura guidata del nodo, che farà diverse domande. Lo schermo sarà simile al seguente e le risposte che darai sono elencate.
Welcome to the Icinga 2 Setup Wizard!
We'll guide you through all required configuration details.
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icinga2-master1.localdomain]: icinga2master.example.com
Checking for existing certificates for common name 'icinga2master.example.com'...
Certificates not yet generated. Running 'api setup' now.
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca/ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca/ca.crt'.
information/cli: Generating new CSR in '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2master.example.com.key'.
information/base: Writing certificate signing request to '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/etc/icinga2/pki/icinga2master.example.com.crt'.
information/cli: Copying CA certificate to '/etc/icinga2/pki/ca.crt'.
Generating master configuration for Icinga 2.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
Please specify the API bind host/port (optional):
Bind Host []: <hit enter>
Bind Port []: <hit enter>
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.
Now restart your Icinga 2 daemon to finish the installation!
Quindi, riavvia Icinga2 per raccogliere le modifiche.
sudo service icinga2 restart
Ora che è un master, puoi usarlo per generare la stringa di richiesta di firma del certificato.
sudo icinga2 pki ticket --cn icinga2client.example.com
Riceverai qualche stringa $pkiString
. Copia quella stringa, poiché ne avrai bisogno sul client.
Passaggio 5: inizializzare il client
Eseguire la procedura guidata del nodo per generare i certificati e connettersi al master.
sudo icinga2 node wizard
Verrà visualizzata una pagina simile alla precedente. Questa pagina è mostrata di seguito con le risposte incluse.
Welcome to the Icinga 2 Setup Wizard!
We'll guide you through all required configuration details.
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: Y
Starting the Node setup routine...
Please specify the common name (CN) [icinga2client.example.com]:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga2master.example.com
Do you want to establish a connection to the master from this node? [Y/n]: Y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga2master.example.com
Master endpoint port [5665]: 5665
Add more master endpoints? [y/N]: N
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga2master.example.com]: icinga2master.example.com
Port [5665]: 5665
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.key.orig'.
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2client.example.com.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Fetching public certificate from master (icinga2master.example.com, 5665):
Certificate information:
Subject: CN = icinga2master.example.com
Issuer: CN = Icinga CA
Valid From: Jan 10 21:08:37 2017 GMT
Valid Until: Jan 7 21:08:37 2032 GMT
Fingerprint: FE 72 AB F3 18 A5 12 E0 0C 5D 94 8B 96 C4 57 3B 00 5C E0 04
Is this information correct? [y/N]: Y
information/cli: Received trusted master certificate.
Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn 'icinga2client.example.com'): $pkiString
information/cli: Requesting certificate with ticket '$pkiString'.
warning/cli: Backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig' already exists. Skipping backup.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []: <enter key>
Bind Port []: <enter key>
Accept config from master? [y/N]: Y
Accept commands from master? [y/N]: Y
information/cli: Disabling the Notification feature.
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Enabling the Apilistener feature.
warning/cli: Feature 'api' already enabled.
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Generating local zones.conf.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.
Now restart your Icinga 2 daemon to finish the installation!
Vai avanti e riavvia Icinga2 per raccogliere le modifiche.
sudo icinga2 restart
Questo può essere già fatto, ma è necessario assicurarsi che il comando e le funzionalità API siano abilitate.
sudo icinga2 feature enable command
sudo icinga2 feature enable api
Se non sono stati abilitati, verrà indicato "abilitato per le funzionalità", quindi sarà necessario riavviare il demone Icinga2. Ma prima, è necessario modificare la proprietà dei file nella /etc/icinga2
directory, poiché alcuni di essi hanno autorizzazioni errate dopo aver eseguito la procedura guidata del nodo. Dovrebbero avere tutti il proprietario e il gruppo impostati su icinga
. Modificare le autorizzazioni utilizzando il comando seguente:
sudo chown -R icinga:icinga /etc/icinga2/
Ora puoi riavviare il demone Icinga2.
sudo service icinga2 restart
La configurazione del client richiede la modifica di alcuni file diversi.
/etc/icinga2/zones.conf
: Contiene gli endpoint (server) e le zone che li contengono. Ecco come sono partizionati i server. Assicurarsi che i nomi dei client corrispondano ai nomi dei server.
/etc/icinga2/icinga2.conf
: Stai accettando comandi e configurazioni dal master, quindi devi fare una modifica minore su questo file per evitare definizioni di comandi duplicate.
Innanzitutto, modificheremo il zones.conf
file per definire il server e la zona in cui si trova, oltre a creare una zona "globale" per le definizioni dei comandi che sono universali per TUTTI i server, anziché uniche per ciascuno (come i controlli del disco) .
sudo vi /etc/icinga2/zones.conf
object Zone clientZone {
endpoints = [ "icinga2master.example.com" ]
}
object Zone "global-templates" { # Add global templates zone
global = true
}
object Endpoint NodeName {
host = "$icinga2clientIP"
}
object Zone ZoneName {
endpoints = [ NodeName ]
parent = clientZone
}
È importante sapere che al momento possono esserci solo 2 nodi per zona. Puoi creare tutte le zone che desideri, ma se ci sono più di 2 nodi per zona c'è la possibilità che il servizio Icinga2 non funzioni correttamente. Questo non è un problema sul client, a meno che tu non abbia già 2 nodi nella zona clientZone
, nel qual caso dovrai creare un altro nome di zona.
Ora apporta la modifica nel /etc/icinga2/icinga2.conf
file. Devi commentare la riga include_recursive "conf.d"
.
sudo vi /etc/icinga2/icinga2.conf
...
//include_recursive "conf.d"
...
Verifica la configurazione per assicurarti che tutto sia formattato correttamente.
sudo icinga2 daemon -C
Se riscontri problemi con le autorizzazioni, è probabile che l'articolo sia di proprietà di root:root
. Chown icinga:icinga
da risolvere.
sudo chown -R icinga:icinga /etc/icinga2/
Esistono altri problemi con le configurazioni, in genere le informazioni fornite dall'output del sudo icinga2 daemon -C
comando saranno abbastanza dettagliate da rintracciarle. Affrontare ogni potenziale problema che si pone non rientra nell'ambito di questa guida.
Se la verifica ha esito positivo, andare avanti e ricaricare il servizio:
sudo service icinga2 restart
Dovrai fornire icinga
all'utente le autorizzazioni sudo in modo che i comandi possano essere eseguiti. Queste autorizzazioni sudo saranno limitate alla directory specifica del plugin. Questo può essere inserito alla fine del file.
sudo vi /etc/sudoers
...
Defaults:icinga !requiretty
icinga ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/
Ora la configurazione del client è ufficialmente terminata. Non è necessario apportare ulteriori modifiche, eventuali controlli di servizio verranno configurati sul master e si propagheranno al client. Tuttavia, dovrai installare eventuali plug-in aggiuntivi di cui potresti aver bisogno. I plug-in possono anche essere scritti usando Python, Perl, BASH, PHP e altri linguaggi con script.
Passaggio 7: aggiungere il client alla configurazione principale
Dovrai tornare sul master per configurare il client in modo che possa essere collegato. Ci sono alcuni passaggi che dovranno essere presi:
- Aggiungi la configurazione dell'host a
repository.d
.
- Aggiungi host alla zona come endpoint.
- Configurare eventuali controlli per il client. Questo è leggermente fuori dallo scopo di questa guida, fornirò solo una spiegazione di base dei passaggi coinvolti.
La configurazione dell'host verrà inserita nel /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf
file.
sudo vi /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf
object Host "icinga2client.example.com" {
import "satellite-host"
address = "$icinga2clientIP"
vars.os = "Linux"
}
sudo chown icinga:icinga /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf
Ora l'host esiste nella configurazione del client, ma deve essere inserito in una zona. Questa zona sarà nella /etc/icinga2/repository.d/zones
cartella, con lo stesso nome del nome della zona per rendere più facile tenere traccia.
sudo vi /etc/icinga2/repository.d/zones/clientZone.conf
object Zone "clientZone" {
endpoints = [ "icinga2client.example.com" ]
parent = "icinga2master.example.com"
}
Successivamente, è necessario aggiungere la global-templates
zona.
sudo vi /etc/icinga2/repository.d/zones/global-templates.conf
object Zone "global-templates" {
global = true
}
Infine, aggiungi l'endpoint client in modo che l'array di endpoint "clientZone" sia popolato quando viene eseguito.
sudo vi /etc/icinga2/repository.d/endpoints/icinga2client.example.com.conf
#Change values to match the host you're adding
object Endpoint "icinga2client.example.com" {
host = "$icinga2clientIP"
}
Per assicurarti che non ci siano problemi di autorizzazione, vai avanti e cambia nuovamente il proprietario / gruppo.
sudo chown -R icinga:icinga /etc/icinga2
Verifica le modifiche alla configurazione per assicurarti che non ci siano più problemi.
sudo icinga2 daemon -C
Se la verifica ha esito positivo, andare avanti con la ricarica.
sudo service icinga2 restart
Se visiti il tuo sito web Icinga2, vedrai che il server diventa accessibile.
Passaggio 8: comandi e controlli personalizzati
Potrebbero verificarsi errori relativi a "comando non trovato" o "controllo non definito". È qui che entra in gioco la zona dei modelli globali. Dovrai copiare la configurazione in /etc/icinga2/conf.d/
file e inserirli in /etc/icinga2/zones.d/global-templates/
file. Ad esempio, per creare un comando "check_software", è necessario effettuare le seguenti operazioni.
sudo mkdir /etc/icinga2/zones.d/global-templates
sudo vi /etc/icinga2/zones.d/global-templates/commands.conf
object CheckCommand "check_software" {
import "plugin-check-command"
command = [ "/usr/bin/sudo", PluginDir + "/software_service_check.sh" ]
}
Il software_service_check.sh
file dovrà esistere nella /usr/lib64/nagios/plugins
cartella sul client .
Successivamente, aggiungi il controllo del servizio nel /etc/icinga2/repository.d/hosts/services.conf
file.
sudo vi /etc/icinga2/repository.d/hosts/services/services.conf
apply Service "Check Software Service" {
import "mail-service"
check_command = "check_software" # This check command is the same name as the one you defined in global-templates/commands.conf
assign where host.vars.client_endpoint # This will apply to every client server. If you need it to be more restrictive, you should look into custom variables
}
Dovrai modificare nuovamente le autorizzazioni.
sudo chown -R icinga:icinga /etc/icinga2
Quindi, verificare nuovamente la configurazione.
sudo icinga2 daemon -C
Infine, se riesce, ricaricare:
sudo service icinga2 restart
Congratulazioni! Ora stai usando Icinga2 in un modello master-client e ora puoi evitare di usare i controlli NRPE non sicuri!