Kami menghubungkan kalender produksi di Zabbix

Seperti kita ketahui, proses bisnis suatu perusahaan, sesuai dengan hari libur nasional dan internasional yang resmi, seringkali memerlukan perubahan dalam proses produksi dalam hal pengalihan atau penggantian hari kerja dan non-kerja. Banyak organisasi memiliki kalender produksi internal, sesuai jadwal yang menjalankan proses teknologi dan bisnis. Sistem pemantauan yang bekerja secara mandiri, sering dikonfigurasi untuk memantau proses bisnis dalam kegiatan bisnis normal dan memiliki jadwal tetap yang tetap untuk memantau aliran informasi dan data yang menyertai proses bisnis. Pada saat mengubah jadwal kerja harian, administrator memerlukan tindakan manual untuk mengubah logika pemantauan.Bagaimana cara agar Zabbix menggunakan kalender produksi? Mari kita pertimbangkan beberapa opsi lebih terinci.


pengantar


Setiap orang yang bekerja dengan Zabbix tahu bahwa logika pemantauan layanan tertentu dibentuk menggunakan templat yang terhubung ke server dengan layanan terkontrol. Mengubah logika kerja atau jadwal untuk memeriksa layanan adalah tugas yang agak memakan waktu, yang tergantung pada jumlah elemen yang dikendalikan. Mengubah jadwal kerja, ketika hari libur dinyatakan sebagai hari libur, untuk menghindari pemicu pemicu peristiwa yang salah, memaksa administrator untuk mengirim sirkuit pemantauan ke mode pemeliharaan "Maintenance". Dalam hal hari kerja di akhir pekan, Anda harus menyertakan banyak layanan pemantauan untuk mengontrol pekerjaan proses bisnis.


Rekomendasi resmi untuk penjadwalan fleksibel pemicu pemantauan dari Zabbix adalah mengganti parameter siklus pemindaian dengan makro global
https://habr.com/en/company/zabbix/blog/344492/ .
Tetapi solusi ini tidak memungkinkan untuk mengotomatiskan proses
on / off memeriksa layanan pada jadwal dalam bentuk eksplisit.


Server Zabbix adalah sistem otonom yang jelas bekerja dalam kerangka logika internalnya. Karena itu, pengaruh eksternal pada sistem tidak direkomendasikan.


Mari kita coba menerapkan logika kalender produksi berdasarkan mekanisme Zabbix internal.


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