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 |
Script monitorizare nagios
Ultima postare: oct 11 2015 16:56, Inițiat de
caracal
, aug 05 2015 11:38
·
0
#1
Publicat: 05 august 2015 - 11:38
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 mainsNu am idee cum pot sa fac ca nagios-ul sa trimita alerte atunci cand valorile alea nu se incadreaza in anumiti parametrii... |
#3
Publicat: 05 august 2015 - 16:06
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
Publicat: 05 august 2015 - 16:21
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
Publicat: 05 august 2015 - 16:40
caracal, 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. 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! |
#8
Publicat: 06 august 2015 - 14:34
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. |
#12
Publicat: 06 august 2015 - 18:03
"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. |
#14
Publicat: 06 august 2015 - 19:43
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 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
Publicat: 06 august 2015 - 22:32
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
Publicat: 07 august 2015 - 08:21
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-) 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
Publicat: 07 august 2015 - 09:37
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
Publicat: 07 august 2015 - 09:43
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
▶ Utilizatori activi: 1
0 membri, 1 vizitatori, 0 utilizatori anonimi