Wir verbinden einen Produktionskalender in Zabbix

Wie wir alle wissen, erfordert der Arbeitsprozess eines Unternehmens gemäß den offiziellen nationalen und internationalen Feiertagen häufig eine Änderung des Produktionsprozesses in Bezug auf die Verlagerung oder Ersetzung von Arbeits- und Nichtarbeitstagen. Viele Organisationen haben interne Produktionskalender, auf deren Zeitplan technologische und geschäftliche Prozesse ablaufen. Autonom arbeitende Überwachungssysteme sind häufig so konfiguriert, dass sie Geschäftsprozesse als Teil der normalen Aktivitäten des Unternehmens überwachen und einen festen Zeitplan für die Überwachung des Informationsflusses und der mit Geschäftsprozessen verbundenen Daten haben. Zum Zeitpunkt der Änderung des täglichen Arbeitsplans benötigen Administratoren manuelle Aktionen, um die Überwachungslogik zu ändern.Wie kann Zabbix einen Produktionskalender verwenden? Lassen Sie uns einige Optionen genauer betrachten.


Einführung


Jeder, der mit Zabbix gearbeitet hat, weiß, dass die Logik der Überwachung bestimmter Dienste mithilfe von Vorlagen gebildet wird, die eine Verbindung zu Servern mit kontrollierten Diensten herstellen. Das Ändern der Arbeitslogik oder des Zeitplans für die Überprüfung von Diensten ist eine ziemlich zeitaufwändige Aufgabe, die von der Anzahl der gesteuerten Elemente abhängt. Wenn Sie den Arbeitszeitplan ändern, wenn anstelle des Arbeitstages ein Feiertag deklariert wird, um ein fehlerhaftes Auslösen von Auslösern für Ereignisse zu vermeiden, werden Administratoren gezwungen, den Überwachungskreis in den Wartungsmodus zu senden. Bei einem Arbeitstag am Wochenende müssen Sie viele Überwachungsdienste einbeziehen, um die Arbeit der Geschäftsprozesse zu steuern.


Die offizielle Empfehlung für eine flexible Planung von Überwachungsauslösern von Zabbix besteht darin, die Parameter der Scan-Zyklen durch globale Makros zu ersetzen:
https://habr.com/en/company/zabbix/blog/344492/ .
Diese Lösung ermöglicht es jedoch nicht, den Ein
/ Aus-Prozess zum Überprüfen von Diensten nach einem Zeitplan in expliziter Form zu automatisieren .


Der Zabbix-Server ist ein autonomes System, das eindeutig im Rahmen seiner internen Logik arbeitet. Daher werden externe Einflüsse auf das System nicht empfohlen.


Versuchen wir, die Logik des Produktionskalenders basierend auf internen Zabbix-Mechanismen zu implementieren.


, . , .
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