نربط تقويم الإنتاج في Zabbix

كما نعلم جميعًا ، غالبًا ما تتطلب عملية عمل المؤسسة ، وفقًا للعطلات الرسمية الوطنية والدولية ، تغييرًا في عملية الإنتاج من حيث تغيير أو استبدال أيام العمل وغير أيام العمل. لدى العديد من المؤسسات تقويمات إنتاج داخلية ، تعمل في الجدول الزمني لها على العمليات التكنولوجية والعمليات التجارية. أنظمة المراقبة التي تعمل بشكل مستقل ، غالبًا ما يتم تكوينها لمراقبة عمليات الأعمال في سياق العمل العادي ولديها جدول ثابت ثابت لرصد تدفق المعلومات والبيانات المصاحبة لعمليات الأعمال. في وقت تغيير جدول العمل اليومي ، يطلب المسؤولون إجراءات يدوية لتغيير منطق المراقبة.كيف تجعل Zabbix يستخدم تقويم الإنتاج؟ دعونا نفكر في بعض الخيارات بمزيد من التفصيل.


المقدمة


يعلم كل من عمل مع Zabbix أن منطق مراقبة خدمات معينة يتشكل باستخدام قوالب تتصل بالخوادم مع خدمات خاضعة للرقابة. إن تغيير منطق العمل أو الجدول الزمني لفحص الخدمات هو مهمة تستغرق وقتًا طويلاً ، والتي تعتمد على عدد العناصر التي يتم التحكم فيها. تغيير جدول العمل ، عندما يتم الإعلان عن يوم عطلة بدلاً من يوم العمل ، لتجنب تشغيل المشغلات الخاطئة للأحداث ، يجبر المسؤولين على إرسال دائرة المراقبة إلى وضع الصيانة "الصيانة". في حالة يوم عمل في عطلة نهاية الأسبوع ، يجب عليك تضمين الكثير من خدمات المراقبة للتحكم في عمل العمليات التجارية.


التوصية الرسمية للجدولة المرنة لمشغلات المراقبة من Zabbix هي استبدال معلمات دورات المسح بوحدات الماكرو العالمية
https://habr.com/en/company/zabbix/blog/344492/ .
لكن هذا الحل لا يسمح لأتمتة عملية
تشغيل / إيقاف خدمات الفحص وفقًا لجدول زمني في شكل صريح.


خادم Zabbix هو نظام مستقل يعمل بشكل واضح في إطار منطقه الداخلي. لذلك ، لا ينصح بالتأثيرات الخارجية على النظام.


دعونا نحاول تنفيذ منطق تقويم الإنتاج بناءً على آليات 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
ابورش


All Articles