Icinga2 este un sistem de monitorizare puternic, iar atunci când este utilizat într-un model master-client, poate înlocui necesitatea verificărilor de monitorizare bazate pe NRPE. Modelul master-client este mai sigur din diverse motive . De asemenea, permite o monitorizare mai distribuită, permițând modificarea verificărilor pe un server și propagarea la altele. De asemenea, oferă o locație centralizată pentru modificări.
De exemplu: Să spunem că aveți 4 servere web echilibrate în sarcină. Dacă știți că veți avea un vârf de încărcare (poate o vânzare sau ceva pentru care anticipați o mulțime de activitate), poate doriți să creșteți nivelurile la care utilizarea procesorului ridicat avertizează administratorii sistemului. Dacă utilizați verificări NRPE, va trebui să accesați fiecare server și să modificați /etc/nrpe.d/common_commands.cfgdocumentul pe fiecare dintre ele. În modelul client-master, puteți modifica pur și simplu definițiile gazdei în /etc/icinga2/repository.d/hosts/folder, apoi reîncărcați Icinga. Verificările se vor propaga pe fiecare server și vor fi preluate automat. Puteți adăuga, de asemenea, foarte ușor verificări modificând /etc/icinga2/repository.d/services/fișierele, iar acestea se vor propaga și vor fi recunoscute automat, atât timp cât există plugin-uri pe serverele client.
Cerințe preliminare
- O instanță de server cu Icinga2 și Icingaweb2 au fost deja instalate și configurate ( instrucțiuni ) numite
icinga2master.example.com.
- O nouă instanță a serverului Vultr CentOS 6 sau 7 pe care doriți să o monitorizați numită
icinga2client.example.com.
- Acces Sudo.
O parte din acest ghid va reflecta instrucțiunile de instalare enumerate mai sus, dar acest lucru trebuie făcut pe mașina client și nu pe mașina serverului.
Pasul 1: Actualizați sistemul
Adăugați repetiția „ICINGA” în sistemul client pentru a instala pachetele 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
Pasul 2: Instalați pachetele necesare
Instalați pachetele necesare.
# 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 folosește MariaDB în loc de MySQL, astfel încât pachetele necesare sunt ușor diferite. Porniți serviciile și setați-le să înceapă la pornire.
sudo chkconfig icinga2 on
sudo service icinga2 start
Setați serviciul MySQL să înceapă la pornire și să îl porniți acum, astfel încât să-l putem securiza.
# CentOS 6
sudo chkconfig mysqld on
sudo service mysqld start
#CentOS 7
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service
Securizați instalarea MySQL / MariaDB. Atât CentOS 6 cât și 7 folosesc aceeași comandă.
sudo mysql_secure_installation
În timpul procesului, răspundeți la întrebări, după cum se arată:
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
Notați că $newRootPasswordveți avea nevoie de ea de mai multe ori și este o durere de resetat.
Pasul 3: Configurați baza de date
Trebuie să creați icinganumele de utilizator și să importați schema în baza de date. Acest lucru se face în același mod atât pentru CentOS 6 cât și pentru 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
Apoi, importați schema în baza de date pe care tocmai ați creat-o.
sudo mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql
Va trebui să introduceți $newRootPasswordparola MySQL / MariaDB pe care ați utilizat-o în timpul mysql_secure_installationcomenzii de mai sus, nu pe cea pe $someIcingaPasswordcare tocmai ați creat-o - aceasta va fi folosită ulterior.
Activați idomodulul (baza de date).
sudo icinga2 feature enable ido-mysql
Va trebui să editați /etc/icinga2/features-enabled/ido-mysql.conffișierul pentru a adăuga informațiile bazei de date. Puteți face acest lucru cu următoarea comandă.
sudo vi /etc/icinga2/features-enabled/ido-mysql.conf
În acel fișier, găsiți liniile care sunt comentate (începeți cu //).
//user = "icinga"
//password = "icinga"
//host = "localhost"
//database = "icinga"
... și editați-le utilizând parola / parola pe care tocmai le-ați creat.
user = "icinga"
password = "$someIcingaPassword"
host = "localhost"
database = "icinga"
Asigurați-vă că deconectați liniile, eliminând cele două tăieri inițiale.
Apoi, reporniți serviciul pentru a ridica modificările.
sudo service icinga2 restart
Va trebui să adăugați o conexiune între serverul client și maestrul Icinga2 care a fost deja configurat. Va trebui să faceți asta folosind fie Firewalld pe CentOS 7, fie tabele IPT în CentOS 6 sau 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
Acum, editați fișierul gazdelor pentru a adăuga maestrul ca nume de domeniu local.
sudo vi /etc/hosts
...
$masterIP icinga2master icinga2master.example.com
Pasul 4: Inițializează masterul
Acest pas trebuie făcut pe maestrul Icinga2. Va trebui să îl inițializați ca un master, apoi să generați o cerere de semnare a certificatului pe care clientul dvs. o va folosi pentru a comunica.
sudo icinga2 node wizard
Acesta va rula asistentul nodului, care va pune mai multe întrebări. Ecranul va arăta ca următorul, iar răspunsurile pe care le veți da sunt enumerate.
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!
Apoi, reporniți Icinga2 pentru a ridica modificările.
sudo service icinga2 restart
Acum că este un master, îl puteți utiliza pentru a genera șirul de solicitare a semnării certificatelor.
sudo icinga2 pki ticket --cn icinga2client.example.com
Veți obține niște șiruri $pkiString. Copiați șirul respectiv, deoarece veți avea nevoie de acesta pe client.
Pasul 5: Inițializează clientul
Rulați asistentul nod pentru a genera certificatele și conectați-vă la master.
sudo icinga2 node wizard
Va veni cu o pagină similară cu cea de mai sus. Această pagină este prezentată mai jos, cu răspunsuri 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!
Continuați și reporniți Icinga2 pentru a prelua modificările.
sudo icinga2 restart
Acest lucru poate fi deja făcut, dar trebuie să vă asigurați că comanda și funcțiile API sunt activate.
sudo icinga2 feature enable command
sudo icinga2 feature enable api
Dacă nu au fost activate, va spune „funcție activată”, deci va trebui să reporniți daemonul Icinga2. Dar mai întâi, trebuie să schimbați proprietatea fișierelor din /etc/icinga2director, deoarece unele dintre ele au permisiuni greșite după rularea expertului nod. Toți ar trebui să aibă propriul proprietar și grupul stabilit icinga. Modificați permisiunile folosind următoarea comandă:
sudo chown -R icinga:icinga /etc/icinga2/
Acum, puteți reporni demonul Icinga2.
sudo service icinga2 restart
Configurația clientului necesită editarea câtorva fișiere diferite.
/etc/icinga2/zones.conf: Conține punctele finale (serverele) și zonele care le conțin. Acesta este modul în care serverele sunt partiționate. Asigurați-vă că numele clientului se potrivesc cu numele serverului.
/etc/icinga2/icinga2.conf: Acceptați comenzi și configurații de la master, deci trebuie să faceți o editare minoră în acest fișier pentru a evita definițiile comenzilor duplicate.
În primul rând, vom modifica zones.conffișierul pentru a defini serverul și zona în care se află, precum și crearea unei zone „globale” pentru definiții de comenzi care sunt universale pentru TOATE serverele, în loc de unic pentru fiecare (cum ar fi verificările pe disc) .
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
}
Este important de știut, în acest moment pot exista doar 2 noduri pe zonă. Puteți crea câte zone doriți, dar dacă există mai mult de 2 noduri pe zonă, există șansa ca serviciul Icinga2 să nu funcționeze corect. Aceasta nu este o problemă pentru client, cu excepția cazului în care aveți deja 2 noduri în zonă clientZone, caz în care va trebui să faceți un alt nume de zonă.
Acum, faceți modificarea în /etc/icinga2/icinga2.conffișier. Trebuie să comentezi linia include_recursive "conf.d".
sudo vi /etc/icinga2/icinga2.conf
...
//include_recursive "conf.d"
...
Verificați configurarea pentru a vă asigura că totul este formatat corect.
sudo icinga2 daemon -C
Dacă primiți probleme de permisiuni, este posibil, deoarece articolul este deținut de root:root. Dus icinga:icingala rezolvare.
sudo chown -R icinga:icinga /etc/icinga2/
Există și alte probleme cu configurațiile, în general, informațiile date de la ieșirea sudo icinga2 daemon -Ccomenzii vor fi suficient de verosioase pentru a le urmări. Abordarea fiecărei probleme potențiale care apare este în afara domeniului de aplicare al acestui ghid.
Dacă verificarea reușește, mergeți mai departe și reîncărcați serviciul:
sudo service icinga2 restart
Va trebui să acordați icingapermisiunile sudo utilizatorului pentru a putea fi executate comenzile. Aceste permisiuni sudo vor fi limitate la directorul pluginului specific. Acest lucru poate fi pus la sfârșitul fișierului.
sudo vi /etc/sudoers
...
Defaults:icinga !requiretty
icinga ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/
Acum configurația clientului este finalizată oficial. Nu trebuie să faceți alte modificări, verificările serviciilor vor fi configurate pe master și se vor propaga către client. Cu toate acestea, va trebui să instalați orice plugin suplimentar de care aveți nevoie. Plug-in-urile pot fi, de asemenea, scrise folosind python, perl, BASH, PHP și alte limbaje scriptate.
Pasul 7: Adăugați client la configurația master
Va trebui să vă întoarceți la master pentru a configura clientul astfel încât să poată fi conectat. Există câțiva pași care trebuie făcuți:
- Adăugați configurația de gazdă la
repository.d.
- Adăugați gazdă la zonă ca punct final.
- Configurați verificările pentru client. Acest lucru este ușor în afara acestui ghid, voi oferi doar o explicație de bază a pașilor implicați.
Configurația gazdă va fi introdusă în /etc/icinga2/repository.d/hosts/icinga2client.example.com.conffișier.
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
Acum gazda există în configurația clientului, dar trebuie pusă într-o zonă. Această zonă se va afla în /etc/icinga2/repository.d/zonesfolder, cu același nume ca și numele zonei pentru a ușura urmărirea.
sudo vi /etc/icinga2/repository.d/zones/clientZone.conf
object Zone "clientZone" {
endpoints = [ "icinga2client.example.com" ]
parent = "icinga2master.example.com"
}
În continuare, trebuie să adăugați global-templateszona.
sudo vi /etc/icinga2/repository.d/zones/global-templates.conf
object Zone "global-templates" {
global = true
}
În cele din urmă, adăugați punctul final al clientului, astfel încât tabela de puncte „clientZone” să fie populată atunci când rulează.
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"
}
Pentru a vă asigura că nu există probleme de permisiuni, mergeți mai departe și schimbați din nou proprietarul / grupul.
sudo chown -R icinga:icinga /etc/icinga2
Verificați modificările de configurare pentru a vă asigura că nu mai există probleme.
sudo icinga2 daemon -C
Dacă verificarea reușește, continuați cu reîncărcarea.
sudo service icinga2 restart
Dacă vizitați site-ul dvs. Icinga2, veți vedea că serverul devine accesibil.
Pasul 8: comenzi și verificări personalizate
Puteți întâmpina erori cu privire la „comanda nu a fost găsită” sau „verificarea nu a fost definită”. Aici intră în joc zona global-template-uri. Va trebui să copiați configurația în /etc/icinga2/conf.d/fișiere și să le puneți în /etc/icinga2/zones.d/global-templates/fișiere. De exemplu, pentru a crea o comandă "check_software", va trebui să faceți următoarele.
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" ]
}
software_service_check.shFișierul va trebui să existe în /usr/lib64/nagios/pluginsdirectorul de pe client .
Apoi, adăugați verificarea serviciului în /etc/icinga2/repository.d/hosts/services.conffișier.
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
}
Va trebui să schimbați din nou permisiunile.
sudo chown -R icinga:icinga /etc/icinga2
Apoi, verificați din nou configurația.
sudo icinga2 daemon -C
În sfârșit, dacă reușește, reîncărcare:
sudo service icinga2 restart
Felicitări! Acum utilizați Icinga2 într-un model master-client și puteți acum să evitați să utilizați verificările NRPE nesigure!