Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Mai exista in tara canale de tip ...

Huawei Freebuds 5i vs OPPO Enco A...

Recomandare dezumidificator silen...

Lungime minima traseu frigorific ...
 Restaurante pescaresti prin impre...

De ce se taie unii cu lama? Non-s...

Întrebare de noob

Rezistenta la caldura vara
 JOCURILE OLIMPICE PARIS 2024...fo...

JOCURILE OLIMPICE PARIS 2024...fo...

Revolut, crypto si taxe

Kia vs Hyundai vs Skoda Karoq 2.0...
 Paralizie parte inferioara picior...

COPA AMERICA 2024

Presedintele Romaniei 2024. Cine ...

Recomandare usa interior izolata ...
 

Script monitorizare nagios

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
24 răspunsuri în acest subiect

#1
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Salut, am si eu o nedumerire, daca ma poate ajuta cineva, as fi recunoscator.
Exista un server care scrie niste valori intr-un fisier csv. Din acel csv eu am nevoie sa monitorizez anumite valori. Fisierul scrie valorile pe cate o linie la fiecare 30 de secunde. Pe mine ma intereseaza mereu ce este in ultima linie, anumite coloane.
Am facunt un script bash:
#!/bin/bash
file=$( find /data/ -type f -name "Bms123*" -cmin -1 )
last=$( tail -n 1 $file | awk -F "\"*,\"*" '{print "Voltage: " $3 ", " "Vmin: " $5 ", " "VminIndex: " $6 ", " "Vmax: " $7 ", " "VmaxIndex: " $8}' )
echo "$last"
care are urmatorul output:
root@minipc:/data# sh test.sh
Voltage: 157.57, Vmin: 3.27, VminIndex: 13, Vmax: 3.29, VmaxIndex: 48
root@minipc:/data#

Header-ul csv-ului este:
time soc voltage current Vmin VminIndex Vmax VmaxIndex Tmin TminIndex Tmax TmaxIndex error high low mains

Nu am idee cum pot sa fac ca nagios-ul sa trimita alerte atunci cand valorile alea nu se incadreaza in anumiti parametrii...

#2
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
Salut,

as avea nevoie de informatiile urmatoare:
- verificarea se face activ sau se trimit pasiv rezultatele la serverul nagios?
- ce anume genereaza ok, warning si critical?

Editat de mannes, 05 august 2015 - 16:03.


#3
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
ideea e sa citesti in variabile separate campurile tale din awk.

#!/bin/bash
file=$( find /data/ -type f -name "Bms123*" -cmin -1 )
VOLTAGE=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $3}' )
VMIN=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $5}' )
VminIndex=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $6}' )
VMAX=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $7}' )
VmaxIndex=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $8}' )


apoi, in functie de ce anume genereaza ok/warning/critical se dezvolta mai departe scriptul

Editat de mannes, 05 august 2015 - 16:07.


#4
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Multumesc mult pentru raspuns!
Verificarea se face pasiv, scriptul verifica pe acest server parametrii si ii trimite la serverul nagios. Este OK atunci cand valorile sunt intre x (cel mai putin) si y (cel mai mult), este warning cand valorile scad sub x sau cresc peste y, iar critical este cand valorile scad sub a sau cresc peste b.
VminIndex si VmaxIndex sunt niste valori care se modifica, dar nu vor genera alerte, ma intereseaza doar sa imi afiseze valorile.

Este vorba de niste baterii care sunt conectate la un incarcator. Voltage este voltajul total, Vmax este voltajul maxim dintr-o baterie, VmaxIndex este numarul bateriei care are are voltajul cel mai mare, Vmin este voltajul minim dintr-o baterie, iar VminIndex este numarul bateriei care are cel mai mic voltaj.

Editat de caracal, 05 august 2015 - 16:25.


#5
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006

View Postcaracal, on 05 august 2015 - 16:21, said:

Multumesc mult pentru raspuns!
Verificarea se face pasiv, scriptul verifica pe acest server parametrii si ii trimite la serverul nagios.
bun, atunci stiu cum sa scriu scriptul

Quote

Este OK atunci cand valorile sunt intre x (cel mai putin) si y (cel mai mult), este warning cand valorile scad sub x sau cresc peste y, iar critical este cand valorile scad sub a sau cresc peste b.
VminIndex si VmaxIndex sunt niste valori care se modifica, dar nu vor genera alerte, ma intereseaza doar sa imi afiseze valorile.

Este vorba de niste baterii care sunt conectate la un incarcator. Voltage este voltajul total, Vmax este voltajul maxim dintr-o baterie, VmaxIndex este numarul bateriei care are are voltajul cel mai mare, Vmin este voltajul minim dintr-o baterie, iar VminIndex este numarul bateriei care are cel mai mic voltaj.

presupun ca "valorile" inseamna voltage. da-mi un exemplu numeric concret te rog...

am tot scris in ultima vreme tot felul de scripturi pt. nagios. inca unul in plus nu e mare paguba... si il pot si testa la mine pe server eventual!

#6
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Vmin:
- warning cand este sub 3V;
- critical cand este sub 2.8V.

Vmax:
- warning cand este peste 3.6V;
- critical cand este peste 3.8V.

Voltage:
- warning sub 153V sau peste 167V;
- critical sub 148V sau peste 170V.

#7
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
perfect! mă apuc de treabă ;)

#8
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
ai cumva o baterie compusa din mai multe elemente legate in serie?

in cazul acesta putem reformula problema intr-un mod un pic mai optim. Tensiunea totala a bateriei este de 153 - 167V in cazul functionarii normale, 143 - 153 si 167 - 170V in cazul warning si <148 sau >170V pentru critical (descarcata sau supraincarcata).

fiecare celula din baterie are 3-3.6V in cazul functionarii normale, 2.8 -3V sau 3.6 - 3.8V in cazul warning si <2.8V sau > 2.8V in cazul critical.

ti-as face o sugestie: sa imparti problema in doua cazuri distincte, dar practic corelate:

1. monitorizarea perfomantei totale a bateriei. aici se pot colecta usor si perfdata (performance data) si se poate genera si un grafic al functionarii bateriei
2. monitorizarea extremelor din baterie (celula cu cel mai mic si cel mai mare voltaj)

cele doua extreme se pot compesa reciproc si astfel e posibil ca tensiunea totala a bateriei sa fie in parametri optimi, deși există două celule cu defecte (una subincarcata, una supraincarcata) etc

astfel se poate siplifica si logica din script. ce parere ai?

Editat de mannes, 06 august 2015 - 14:35.


#9
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Hmmm...deja sunt pierdut, mi se pare foarte complicat :) Pe mine ma interesau doar valorile alea sa nu iasa din acel range (vmin, vmax si voltage), iar daca ies, sa primesc un warning/critical.
Daca cu metoda ta, rezultatul tot ala este, este ok atunci.

#10
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
apropo, nsca (pt passive check submit) este deja instalat? colectezi si perfdata (grafice tip MRTG)?

#11
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Nu. Nu le ia serverul prin nrpe?

#12
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
"le ia serverul" = active check. adica serverul nagios se conecteaza la masina monitorizata (eu unul folosesc check_by_ssh)unde executa un plugin. In functie de exit code (0-OK 1-WARN 2-CRIT 3-UNKNOWN) obtinut in urma executiei se afiseaza in nagios statusul corespunzator.

"se trimit serverului" = passive check, adica se executa local un script. Deja am terminat la monitorizarea cu passive check a bateriei intregi. iata cum arata:

#! /bin/bash
service_name="Status baterie";
HOST_NAME="baterie";
CFG="/etc/send_nsca.cfg";
NAGSERV="nagios.example.com"
file=$( find /data/ -type f -name "Bms123*" -cmin -1 )
VOLTAGE=$( tail -n 1 $file | awk '{print $3}' )
# Warning when Voltage < 153V or > 167V
VOLTAGE_W1=153
VOLTAGE_W2=167
# Critical when Voltage < 148V or > 170V
VOLTAGE_C1=148
VOLTAGE_C2=170
if [ "$VOLTAGE" -le "$VOLTAGE_C1" ] || [ "$VOLTAGE" -ge "$VOLTAGE_C2" ]; then
RET_CODE=2
MSG="Voltage is CRITICAL: $VOLTAGE V"
else
if [ "$VOLTAGE" -lt "$VOLTAGE_W1" ] || [ "$VOLTAGE" -gt "$VOLTAGE_W2" ]; then
	 RET_CODE=1
	 MSG="Voltage is WARNING: $VOLTAGE V"
else
	 RET_CODE=0
	 MSG="Voltage is OK: $VOLTAGE V"
fi
fi
CMD="$HOST_NAME;$service_name;$RET_CODE;$MSG | Voltage=$VOLTAGE Warning_min=$VOLTAGE_W1 Warning_max=$VOLTAGE_W2 Critical_min=$VOLTAGE_C1 Critical_max=$VOLTAGE_C2"
`$CMD | /usr/sbin/send_nsca -H $NAGSERV -d ';' -c $CFG`
exit 0


in nagios trebuie apoi sa-ti definesti serviciul passive check:

define service {
	 name						 passive-service		 ; The 'name' of this service template
	 use							 generic-service
	 active_checks_enabled		 0	   ; Active service checks are enabled
	 passive_checks_enabled		 1	; Passive service checks are enabled/accepted
	 check_freshness				 1
	 freshness_threshold			 300   ; The freshness threshold (in seconds) for this service. If you set this directive to a value of 0, Nagios will determine a freshness threshold to use automatically.
	 check_command				 check_dummy!0
	 register					 0		   ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
	 }


de asemenea, trebuie definita si comanda check_dummy astfel:

# 'check_dummy' command definition
define command{
	 command_name check_dummy
	 command_line $USER1$/check_dummy $ARG1$
	 }


Verificarea propriu-zisa se integreaza astfel:
define service {
	 use					 passive-service
	 host_name			 baterie
	 service_description	 Status baterie
	 action_url			 /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$&geom=1000x200' onmouseover='showGraphPopup(this)' onmouseout='hideGraphPopup()' rel='/nagiosgraph/cgi-bin/showgraph.cgi?host=$HOSTNAME$&service=$SERVICEDESC
	 }


action_url nu este obligatoriu si se foloseste pt generarea de grafice de care vorbeam mai sus. daca nu ai asa ceva, poti dezactiva optiunea.

lucrez acum la monitorizarea celulelor cu cea mai mare si mai mica tensiune. acolo este mai complexa un pic structura

daca ai nevoie de active check, se poate modifica scriptul si iti arat si ce sa configurezi pe server pt check_by_ssh (prefer varianta asta pt ca am deja si client si server pt comunicatie, iar transmisia datelor se face criptat)

Editat de mannes, 06 august 2015 - 18:01.


#13
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Da, nu am nsca...L-am instalat acum si incerc sa ma prind despre cum functioneaza :)
Iti multumesc inca o data!

#14
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
root@minipc:~# ./voltage.sh
./voltage.sh: line 14: [: : integer expression expected
./voltage.sh: line 14: [: : integer expression expected
./voltage.sh: line 18: [: : integer expression expected
./voltage.sh: line 18: [: : integer expression expected
./voltage.sh: line 27: baterie;Status: command not found
./voltage.sh: line 27: 0: command not found
root@minipc:~#

Din ce am vazut, eroarea ar fi ca este in format DOS, dar am verificat cu vim si nu am nici un CR. Am dat paste la code pe alt server si nu imi da erorile respective. I-am facut si un convert cu dos2unix, dar degeaba, la fel imi da Posted Image

Am modificat linia 7 in:
VOLTAGE=$( tail -n 1 $file | awk -F "\"*,\"*" '{print $3}' )

pentru ca nu afisa nimic. Acum afiseaza, dar tot am eroarea integer expression expected
root@minipc:~# ./voltage.sh
./voltage.sh: line 14: [: 157.59: integer expression expected
./voltage.sh: line 14: [: 157.59: integer expression expected
./voltage.sh: line 18: [: 157.59: integer expression expected
./voltage.sh: line 18: [: 157.59: integer expression expected
./voltage.sh: line 27: baterie;Status: command not found
./voltage.sh: line 27: 0: command not found
root@minipc:~#


Editat de caracal, 06 august 2015 - 20:11.


#15
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
Salut,

am modificat scriptul si l-am facut conform cu cererea originala.

practic am impartit cerinta in 3 sub-probleme:
1. voltaj critic sub 148V sau peste 170V | warning intre 148-153 si 167-170
2. VMIN critic sub 2.8V, warning sub 3
3. VMAX warning peste 3.6V, critic peste 3.8

fiecare sub-problema se rezolva independent si se pastreaza intr-un vector "STATES" statusul corespunzator. apoi se cauta maximul din acel vector. acel maxim este de fapt RET_CODE de care are nevoie nagios pentru prelucrare.
#! /bin/bash
service_name="Status baterie";
HOST_NAME="baterie";
CFG="/etc/send_nsca.cfg";
NAGSERV="nagios.example.com"
file=voltage.log
VOLTAGE=$( tail -n 1 $file | awk '{print $3}' )
VMIN=$( tail -n 1 $file | awk '{print $5}' )
VminIndex=$( tail -n 1 $file | awk '{print $6}' )
VMAX=$( tail -n 1 $file | awk '{print $7}' )
VmaxIndex=$( tail -n 1 $file | awk '{print $8}' )

# Warning when Voltage < 153V or > 167V
VOLTAGE_W1=153
VOLTAGE_W2=167
# Critical when Voltage < 148V or > 170V
VOLTAGE_C1=148
VOLTAGE_C2=170
# Warning when Vmin < 3V | Error when < 2.8V
VMIN_W="3"
VMIN_C="2.8"
# Warning when Vmax > 3.6V | Error when > 3.8V
VMAX_W="3.6"
VMAX_C="3.8"
# The usual nagios status codes
OK=0
WARN=1
CRIT=2
declare -a STATES=();
# Check battery state
if [ "$VOLTAGE" -le "$VOLTAGE_C1" ] || [ "$VOLTAGE" -ge "$VOLTAGE_C2" ]; then
VOLT_STATUS=$CRIT
VOLT_MSG="Voltage is CRITICAL: $VOLTAGE V"
else
if [ "$VOLTAGE" -lt "$VOLTAGE_W1" ] || [ "$VOLTAGE" -gt "$VOLTAGE_W2" ]; then
	 VOLT_STATUS=$WARN
	 VOLT_MSG="Voltage is WARNING: $VOLTAGE V"
else
	 VOLT_STATUS=$OK
	 VOLT_MSG="Voltage is OK: $VOLTAGE V"
fi
fi
# Check VMIN state
if [[ $VMIN < $VMIN_C ]]; then
VMIN_STATUS=$CRIT
VMIN_MSG="VMIN CRITICAL: $VMIN V, cell $VminIndex undercharged"
else
if [[ "$VMIN" < "$VMIN_W" ]]; then
	 VMIN_STATUS=$WARN
	 VMIN_MSG="VMIN is WARNING: $VMIN V, cell $VminIndex undercharged"
else
	 VMIN_STATUS=$OK
	 VMIN_MSG="VMIN is OK: $VMIN V"
fi
fi
# Check VMAX state
if [[ "$VMAX" > "$VMAX_C" ]]; then
VMAX_STATUS=$CRIT
VMAX_MSG="VMAX CRITICAL: $VMAX V, cell $VmaxIndex overcharged"
else
if [[ "$VMAX" > "$VMAX_W" ]]; then
	 VMAX_STATUS=$WARN
	 VMAX_MSG="VMAX is WARNING: $VMAX V, cell $VmaxIndex overcharged"
else
	 VMAX_STATUS=$OK
	 VMAX_MSG="VMAX is OK: $VMAX V"
fi
fi
# Find the general state
STATES=("$VOLT_STATUS" "$VMIN_STATUS" "$VMAX_STATUS")
MAX=0
for i in "${STATES[@]}"; do
(( $i > $MAX )) && MAX=$i
done
RET_CODE=$MAX
# Compose the output message
MSG="$VOLT_MSG ; $VMIN_MSG ; $VMAX_MSG"
CMD="$HOST_NAME;$service_name;$RET_CODE;$MSG | Voltage=$VOLTAGE Warning_min=$VOLTAGE_W1 Warning_max=$VOLTAGE_W2 Critical_min=$VOLTAGE_C1 Critical_max=$VOLTAGE_C2"
to_send="$CMD | /usr/sbin/send_nsca -H $NAGSERV -d ';' -c $CFG"
echo "$to_send"
exit 0


exemplul de fișier log de input folosit este acesta:

time soc voltage current Vmin VminIndex Vmax VmaxIndex Tmin TminIndex Tmax TmaxIndex error high low mains
a a 155	 a	 3.1 13	 3.9 48	 a a		 a a		 a	 a a a


awk se va uita dupa coloanele "cu numere", care sunt corelate cu header-ul. a-urile le-am adaugat eu aleatoriu pt a-mi asigura exact acelasi numar de elemente pe randul care ne intereseaza. practic am simulat
file=$( find /data/ -type f -name "Bms123*" -cmin -1 )
VOLTAGE=$( tail -n 1 $file | awk '{print $3}' )


la passive check, ideea este de a executa comanda de la to_send. $RET_CODE este statusul afisat de nagios.

te rog, poti sa-mi trmiti un fisier log intreg (daca nu e prea urias)? sa stiu sa ajustez ce extrage awk...

partea de cod e rezolvata. scriptul respectiv va merge intr-un crontab care va trimite rezultatele la serverul de nagios la fiecare X minute.
incearca sa-l intelegi si apoi se configureaza si nagios-ul

Editat de mannes, 06 august 2015 - 22:45.


#16
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
root@minipc:~# ./voltage.sh
./voltage.sh: line 31: [: 157.46: integer expression expected
./voltage.sh: line 31: [: 157.46: integer expression expected
./voltage.sh: line 35: [: 157.46: integer expression expected
./voltage.sh: line 35: [: 157.46: integer expression expected
baterie;Status baterie;0;Voltage is OK: 157.46 V ; VMIN is OK: 3.27 V ; VMAX is OK: 3.29 V | Voltage=157.46 Warning_min=153 Warning_max=167 Critical_min=148 Critical_max=170 | /usr/sbin/send_nsca -H 10.5.5.8 -d ';' -c /etc/send_nsca.cfg
root@minipc:~#


Pare sa functioneze (iar am modificat awk la fiecare linie pentru ca nu extragea valoarea -era un spatiu gol-) Posted Image Acum o sa fac eu un csv in care trec valori aiurea pentru a verifica alertele. O sa pun scriptul sa ia informatiile din acel csv.
Da, iti pot trimite un log, nu e mare. Da-mi pe privat o adresa de email.

L.E.:
root@minipc:~# ./voltage.sh
broscutza;Status baterie;2;Voltage is CRITICAL: 180 V ; VMIN is OK: 3.27 V ; VMAX is OK: 3.29 V | Voltage=180 Warning_min=153 Warning_max=167 Critical_min=148 Critical_max=170 | /usr/sbin/send_nsca -H 10.5.5.8 -d ';' -c /etc/send_nsca.cfg
root@minipc:~#
Cand execut scriptul, imi arata ca Voltage este CRITICAL, dar nagios nu trimite nici o alerta pe mail si arata tot OK.

Ah, este OK pentru ca am dat eu "Submit passive check result for this service" cu check result OK si check output OK. Era in pending pana sa dau asta. Cumva nagios-ul nu citeste ca trimite scriptul ala?

Editat de caracal, 07 august 2015 - 08:41.


#17
mannes

mannes

    Active Member

  • Grup: Members
  • Mesaje: 1.793
  • Înscris: 30.04.2006
sericiul din nagios trebuie configurat astfel:

define service {
		 use							 passive-service
		 host_name				 broscutza
		 service_description	 Status baterie
		 }


ai configurat commands si templates pt passive check?

pt email ai de configurat urmatoarele:

- contacts: definesti in contact cu nume si adresa email
define contact {
	 contact_name				 user
	 use							 generic-contact
	 email						 [email protected]
	 }


eventual creezi si o grupa de utilizatori (daca e cazul)
define contactgroup{
	 contactgroup_name	 admins
	 alias				 Battery Administrators
	 members				 user
	 }


in definitia template-ului spui cine trebuie notificat in caz de probleme

define service {
	 name						 passive-service
	 use							 generic-service
	 active_checks_enabled		 0		
	 passive_checks_enabled		 1		
	 check_freshness				 1
	 contact_groups					 admins
	 freshness_threshold			 300		
	 check_command				 check_dummy!0
	 register					 0					
	 }


nagios trebuie configurat sa poata trimite email (verifica configuratia de postfix locala)

Editat de mannes, 07 august 2015 - 09:38.


#18
caracal

caracal

    Junior Member

  • Grup: Members
  • Mesaje: 226
  • Înscris: 30.01.2007
Nagiosul mai are alerte setate (numai active check) si trimite emailuri de notificare in caz de erori. Am mai facut niste teste. Cand execut scriptul, pe serverul nagios nu se creaza nici o conexiune pe portul 5667. Am executat comanda
root@minipc:~# echo "baterie;Status baterie;2;Voltage is CRITICAL: 180 V ; VMIN is OK: 3.27 V ; VMAX is OK: 3.29 V | Voltage=180 Warning_min=153 Warning_max=167 Critical_min=148 Critical_max=170" | /usr/sbin/send_nsca -H 10.5.5.8 -d ';' -c /etc/send_nsca.cfg
1 data packet(s) sent to host successfully.
root@minipc:~#
si asa se deschide o conexiune, dar pe web nu se modifica nimic, tot OK este.

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate