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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يتم تعريف كل مثيل 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. السيارات عند القبول ، كل ما وصل: جميع المركبات ذات الحالة للفترة "- 72 ساعة من الوقت الحالي" - معرّف استعلام SQL: com.getCars.
  2. تاريخ جميع حالات السيارة: حالات جميع المركبات مع الوصول في غضون 72 ساعة - معرف استعلام SQL: السيارات.
  3. المركبات المجدولة للقبول: حالات جميع المركبات مع الوصول في الحالة "المجدولة" ، الفاصل الزمني "- 24 ساعة" و "+24 ساعة" من الوقت الحالي - معرّف استعلام SQL: سيارات.

لذلك ، بعد أن قررنا مجموعة من مقاييس تشغيل المستودع ، سنقوم بإعداد استعلامات 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 (افتراضيًا - / usr / local / share / zabbix / externalscripts).

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

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

البرنامج النصي التالي ، دعنا نسميه 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. للإعدادات ، انتقل إلى المسار التالي:

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

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

تحديد المضيفات الخاضعة للرقابة:

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

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

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

حدد مجموعة العقدة ، بالإضافة إلى عنوان IP أو اسم DNS للعقدة من قاعدة البيانات.

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

الإعدادات → العقد → "اسم المضيف" → العناصر> إنشاء عنصر

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

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

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

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

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

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

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

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

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

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

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

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

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

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

المصدر: www.habr.com

إضافة تعليق