Criação de Telas Zabbix. [RESOLVIDO]

1. Criação de Telas Zabbix. [RESOLVIDO]

Leandro Rubert Jacomini
leojaco25

(usa XUbuntu)

Enviado em 10/06/2014 - 10:43h

Senhores, bom dia.

Estou tentando configurar uma tela para monitoramento de processos com o Zabbix, dividido por níveis de criticidade de processo, facilitando a visualização das Triggers. Consegui criar uma tela para cada nível monitorado, porém todas as Triggers são apresentadas nestas duas telas. Por exemplo, monitoro o Uptime das máquinas, que tem nível de criticidade 2, e não tem necessidade de resolver com urgência. Monitoro, também, a quantidade de https ativos em determinados servidores, com nível de criticidade 1, que quando são alertados, deve-se analisar o problema com certa urgência. Porém, quando coloco na tela de nível 1, ambas Triggers são alertadas, e na tela 2 ocorre o mesmo. Precisaria separar, deixando o que é nível 1 na tela de nível 1, e o que é de nível 2 na tela de nível 2. Isso conseguimos fazer com o Nagios, mas com o Zabbix está muito complicado de fazer, pois ele apresenta as triggers por host, e não por grupo.

Alguém tem alguma ideia do que pode ser feito para resolver isso? Separar as triggers por nível de criticidade?

Grato, Leandro.


  


2. Re: Criação de Telas Zabbix. [RESOLVIDO]

Leandro Rubert Jacomini
leojaco25

(usa XUbuntu)

Enviado em 16/07/2014 - 17:14h

Criei uma solução em php para mostrar o monitoramento. Fechando o tópico.


3. Dúvida

Leonardo Rodrigues
leonardog50

(usa CentOS)

Enviado em 12/03/2015 - 17:25h

Boa tarde!

Quero fazer o mesmo processo no Zabbix, também tenho servidores que quero separar em níveis de atendimento e urgência.
Poderia me passar por gentileza o arquivo em php e o modo como fez?

Agradecido.


4. Re: Criação de Telas Zabbix. [RESOLVIDO]

Leandro Rubert Jacomini
leojaco25

(usa XUbuntu)

Enviado em 08/04/2015 - 14:49h

Opa, desculpa não ter visto antes. Posso passar um protótipo sim, mas vc terá que alterar de acordo com a tua realidade.
Como eu faço para carregar um arquivo no acompanhamento?

Leandro.


5. Re: Criação de Telas Zabbix. [RESOLVIDO]

Leandro Rubert Jacomini
leojaco25

(usa XUbuntu)

Enviado em 08/04/2015 - 15:18h

Segue os códigos-fonte do php:

index.php

<?php
session_start();
/* Iniciando a Sessão */
ob_start();
//Arquivo que conecta com o MySQL
include "conecta.php";
$tamanho = "100%";
$tempo = 5000;
$cont = 0;
$cont2 = 0;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="30" />
<link rel="stylesheet" type="text/css" href="estilo.css" />
<title> Monitoramento Zabbix </title>
</head>
<body bgcolor="#E9E9E9" >
<!-- Esta parte retire da sua apresentação
<div class="nivel_e content">
<div class="nivel_e"><?php $servidor = ""; include '';?></div>
<div class="nivel_e"><?php $servidor = ""; include '';?></div>
<div class="nivel_e"><?php $servidor = ""; include '';?></div>
<div class="nivel_e"><?php $servidor = ""; include '';?></div>
</div>-->
<div class="nivel content">
<div class="nivel_">
<h1 class="nivel"><b> Monitoramento Zabbix - </b></h1>
</div>
</div>

<div class="nivel content">
<div class="nivel_">
<h2 class="nivel"><b> Nivel 1 </b></h2>
</div>
</div>
<div class="nivel content">
<?php
include 'cabecalho.php';
include 'nivel1.php';?>
<h4>&nbsp;</h4>
</div>

<div class="nivel content">
<div class="nivel_">
<h2 class="nivel"><b> Nivel 2 </b></h2>
</div>
</div>
<div class="nivel content">
<?php
include 'cabecalho.php';
include 'nivel2.php';?>
<h4>&nbsp;</h4>
</div>
<div class="rodape content">
<div class="rodape">
<h2 class="rodape"><b> Legenda </b></h2>
</div>
<div class="rodape">
<?php include 'legenda.php';?>
<ul class='rodape'>
<li style="background-color: <?php echo $Desconhecido?>;"> Desconhecido </li>
<li style="background-color: <?php echo $Informacao?>;"> Informacao </li>
<li style="background-color: <?php echo $Atencao?>;"> Atencao </li>
<li style="background-color: <?php echo $Media?>;"> Media </li>
<li style="background-color: <?php echo $Alta?>;"> Alta </li>
<li style="background-color: <?php echo $Desastre;?>;color: #ffffdd;"> Desastre </li>
</ul>
</div>
</div>
<!--<script type="text/javascript">
function Atualizar() {
window.location.reload();
}
</script>-->
</body>
</html>


cabecalho.php

<?php
echo "
<ul class='nivel_' style='background-color: #B9B9B9'>
<li class='nivel' style='width: 20%'> Host </li>
<li class='nivel' style='width: 15%'> Duração </li>
<li class='nivel' style='width: 15%'> Ultimo Check </li>
<li class='nivel' style='width: 48%'> Trigger </li>
</ul>";
?>


nivel1.php

<?php
$cont=0;
$ultimo_valor = "&nbsp;";
$disparo = "&nbsp;";
include "legenda.php";
$sql_tr = "SELECT DISTINCT t.*,i.itemid,hg.groupid,hg.hostid,h.name FROM triggers t,functions f,items i,hosts h,hosts_groups hg WHERE hg.hostid=i.hostid AND hg.hostid=h.hostid AND f.triggerid=t.triggerid AND f.itemid=i.itemid AND (hg.groupid IN ('29')) AND NOT EXISTS ( SELECT ff.functionid FROM functions ff WHERE ff.triggerid=t.triggerid AND EXISTS (SELECT ii.itemid FROM items ii,hosts hh WHERE ff.itemid=ii.itemid AND hh.hostid=ii.hostid AND (ii.status<>0 OR hh.status<>0))) AND t.status=0 AND ((t.value IN ('1')) AND (t.flags IN ('0','4'))) ORDER BY t.priority desc,h.name desc,lastchange DESC,t.lastchange DESC";
$sql_tr = mysql_query($sql_tr);
while($array_tr = mysql_fetch_array($sql_tr)){
include "severidade.php";
if($array_tr['comments'] == "Nivel 1"){
$host = $array_tr['hostid'];
$problema = $array_tr['description'];
$tr = trim(strstr(str_replace('TRIGGER: ', '', strstr($problema, 'TRIGGER: ')),' ', true));
include "query.php";
$cont = $cont+1;
//echo $nome_servidor." - ".$ultimo_valor." - ".$disparo."<br>";
echo
"<ul class='nivel_' style='background-color: ".$color."'>
<li class='nivel' style='color: #".$fontcolor."; width: 20%;'>".$nome_servidor."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 15%;'>".$disparo."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 15%'>".$ultimo_valor."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 48%'>".$descricao."</li>
</ul>";
}
}
?>


nivel2.php

<?php
$cont2=0;
include "legenda.php";
$ultimo_valor = "&nbsp;";
$disparo = "&nbsp;";
$sql_tr = "SELECT DISTINCT t.*,i.itemid,hg.groupid,hg.hostid,h.name FROM triggers t,functions f,items i,hosts h,hosts_groups hg WHERE hg.hostid=i.hostid AND hg.hostid=h.hostid AND f.triggerid=t.triggerid AND f.itemid=i.itemid AND (hg.groupid IN ('29')) AND NOT EXISTS ( SELECT ff.functionid FROM functions ff WHERE ff.triggerid=t.triggerid AND EXISTS (SELECT ii.itemid FROM items ii,hosts hh WHERE ff.itemid=ii.itemid AND hh.hostid=ii.hostid AND (ii.status<>0 OR hh.status<>0))) AND t.status=0 AND ((t.value IN ('1')) AND (t.flags IN ('0','4'))) ORDER BY t.priority desc,h.name desc,lastchange DESC,t.lastchange DESC";
$sql_tr = mysql_query($sql_tr);
while($array_tr = mysql_fetch_array($sql_tr)){
include "severidade.php";
if($array_tr['comments'] == "Nivel 2"){
$host = $array_tr['hostid'];
$item = $array_tr['itemid'];
$problema = $array_tr['description'];
$tr = trim(strstr(str_replace('TRIGGER: ', '', strstr($problema, 'TRIGGER: ')),' ', true));//echo "TR: ".$tr."<br>";
include "query.php";
$cont2 = $cont2+1;
echo
"<ul class='nivel_' style='background-color: ".$color."'>
<li class='nivel' style='color: #".$fontcolor."; width: 20%;'>".$nome_servidor."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 15%;'>".$disparo."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 15%'>".$ultimo_valor."</li>
<li class='nivel' style='color: #".$fontcolor."; width: 48%'>".$descricao."</li>
</ul>";

}
}
?>


query.php

<?php
if($tr == "WARNING" or $tr == "CRITICAL" or $tr == "FILA"){
$history = "history_uint";
}else{
$history = "history";
}
$sql = "
SELECT DISTINCT
i.itemid,
f.*,
i.key_,
i.lastvalue,
i.prevvalue,
(i.lastvalue/86400) as tempo,
i.hostid,
i.value_type,
i.lastclock,
from_unixtime(i.lastclock) ultimo_valor,
i.units,
i.status,
h.hostid,
h.name,
h.status as host_status,
from_unixtime(his.clock) AS disparo,
his.itemid,
his.clock
FROM
`hosts` h, items i, functions f, history as his
WHERE
i.hostid='".$array_tr['hostid']."' AND
i.itemid='".$array_tr['itemid']."' AND
h.hostid=i.hostid AND
i.itemid=f.itemid
ORDER BY
i.lastclock desc LIMIT 1";

$sql = mysql_query($sql);
while($array = mysql_fetch_array($sql)){
$nome_servidor = $array['name'];
$ultimo_valor = $array['ultimo_valor'];
$disparo = $array['disparo'];
if($tr == "UPTIME"){
$descricao = substr($array_tr['description'],0,strpos($array_tr['description'],'-')+0)." - ".(int)$array['tempo']." dias.";
}elseif($tr == "WARNING" or $tr == "CRITICAL"){
$descricao = substr($array_tr['description'],0,strpos($array_tr['description'],'{')+0).(int)$array['lastvalue'];
}elseif($tr == "BACKUP"){
$descricao = substr($problema,0,strpos($problema,'{')+0).substr($array['lastvalue'],0,strpos($array['lastvalue'],'.')+1200);
}elseif($tr == "LOAD"){
$descricao = substr($array_tr['description'],0,strpos($array_tr['description'],'-')+0)." - ".substr($array['lastvalue'],0,strpos($array['lastvalue'],'.')+3);
}elseif($tr == "SWAP" or $tr == "MEMORIA"){
$descricao = substr($problema,0,strpos($problema,'{')+0).$total."%";
}elseif($tr == "DISCO"){
$descricao = substr($problema,0,strpos($problema,'{')+0).substr($array['lastvalue'],0,strpos($array['lastvalue'],'.')+3)."%";
}else{
$descricao = $problema;
}
}
?>


legenda.php

<?php
$sql_conf = "SELECT severity_color_0 as 'Desconhecido',severity_color_1 as 'Informacao',severity_color_2 as 'Atencao',severity_color_3 as 'Media',severity_color_4 as 'Alta', severity_color_5 as 'Desastre' FROM config";
$sql_conf = mysql_query($sql_conf);
while($array_conf = mysql_fetch_array($sql_conf)){
$Desconhecido = $array_conf['Desconhecido'];
$Informacao = $array_conf['Informacao'];
$Atencao = $array_conf['Atencao'];
$Media = $array_conf['Media'];
$Alta = $array_conf['Alta'];
$Desastre = $array_conf['Desastre'];
}
?>


estilo.css

/*=======================================================*/
.top_block {
width: 80%;
display: block;
}
/*=======================================================*/
/* Cabecalho */
.cabecalho {
width: 80%;
float: right;
background-color: #687777;
}
.cabecalho h1{
font: 24px Verdana,Calibri,times,Arial ;
text-align: center;
color: #E9E9E9;
padding: 10px 0px 10px 0px;
margin: 10px 0px 10px 0px;
}
.cabecalho h2{
font: 18px Verdana,Calibri,times,Arial;
text-align: center;
color: #E9E9E9;
padding: 5px 0px 5px 0px;
margin: 10px 0px 2px 0px;
}
/*=======================================================*/
/* Nivel Esquerdo */
.nivel_e {
width:25%;
float: left;
background-attachment:scroll;
border-top:0px transparent #3a3a3a;
border-bottom:0px transparent #3a3a3a;
border:1px transparent #3a3a3a;
z-index: 99999;
}
.nivel_e div{
width:100%;
height: 24.5%;
vertical-align: top;
display: table-cell;
border: #000000 1px teal;
font-size: 9px;
font-family: Verdana,Calibri,Times;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.nivel_e ul{
width:98%;
float: left;
border-top: 0px solid;
border-bottom: 1px solid;
font-family: Times;
padding: 0px 0px 0px 0px;
margin: 0px;
}
.nivel_e li{
font: bold 13px Calibri,Times,Verdana;
float: left;
color: black;
list-style: none;
border: 1px teal;
padding: 0px 0px 0px 3px;
}
.nivel_e h4{
font-variant: small-caps;
font: bold 12px Verdana,Calibri,times,Arial;
text-align: center;
color: #327195;
padding: 1px 0px 1px 0px;
margin: 0px 0px 2px 0px;
text-transform: uppercase;
}
/*=======================================================*/
/* Nivel Direito */
.nivel {
width:74%;
float: right;
background-attachment:scroll;
border-top:0px transparent #3a3a3a;
border-bottom:0px transparent #3a3a3a;
padding: 0px 0px 0px 0px;
margin:0px 0px 0px 0px;
z-index: 99999;
text-align: justify;
}
.nivel div{
width:100%;
height: auto;
vertical-align: middle;
display: table-cell;
background-position:top left;
border: #000000 1px transparent;
float:left;
font-size: 9px;
font-family: Verdana,Calibri,Times;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.nivel_ div{
width:99%;
height: auto;
vertical-align: middle;
display: table-cell;
background-position:top left;
border: #000000 1px transparent;
float:left;
font-size: 9px;
font-family: Verdana,Calibri,Times;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.nivel ul{
width:100%;
float: left;
border-top: 1px transparent;
border-bottom: 1px solid;
font-family: Times;
padding: 0px 0px 0px 0px;
margin: 0px;
}
.nivel li{
font: bold 15px Calibri,Times,Verdana;
float: left;
color: black;
list-style: none;
border: 1px teal;
text-transform: uppercase;
vertical-align: middle;
padding: 0px 0px 0px 3px;
}
.nivel h1{
width: 100%;
font: 28px Verdana,Calibri,times,Arial;
text-align: center;
background-color: #adbbbb;
color: #364444;
padding: 5px 0px 5px 0px;
margin: 2px 0px 2px 0px;
}
.nivel h2{
width: 100%;
font: 18px Verdana,Calibri,times,Arial;
text-align: center;
background-color: #adbbbb;
color: #364444;
padding: 2px 0px 2px 0px;
margin: 2px 0px 2px 0px;
}
.nivel h4{
font-variant: small-caps;
font: 8px Verdana,Calibri,times,Arial;
text-align: left;
color: #fff;
padding: 2px 0px 2px 0px;
margin: 2px 0px 2px 0px;
}
/*=======================================================*/
/* Nivel Weathermap */
.weathermap {
width:100%;
height: 100%;
float: right;
background-attachment:scroll;
border-top:0px transparent #3a3a3a;
border-bottom:0px transparent #3a3a3a;
padding: 0px 0px 0px 0px;
margin:0px 0px 0px 0px;
z-index: 99999;
text-align: justify;
}
.weathermap div{
width:100%;
height: auto;
vertical-align: middle;
display: table-cell;
background-position:top left;
border: #000000 0px transparent;
float:left;
font-size: 9px;
font-family: Verdana,Calibri,Times;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.weathermap_ div{
width:99%;
height: 5%;
vertical-align: middle;
border: #000000 0px transparent;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.weathermap_c div{
width:95%;
height: 90%;
vertical-align: middle;
border: #000000 0px transparent;
color: black;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
z-index: 99999;
}
.weathermap h1{
width: 100%;
font: 28px Verdana,Calibri,times,Arial;
text-align: center;
background-color: #adbbbb;
color: #364444;
padding: 5px 0px 5px 0px;
margin: 2px 0px 2px 0px;
}
.weathermap h2{
width: 100%;
font: 18px Verdana,Calibri,times,Arial;
text-align: center;
background-color: #adbbbb;
color: #364444;
padding: 2px 0px 2px 0px;
margin: 2px 0px 2px 0px;
}
.weathermap h4{
font-variant: small-caps;
font: 8px Verdana,Calibri,times,Arial;
text-align: left;
color: #fff;
padding: 2px 0px 2px 0px;
margin: 2px 0px 2px 0px;
}
/*=======================================================*/
/* Rodape */
.rodape {
width: 74%;
float: right;
vertical-align: bottom;
}
.rodape div{
width:100%;
height: auto;
vertical-align: bottom;
display: table-cell;
background-position:top left;
border: #000000 1px transparent;
float:left;
font-size: 9px;
font-family: Verdana,Calibri,Times;
color: black;
z-index: 99999;
}
.rodape ul{
background-color: #fff;
width:100%;
float: left;
border: 1px transparent;
font-family: Times;
padding: 0px 0px 0px 0px;
margin: 0px;
}
.rodape li{
width: 16.454%;
font: bold 14px Calibri,Times;
float: left;
color: black;
list-style: none;
border: 1px solid;
text-align: center;
}
.rodape h2{
width: 100%;
font: 13px Verdana,Calibri,times,Arial bold;
text-align: center;
background-color: #adbbbb;
color: #364444;
padding: 2px 0px 2px 0px;
margin: 2px 0px 2px 0px;
}


Acho que é isso. Veja se ajuda. Já adianto que não sou programador, por isso está uma zona estes códigos fontes.

Att.:


6. Dúvidas Criação de Telas Zabbix

Paula Barbosa
psobral1

(usa Debian)

Enviado em 20/05/2015 - 16:37h

Boa tarde,

Gostei muito da sua solução em php, vi os códigos. Gostaria de saber se você ainda tem os códigos dos arquivos severidade.php e conecta.php? pois não encontrei.

Obrigada


7. Re: Criação de Telas Zabbix. [RESOLVIDO]

Leandro Rubert Jacomini
leojaco25

(usa XUbuntu)

Enviado em 21/05/2015 - 08:16h

Opa,

Valeu pelo elogio. Lembrando que não sou programador, e tudo o que fiz foi apenas transcrever para a página o que eu escrevi numa folha. Apenas isso. Mas segue o código da severidade.php. O código do conecta.php é um padrão, que peguei da internet, e apenas fiz os ajustes para conectar no DB. Segue o código, porém você deve ter um mais completo e melhor (troquei os dados da minha base por outros, mas o conceito é o mesmo).

Severidade:
<?php
if($array_tr['priority'] == "0"){
$color = $Desconhecido;
$prioridade = "Desconhecido";
$fontcolor = "000000";
}elseif($array_tr['priority'] == "1"){
$color = $Informacao;
$prioridade = "Informacao";
$fontcolor = "000000";
}elseif($array_tr['priority'] == "2"){
$color = $Atencao;
$prioridade = "Atencao']";
$fontcolor = "#000000";
}elseif($array_tr['priority'] == "3"){
$color = $Media;
$prioridade = "Media";
$fontcolor = "#000000";
}elseif($array_tr['priority'] == "4"){
$color = $Alta;
$prioridade = "Alta";
$fontcolor = "000000";
}else{
$color = $Desastre;
$prioridade = "Desastre";
$fontcolor = "ffffdd";
}
?>


Conecta:
<?php
$dbname="zabbix";
$usuario="zabbix";
$password="zabbix";
$IP="XXX.XXX.XXX.XXX";
//1o passo - Conecta ao servidor MySQL
if(!($id = mysql_connect($IP,$usuario,$password))) {
echo "<p align=\"center\"><big><strong>Nao foi possivel conectar com o gerenciador MySQL. Favor Contactar o Administrador.</strong></big></p>";
}
//2o passo - Seleciona o Banco de Dados
if((!$con = mysql_select_db($dbname,$id))) {
echo "<p align=\"center\"><big><strong>Nao foi possivel conectar com a base ".$dbname.". Favor Contactar o Administrador.</strong></big></p>";
}
?>


Como pode ver, super simples. Peguei de uma apostila que baixei da internet, e apenas moldei numa forma, para usar em todas as páginas (que são beeeeeemmmmm poucas) que eu faço. Se alguém tiver algo melhor, sintam-se à vontade. A propósito, o Zabbix, apesar de ser bem completo, não se adaptou à nossa realidade, e vamos continuar com o nágios, weathermap e cacti.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts