Conectamos um calendário de produção no Zabbix

Como todos sabemos, o processo de trabalho de uma empresa, de acordo com os feriados nacionais e internacionais oficiais, geralmente exige uma mudança no processo de produção em termos de troca ou substituição de dias úteis e não úteis. Muitas organizações possuem calendários de produção internos, cujo cronograma funciona nos processos tecnológicos e de negócios. Os sistemas de monitoramento que funcionam de forma autônoma, geralmente são configurados para monitorar processos de negócios no curso normal dos negócios e têm um planejamento fixo fixo para monitorar fluxos de informações e dados que acompanham os processos de negócios. No momento de alterar o horário de trabalho diário, os administradores exigem ações manuais para alterar a lógica de monitoramento.Como fazer com que o Zabbix use um calendário de produção? Vamos considerar algumas opções com mais detalhes.


Introdução


Todo mundo que trabalhou com o Zabbix sabe que a lógica de monitorar certos serviços é formada usando modelos que se conectam a servidores com serviços controlados. Alterar a lógica do trabalho ou o cronograma de verificação dos serviços é uma tarefa bastante demorada, que depende do número de elementos controlados. Alterar a programação de trabalho, quando um feriado é declarado em vez do dia útil, a fim de evitar o acionamento incorreto de gatilhos para eventos, obriga os administradores a enviar o circuito de monitoramento para o modo de manutenção "Manutenção". No caso de um dia útil no fim de semana, você deve incluir muitos serviços de monitoramento com as mãos para controlar o trabalho dos processos de negócios.


A recomendação oficial para agendamento flexível de gatilhos de monitoramento do Zabbix é substituir os parâmetros dos ciclos de varredura por macros globais
https://habr.com/en/company/zabbix/blog/344492/ .
Mas essa solução não permite automatizar o
processo on / off de verificação de serviços em uma programação de forma explícita.


O servidor Zabbix é um sistema autônomo que funciona claramente dentro da estrutura de sua lógica interna. Portanto, influências externas no sistema não são recomendadas.


Vamos tentar implementar a lógica do calendário de produção com base nos mecanismos internos do Zabbix.


, . , .
github.com, .



Zabbix :


  • Zabbix
  • Zabbix
  • ()

Zabbix


Zabbix :


  • ,
  • ""


  • , /
  • ,
  • HTTP/HTTPS


:




  • Zabbix-agent. Zabbix-agent
  • , ,

№1


.
{$DATEURL} . "HTTP agent" "holiday.date.by.http".


( 1). 1. .



.
"Preprocessing" "$.date".



, "holiday.date.by.http" .


"Calculated" "today.is.a.holiday"



:
last(holiday.date.by.http)=date(system.localtime)
"Numeric(Unsigned)"


, 0 1.


, 0 1 . , "" , . .


, :


  • " "
  • " "

" "


" " . .


:


{Zabbix server:system.users.num.last()}>1


{Zabbix server:system.users.num.last()}>1 and {Zabbix server:today.is.a.holiday.last()}=0

.
.


" "


"/".


"today.is.a.holiday" .



.



.


. "{Zabbix server:system.users.num.last()}>1", 1.


"{Zabbix server:proc.num.last()}>20"


""





(, TG, SMS).


. . .


№2


, Zabbix . , . .
?


1


- , .


2


, .


, .
, . {$HOLIDAY_DATE}. , , Zabbix-agent, {$CURRENT_DATE} .


InfluxDB. , 1 5 .


InfluxDB


, . fuzzytime . .



                <item>
                    <name>Today is a holiday</name>
                    <type>CALCULATED</type>
                    <key>influxdb.holiday</key>
                    <history>1h</history>
                    <trends>0</trends>
                    <params>date(system.localtime)={$HOLIDAY_DATE}</params>
                    <applications>
                        <application>
                            <name>InfluxDB DataCheck</name>
                        </application>
                    </applications>
                    <triggers>
                        <trigger>
                            <expression>{last()}</expression>
                            <name>InfluxDB Holiday Activated</name>
                            <opdata>If Fired - all dependent triggers are disabled</opdata>
                            <priority>INFO</priority>
                            <description>       </description>
                        </trigger>
                    </triggers>
                </item>

.
, .


     <params>{$CURRENT_DATE}={$HOLIDAY_DATE}</params>

, .


"" , " , Zabbix ?"


, , . Zabbix JSON RPC, , . Zabbix , , . , Zabbix , .




Preprocessing .



Preprocessing Script
//Zabbix.Log(2, 'Date Update request value='+value);
var authtoken = '';
var globalmacroid = -1;

var req = new CurlHttpRequest();
req.AddHeader('Content-Type: application/json');
resp = req.Post("{$DATEURL}", '{}');
var holidaydate = JSON.parse(resp).date;

Zabbix.Log(2, 'Found new holiday date='+holidaydate);

resp = req.Post("{$JSONRPC}", '{"jsonrpc": "2.0","method": "user.login","params": {"user": "Calendar","password": "SomePassword"},"id": 1}');

//   

if (req.Status() == 200) {
    jv = JSON.parse(resp);
    if (jv.result)
       authtoken= jv.result;
    else
       return 0;
}
else
    return 0;

//    

var reqmacros = 
{
    "jsonrpc": "2.0",
    "method": "usermacro.get",
    "params": {
        "output": "extend",
        "globalmacro": true
    },
    "auth": authtoken,
    "id": 1
}

resp = req.Post("{$JSONRPC}", JSON.stringify(reqmacros));
if (req.Status() == 200) {
    var jv = JSON.parse(resp);
    for(item in jv.result) {
        if (jv.result[item].macro == '{\$HOLIDAY_DATE}')
            {
                globalmacroid = jv.result[item].globalmacroid
                Zabbix.Log(2, 'Old Date value: '+jv.result[item].value)
            }
        }
    if (globalmacroid == -1)
        return 0;
}
else
{
    return 0;
}

//      

var changemacros = 
{   "jsonrpc": "2.0",
    "method": "usermacro.updateglobal",
    "params": {
        "globalmacroid": globalmacroid,
        "value": holidaydate
    },
    "auth": authtoken,
    "id": 1
}

resp = req.Post("{$JSONRPC}", JSON.stringify(changemacros));

if (req.Status() == 200) {
   jv = JSON.parse(resp);
   if (jv.result.globalmacroids.indexOf(globalmacroid) != -1)
        return 1
}
return 0;

"{$HOLIDAY_DATE}" "{$CURRENT_DATE}". , . — . .


, , / , -, / .


P.S.: , WEB , "HTTP agent" .
github.com


UPD: .


" ". 4.X , . , .


© Aborche 2020
Aborche


All Articles