DIY: كيف يمكننا أتمتة مراقبة المستودعات

تدير X5 43 مركز توزيع و 4029 شاحنة خاصة ، وهي توفر إمدادات مستمرة من المنتجات في 15752 متجراً. سأشارك في المقال في تجربة إنشاء نظام تفاعلي من البداية لمراقبة أحداث المستودعات. ستكون المعلومات مفيدة للوجستيات الخاصة بالشركات التجارية حيث تدير العشرات من مراكز التوزيع مجموعة واسعة من المنتجات.



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

النظر في نهج نحتاج فيه فقط إلى جزء صغير من الاستشارات المتعلقة بتحديد المصادر (الجداول) للحصول على مؤشرات من النظام.

تكمن خصوصية مستودعاتنا في حقيقة أن العديد من أنظمة إدارة المستودعات (WMS Exceed) تعمل على نفس المجمع اللوجستي. يتم تقسيم المستودعات وفقًا لفئات تخزين البضائع (الجافة ، الكحول ، التجميد ، إلخ) ليس فقط من الناحية المنطقية. داخل مجمع لوجستي واحد يوجد العديد من مباني المستودعات المنفصلة ، تتم إدارة العمليات على كل منها بواسطة WMS الخاصة بهم.



لتكوين صورة عامة للعمليات التي تحدث في المستودع ، يقوم المديرون بتحليل تقارير كل WMS عدة مرات في اليوم ، ويقومون بمعالجة الرسائل من مشغلي المستودعات (المستقبلات ، المنتقيون ، المعبئون) ويلخصون مؤشرات التشغيل الفعلية المراد عرضها على لوحة المعلومات.

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

بعد تقييم مقدار العمل الذي يجب القيام به لبناء نظام جديد ، تقرر تقسيم المشروع إلى عدة مراحل:

  1. مجموعة من المؤشرات حول عمليات المستودعات والتصور والتحكم في المؤشرات والانحرافات
  2. أتمتة معايير العملية وتسجيل الطلبات في خدمة خدمات الأعمال للانحرافات
  3. مراقبة استباقية مع التنبؤ بالأحمال وتقديم توصيات إلى المديرين.

في المرحلة الأولى ، يجب على النظام جمع شرائح من البيانات التشغيلية المعدة من جميع مجمعات WMS. تتم القراءة في الوقت الفعلي تقريبًا (فواصل زمنية تقل عن 5 دقائق). الحيلة هي أنه يجب الحصول على البيانات من DBMS من عشرات المستودعات عند نشر النظام على الشبكة بالكامل. تتم معالجة البيانات التشغيلية المستلمة بواسطة المنطق الأساسي للنظام لحساب الانحرافات عن المؤشرات المخططة وحساب الإحصاءات. يجب أن يتم عرض البيانات التي تمت معالجتها بهذه الطريقة على لوحة المدير أو على لوحة معلومات المستودع في شكل رسوم بيانية ورسوم بيانية واضحة.



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

العمارة العامة للنظام كما هو مبين في الشكل.



يتم تعريف كل مثيل WMS كمضيف لنظام المراقبة. يتم جمع المقاييس بواسطة خادم مركزي في شبكة مركز البيانات عن طريق تشغيل برنامج نصي باستخدام استعلام SQL معد. إذا كنت بحاجة إلى مراقبة نظام لا يوصي بالوصول المباشر إلى قاعدة البيانات (على سبيل المثال ، SAP EWM) ، فيمكنك استخدام مكالمات البرنامج النصي لوظائف API الموثقة لكتابة المؤشرات أو كتابة برنامج python / vbascript بسيط.

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

لعرض الرسوم البيانية ومؤشرات المستودع على خادم Zabbix المركزي ، قم بنشر Grafana. بالإضافة إلى إخراج لوحات المعلومات المعدة مع الرسوم البيانية للمستودعات ، سيتم استخدام Grafana للتحكم في انحراف المؤشرات ونقل التنبيهات التلقائية إلى نظام خدمة المستودعات للعمل مع الحوادث التجارية.

كمثال ، فكر في تطبيق التحكم في تحميل منطقة قبول المستودع. كما تم تحديد المؤشرات الرئيسية للعمليات في هذا القسم من المستودع:

  • عدد المركبات في منطقة الاستقبال ، مع مراعاة الحالات (المخطط لها ، وصلت ، الوثائق ، التفريغ ، المغادرة ؛
  • احتقان مناطق التنسيب والتجديد (وفقًا لظروف التخزين).

إعدادات


يوصف تركيب وتكوين المكونات الرئيسية للنظام (SQLcl ، Zabbix ، Grafana) في مصادر مختلفة ولن نكررها هنا. إن استخدام SQLcl بدلاً من SQLplus يرجع إلى حقيقة أن SQLcl (واجهة سطر أوامر Oracle DBMS المكتوبة بلغة جافا) لا تتطلب تثبيتًا إضافيًا لـ Oracle Client ولا تعمل خارج المربع.

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

الشيء الرئيسي هو أنه عند تطبيق مثل هذا النظام ، من الممكن الاستغناء عن البرمجة ، باستخدام الإعدادات التي يوفرها النظام.

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

بصفتنا "تجريبيًا" لتصحيح الأخطاء وضبطها ، نستخدم أوراق عمل WMS للتحكم في الاستقبال:

  1. TS على القبول ، كل ما وصل: كل TS مع الحالات للفترة "- 72 ساعة من الوقت الحالي" - معرف استعلام SQL: getCars .
  2. تاريخ جميع حالات المركبة: حالات جميع المركبات مع وصول 72 ساعة - معرف استعلام SQL: carsHistory .
  3. المركبات المجدولة للقبول: حالات جميع المركبات التي لها حالة "مجدولة" ، الفاصل الزمني هو " -24 ساعة" و "+24 ساعة" من الوقت الحالي - معرف استعلام SQL: carsIn .

لذلك ، بعد أن قررنا مجموعة من مقاييس المستودعات ، سنقوم بإعداد استعلامات SQL لقاعدة بيانات WMS. لتنفيذ الاستعلامات ، يُنصح بعدم استخدام قاعدة البيانات الرئيسية ، بل باستخدام نسختها الاحتياطية "الساخنة".

نحن متصلون ببرنامج Oracle DBMS الاحتياطي للحصول على البيانات. عنوان IP للاتصال بقاعدة الاختبار 192.168.1.106 . يتم حفظ معلمات الاتصال على خادم Zabbix في TNSNames.ORA لمجلد SQLcl العامل:

# cat /opt/sqlcl/bin/TNSNames.ORA WH1_1= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = WH1_1) ) ) 

سيتيح لنا ذلك تشغيل استعلامات SQL لكل مضيف من خلال EZconnect ، مع تحديد اسم المستخدم / كلمة المرور واسم قاعدة البيانات فقط:

 # sql znew/Zabmon1@WH1_1 

يتم حفظ استعلامات SQL المعدة في مجلد العمل على خادم Zabbix:

 /etc/zabbix/sql 

والسماح بالوصول إلى مستخدم zabbix لخادمنا:

 # chown zabbix:zabbix -R /etc/zabbix/sql 

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

نحن نعد البرنامج النصي الرئيسي ، دعنا نسميه wh_Metrics.sh ، لاستدعاء استعلام SQL إلى قاعدة البيانات ، وحفظ النتائج وإرجاع المقياس التقني مع مؤشرات النجاح للحصول على البيانات:

 #!/bin/sh ##  </i> export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/bin export TNS_ADMIN=$ORACLE_HOME/network/admin export JAVA_HOME=/ alias sql="opt/sqlcl/bin/sql" ##      sql-     scriptLocation=/etc/zabbix/sql sqlFile=$scriptLocation/sqlScript_"$2".sql ##        resultFile=/etc/zabbix/sql/mon_"$1"_main.log ##      username="$3" password="$4" tnsname="$1" ##     var=$(sql -s $username/$password@$tnsname < $sqlFile) ##        echo $var | cut -f5-18 -d " " > $resultFile ##    if grep -q ora "$resultFile"; then echo null > $resultFile echo 0 else echo 1 fi 

نضع الملف النهائي مع البرنامج النصي في المجلد لاستضافة البرامج النصية الخارجية وفقًا لإعدادات تكوين Zabbix-proxy (افتراضيًا - / usr / local / share / zabbix / externalscripts ).

سيتم إرسال تعريف قاعدة البيانات التي سيتلقى منها البرنامج النصي النتائج بواسطة معلمة البرنامج النصي. يجب أن يتوافق معرف قاعدة البيانات مع سطر الإعدادات في ملف TNSNames.ORA.

يتم حفظ نتيجة استدعاء استعلام SQL في ملف النموذج mon_base_id_main.log ، حيث base_id = تم الحصول على معرف DB كمعلمة برنامج نصي. يتم توفير فصل ملف النتيجة بمعرفات قاعدة البيانات في حالة الطلبات من الخادم في وقت واحد إلى عدة قواعد بيانات. إرجاع الاستعلام صفيف ثنائي الأبعاد فرز القيم.

البرنامج النصي التالي ، دعنا نسميه getMetrica.sh ، مطلوب للحصول على المقياس المحدد من الملف بنتيجة الطلب:

 #!/bin/sh ##       resultFile=/etc/zabbix/sql/mon_”$1”_main.log ##      : ##    ,      (RSLT)   ## {1 1 2 2…}   ( IFS) ##          IFS=' ' str=$(cat $resultFile) status_id=null read –ra RSLT <<< “$str” for i in “${RSLT[@]}”; do if [[ “$status_id” == null ]]; then status_id=”$I" elif [[ “$status_id” == “$2” ]]; then echo “$i” break else status_id=null fi done 

نحن الآن على استعداد لإعداد Zabbix والبدء في مراقبة أداء عمليات قبول المستودعات.

على كل عقدة قاعدة بيانات ، يتم تثبيت وكيل Zabbix وتكوينه.

على الخادم الرئيسي ، نقوم بتعريف جميع الخوادم التي تحتوي على وكلاء Zabbix. للحصول على الإعدادات ، انتقل إلى المسار التالي:

الإدارة → الوكلاء → إنشاء وكيل



تحديد المضيفين التي تسيطر عليها:

الإعدادات → المضيفين → إنشاء المضيف



يجب أن يتطابق اسم المضيف مع اسم المضيف المحدد في ملف تكوين الوكيل.

نحن نشير إلى مجموعة العقدة ، وكذلك عنوان IP أو اسم DNS للعقدة من قاعدة البيانات.

نقوم بإنشاء مقاييس وتحديد خصائصها:

الإعدادات ← العقد ← اسم العقدة ← عناصر البيانات> إنشاء عنصر البيانات

1) إنشاء مقياس أساسي للاستعلام عن جميع المعلمات من قاعدة البيانات



قمنا بتعيين اسم عنصر البيانات ، ونشير إلى نوع "التحقق الخارجي". في حقل "المفتاح" ، نحدد البرنامج النصي الذي ننقل إليه اسم قاعدة بيانات Oracle ، واسم استعلام sql ، وتسجيل الدخول وكلمة المرور للاتصال بقاعدة البيانات كمعلمات. قم بتعيين الفاصل الزمني للتحديث للطلب إلى 5 دقائق (300 ثانية).

2) قم بإنشاء المقاييس المتبقية لكل حالة مركبة. سيتم تكوين قيم هذه المقاييس بناءً على نتيجة التحقق من المقياس الرئيسي.



قمنا بتعيين اسم عنصر البيانات ، ونشير إلى نوع "التحقق الخارجي". في حقل "المفتاح" ، نحدد البرنامج النصي الذي ننقل إليه اسم قاعدة بيانات أوراكل ورمز الحالة ، والتي نرغب في تتبعها كمعلمات. قمنا بتعيين الفاصل الزمني للتحديث للطلب 10 ثوانٍ أطول من المقياس الرئيسي (310 ثانية) بحيث يمكن كتابة النتائج في الملف.

للحصول على المقاييس بشكل صحيح ، من المهم الترتيب الذي يتم به تنشيط الاختبارات. لتجنب التعارضات عند تلقي البيانات ، أولاً وقبل كل شيء ، قم بتنشيط القياس الرئيسي لـ GetCarsByStatus باستخدام مكالمة نصية - wh_Metrics.sh.

الإعدادات ← العقد ← اسم العقدة ← عناصر البيانات ← مرشح فرعي "الشيكات الخارجية". نحتفل بالتحقق اللازم ، ثم انقر فوق "تنشيط".



بعد ذلك ، قم بتنشيط المقاييس المتبقية في عملية واحدة ، وتحديدها جميعًا معًا:



بدأت Zabbix الآن في جمع مقاييس أعمال المستودعات.

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

Source: https://habr.com/ru/post/ar478872/


All Articles