إدخال البيانات للنشر
نتائج التعلم
بنهاية هذه الجلسة العملية، ستكون قادرًا على:
- تشغيل سير عمل
wis2box
عن طريق تحميل البيانات إلى MinIO باستخدام واجهة MinIO على الويب، أو SFTP، أو سكربت Python. - الوصول إلى لوحة تحكم Grafana لمراقبة حالة إدخال البيانات وعرض سجلات مثيل
wis2box
الخاص بك. - عرض إشعارات بيانات WIS2 التي ينشرها
wis2box
الخاص بك باستخدام MQTT Explorer.
المقدمة
في WIS2، يتم مشاركة البيانات في الوقت الفعلي باستخدام إشعارات بيانات WIS2 التي تحتوي على رابط "قياسي" يمكن من خلاله تنزيل البيانات.
لتشغيل سير العمل الخاص بالبيانات في WIS2 Node باستخدام برنامج wis2box
، يجب تحميل البيانات إلى الحاوية wis2box-incoming في MinIO، مما يؤدي إلى بدء سير عمل بيانات wis2box
لمعالجة البيانات ونشرها.
لمراقبة حالة سير عمل بيانات wis2box
، يمكنك استخدام لوحة تحكم Grafana وMQTT Explorer. تستخدم لوحة تحكم Grafana البيانات من Prometheus وLoki لعرض حالة wis2box
الخاص بك، بينما يسمح لك MQTT Explorer برؤية إشعارات بيانات WIS2 التي ينشرها مثيل wis2box
الخاص بك.
في هذا القسم، سنركز على كيفية تحميل البيانات إلى مثيل wis2box
الخاص بك والتحقق من نجاح الإدخال والنشر. سيتم تغطية تحويل البيانات لاحقًا في الجلسة العملية أدوات تحويل البيانات.
لاختبار عملية إدخال البيانات يدويًا، سنستخدم واجهة MinIO على الويب، التي تتيح لك تنزيل وتحميل البيانات إلى MinIO باستخدام متصفح الويب.
في بيئة الإنتاج، يتم عادةً إدخال البيانات باستخدام عمليات تلقائية، مثل السكربتات أو التطبيقات التي ترسل البيانات إلى MinIO عبر S3 أو SFTP.
التحضير
يفترض هذا القسم أنك قد أكملت بنجاح الجلسة العملية تكوين مجموعات البيانات في wis2box. إذا اتبعت التعليمات في تلك الجلسة، يجب أن يكون لديك مجموعة بيانات واحدة تستخدم المكون الإضافي Universal
، وأخرى تستخدم المكون الإضافي FM-12 data converted to BUFR
.
تأكد من أنه يمكنك تسجيل الدخول إلى جهاز الطالب الافتراضي الخاص بك باستخدام عميل SSH (مثل PuTTY).
تأكد من أن wis2box
يعمل:
cd ~/wis2box/
python3 wis2box-ctl.py start
python3 wis2box-ctl.py status
تأكد من أن MQTT Explorer يعمل ومتصل بالمثيل الخاص بك باستخدام بيانات الاعتماد العامة everyone/everyone
مع اشتراك في الموضوع origin/a/wis2/#
.
لوحة تحكم Grafana
افتح لوحة تحكم Grafana المتوفرة على http://YOUR-HOST:3000
وسترى لوحة تحكم نشر بيانات wis2box
:
احتفظ بلوحة تحكم Grafana مفتوحة في متصفحك حيث سنستخدمها لاحقًا لمراقبة حالة إدخال البيانات.
استخدام واجهة MinIO على الويب
افتح واجهة MinIO على الويب المتوفرة على http://YOUR-HOST:9001
وسترى شاشة تسجيل الدخول:
لتسجيل الدخول، تحتاج إلى استخدام بيانات الاعتماد المحددة بواسطة WIS2BOX_STORAGE_USERNAME وWIS2BOX_STORAGE_PASSWORD في ملف wis2box.env
. يمكنك التحقق من قيم هذه المتغيرات عن طريق تشغيل الأوامر التالية على جهاز الطالب الافتراضي الخاص بك:
cat wis2box.env | grep WIS2BOX_STORAGE_USERNAME
cat wis2box.env | grep WIS2BOX_STORAGE_PASSWORD
بعد تسجيل الدخول، ستكون في عرض مستعرض الكائنات الخاص بـ MinIO. هنا يمكنك رؤية الحاويات المستخدمة بواسطة wis2box
:
- wis2box-incoming: هذه هي الحاوية التي تقوم بتحميل البيانات إليها لتشغيل سير عمل
wis2box
. - wis2box-public: هذه هي الحاوية التي ينشر فيها
wis2box
البيانات التي تم إدخالها ومعالجتها بنجاح.
انقر على الحاوية wis2box-incoming. جرّب الخيار لتحديد مسار جديد في هذه الحاوية عن طريق النقر على Create new path
:
أدخل مسار المجلد الجديد = new-directory وقم بتحميل ملف المثال هذا mydata.nc (انقر بزر الماوس الأيمن وحدد "حفظ باسم" لتنزيل الملف). يمكنك استخدام زر "Upload" في MinIO لتحميل الملف إلى الدليل الجديد:
سؤال
بعد تحميل الملف، كيف يمكنك معرفة ما إذا تم تشغيل سير عمل البيانات في wis2box
بنجاح؟
انقر للكشف عن الإجابة
يمكنك التحقق من لوحة تحكم Grafana لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
انظر إلى اللوحة السفلية من لوحة تحكم Grafana وسترى خطأ في التحقق من المسار يشير إلى أن المسار لا يتطابق مع أي مجموعة بيانات مكونة:
ERROR - Path validation error: Could not match http://minio:9000/wis2box-incoming/new-directory/mydata.nc to dataset, path should include one of the following: ['urn:wmo:md:int-wmo-example:synop-dataset-wis2-training', 'urn:wmo:md:int-wmo-example:forecast-dataset' ...
الإدخال والنشر: المكون الإضافي "Universal"
الآن بعد أن عرفت كيفية تحميل البيانات إلى MinIO، دعنا نحاول تحميل البيانات لمجموعة البيانات الخاصة بالتوقعات التي أنشأتها في الجلسة العملية السابقة باستخدام المكون الإضافي "Universal".
ارجع إلى واجهة MinIO على الويب في متصفحك، وحدد الحاوية wis2box-incoming
، وانقر على Create new path
.
هذه المرة تأكد من إنشاء دليل يتطابق مع معرف البيانات الوصفية لمجموعة بيانات التوقعات التي أنشأتها في الجلسة العملية السابقة:
أدخل الدليل الذي تم إنشاؤه حديثًا، وانقر على Upload
وقم بتحميل الملف الذي استخدمته سابقًا، mydata.nc، إلى الدليل الجديد. تحقق من لوحة تحكم Grafana لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
يجب أن ترى الخطأ التالي في لوحة تحكم Grafana:
ERROR - Path validation error: Unknown file type (nc) for metadata_id=urn:wmo:md:int-wmo-example:forecast-dataset. Did not match any of the following:grib2
سؤال
لماذا لم يتم إدخال البيانات ونشرها؟
انقر للكشف عن الإجابة
تم تكوين مجموعة البيانات لمعالجة الملفات ذات الامتداد .grib2
فقط. تكوين امتداد الملف هو جزء من تعيينات البيانات التي قمت بتعريفها في الجلسة العملية السابقة.
قم بتنزيل هذا الملف GEPS_18August2025.grib2 إلى جهاز الكمبيوتر الخاص بك وقم بتحميله إلى الدليل الذي أنشأته لمجموعة بيانات التوقعات. تحقق من لوحة تحكم Grafana وMQTT Explorer لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
سترى الخطأ التالي في لوحة تحكم Grafana:
ERROR - Failed to transform file http://minio:9000/wis2box-incoming/urn:wmo:md:int-wmo-example:forecast-dataset/GEPS_18August2025.grib2 : GEPS_18August2025.grib2 did not match ^.*?_(\d{8}).*?\..*$
سؤال
كيف يمكنك معالجة هذا الخطأ؟
انقر للكشف عن الإجابة
اسم الملف لا يتطابق مع التعبير النمطي الذي قمت بتعريفه في تكوين مجموعة البيانات. يجب أن يتطابق اسم الملف مع النمط ^.*?_(\d{8}).*?\..*$
، الذي يتطلب وجود تاريخ مكون من 8 أرقام (YYYYMMDD) في اسم الملف.
قم بإعادة تسمية الملف إلى GEPS_202508180000.grib2 وقم بتحميله مرة أخرى إلى نفس المسار في MinIO لإعادة تشغيل سير عمل wis2box
. (أو قم بتنزيل الملف المعاد تسميته من هنا: GEPS_202508180000.grib2.
بعد إصلاح المشكلة المتعلقة باسم الملف، تحقق من لوحة تحكم Grafana وMQTT Explorer لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
يجب أن ترى إشعار بيانات WIS2 جديدًا في MQTT Explorer:
حول المكون الإضافي Universal
يسمح المكون الإضافي "Universal" بنشر البيانات دون أي تحويل. إنه مكون إضافي تمرير يقوم بإدخال ملف البيانات ونشره كما هو. لإضافة خاصية "datetime" إلى إشعار بيانات WIS2، يعتمد المكون الإضافي على المجموعة الأولى في نمط الملف لمطابقة التاريخ للبيانات التي تقوم بنشرها.
سؤال إضافي
حاول تحميل نفس الملف مرة أخرى إلى نفس المسار في MinIO. هل تحصل على إشعار آخر في MQTT Explorer؟
انقر للكشف عن الإجابة
لا. في لوحة تحكم Grafana سترى خطأ يشير إلى أن البيانات قد تم نشرها بالفعل:
ERROR - Data already published for GEPS_202508180000-grib2; not publishing
هذا يشير إلى أن سير العمل الخاص بالبيانات قد تم تشغيله، ولكن لم يتم إعادة نشر البيانات. لن يقوم 'wis2box' بنشر نفس البيانات مرتين.
إذا كنت ترغب في إجبار النظام على إعادة إرسال الإشعار لنفس البيانات، قم بحذف البيانات من الحاوية 'wis2box-public' قبل إعادة إدخال البيانات.
الإدخال والنشر: المكون الإضافي "synop2bufr"
بعد ذلك، ستقوم بمعالجة مجموعة البيانات التي أنشأتها في الجلسة العملية السابقة باستخدام القالب = 'weather/surface-based-observations/synop'. القالب مُعد مسبقًا لتكوين المكونات الإضافية التالية للبيانات:
لاحظ أن أحد المكونات الإضافية هو تحويل بيانات FM-12 إلى BUFR (synop2bufr) والذي تم تكوينه للعمل مع الملفات ذات الامتداد txt.
قم بتنزيل بيانات العينة هذه synop_202502040900.txt (انقر بزر الماوس الأيمن واختر "حفظ باسم" لتنزيل الملف) إلى جهاز الكمبيوتر الخاص بك. أنشئ مسارًا جديدًا في MinIO يتطابق مع معرف البيانات الوصفية لمجموعة بيانات synop، وقم بتحميل بيانات العينة إلى هذا المسار.
تحقق من لوحة معلومات Grafana وMQTT Explorer لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
سؤال
لماذا لم تتلق إشعارًا في MQTT Explorer؟
اضغط لعرض الإجابة
في لوحة معلومات Grafana سترى تحذيرًا يشير إلى:
WARNING - Station 64400 not found in station file
أو إذا لم تكن هناك محطات مرتبطة بالموضوع، سترى:
ERROR - No stations found
تم تشغيل سير العمل الخاص بالبيانات، ولكن لم يتمكن المكون الإضافي من معالجة البيانات بسبب نقص بيانات المحطة الوصفية.
حول المكون الإضافي لتحويل بيانات FM-12 إلى BUFR
يحاول هذا المكون الإضافي تحويل بيانات الإدخال FM-12 إلى تنسيق BUFR.
كجزء من عملية التحويل، يضيف المكون الإضافي البيانات الوصفية المفقودة إلى بيانات الإخراج، مثل معرف محطة WIGOS، الموقع، وارتفاع البارومتر للمحطة. للقيام بذلك، يبحث المكون الإضافي عن هذه المعلومات في قائمة المحطات في مثيل 'wis2box' الخاص بك باستخدام المعرف التقليدي (5 أرقام) (64400 في هذه الحالة).
إذا لم يتم العثور على المحطة في قائمة المحطات، فلن يتمكن المكون الإضافي من إضافة البيانات الوصفية المفقودة ولن ينشر أي بيانات.
أضف المحطة بمعرف WIGOS 0-20000-0-64400
إلى مثيل 'wis2box' الخاص بك باستخدام محرر المحطات في 'wis2box-webapp'، كما تعلمت في الجلسة العملية تكوين بيانات المحطة الوصفية.
استرجع المحطة من OSCAR:
أضف المحطة إلى الموضوع '../weather/surface-based-observations/synop' واحفظ التغييرات باستخدام رمز المصادقة الخاص بك.
بعد إضافة المحطة، أعد تشغيل سير العمل الخاص بـ 'wis2box' عن طريق تحميل ملف بيانات العينة synop_202502040900.txt مرة أخرى إلى نفس المسار في MinIO.
تحقق من لوحة معلومات Grafana وMQTT Explorer للتأكد من أن البيانات قد تم نشرها بنجاح. إذا رأيت الإشعار أدناه، فهذا يعني أنك نشرت بيانات العينة synop بنجاح:
سؤال
ما هو امتداد الملف الذي تم نشره في إشعار بيانات WIS2؟
اضغط لعرض الإجابة
تحقق من قسم الروابط في إشعار بيانات WIS2 في MQTT Explorer وسترى الرابط القانوني:
{
"rel": "canonical",
"type": "application/bufr",
"href": "http://example.wis2.training/data/2025-02-04/wis/urn:wmo:md:int-wmo-example:synop-dataset/WIGOS_0-20000-0-64400_20250204T090000.bufr4",
"length": 387
}
امتداد الملف هو .bufr4
، مما يشير إلى أن البيانات تم تحويلها بنجاح من تنسيق FM-12 إلى تنسيق BUFR بواسطة المكون الإضافي.
إدخال البيانات باستخدام Python
يعد استخدام واجهة MinIO على الويب طريقة مريحة لتحميل البيانات يدويًا إلى MinIO لأغراض الاختبار. ومع ذلك، في بيئة الإنتاج، ستستخدم عادةً عمليات مؤتمتة لتحميل البيانات إلى MinIO، على سبيل المثال باستخدام سكربتات أو تطبيقات تستخدم واجهة MinIO المتوافقة مع S3.
في هذا التمرين، سنستخدم عميل Python الخاص بـ MinIO لنسخ البيانات إلى MinIO.
يوفر MinIO عميل Python، والذي يمكن تثبيته كما يلي:
pip3 install minio
على جهاز VM الخاص بك، ستكون حزمة 'minio' لـ Python مثبتة بالفعل.
انسخ الدليل exercise-materials/data-ingest-exercises
إلى الدليل الذي قمت بتعريفه كـ WIS2BOX_HOST_DATADIR
في ملف wis2box.env
الخاص بك:
cp -r ~/exercise-materials/data-ingest-exercises ~/wis2box-data/
Note
يتم تركيب WIS2BOX_HOST_DATADIR
كـ /data/wis2box/
داخل حاوية 'wis2box-management' بواسطة ملف docker-compose.yml
المضمن في دليل 'wis2box'.
يتيح ذلك مشاركة البيانات بين المضيف والحاوية.
في الدليل exercise-materials/data-ingest-exercises
، ستجد سكربت مثال copy_file_to_incoming.py
يمكن استخدامه لنسخ الملفات إلى MinIO.
حاول تشغيل السكربت لنسخ ملف بيانات العينة synop_202501030900.txt
إلى الحاوية wis2box-incoming
في MinIO كما يلي:
cd ~/wis2box-data/data-ingest-exercises
python3 copy_file_to_incoming.py synop_202501030900.txt
Note
ستواجه خطأ لأن السكربت غير مهيأ للوصول إلى نقطة النهاية MinIO على 'wis2box' الخاص بك حتى الآن.
يحتاج السكربت إلى معرفة نقطة النهاية الصحيحة للوصول إلى MinIO على 'wis2box' الخاص بك. إذا كان 'wis2box' يعمل على مضيفك، فإن نقطة النهاية MinIO متاحة على http://YOUR-HOST:9000
. كما يحتاج السكربت إلى تحديث كلمة مرور التخزين الخاصة بك والمسار في حاوية MinIO لتخزين البيانات.
تحديث السكربت وإدخال بيانات CSV
قم بتحرير السكربت copy_file_to_incoming.py
لمعالجة الأخطاء، باستخدام إحدى الطرق التالية:
- من سطر الأوامر: استخدم محرر النصوص nano
أو vim
لتحرير السكربت.
- باستخدام WinSCP: ابدأ اتصالًا جديدًا باستخدام بروتوكول الملفات SCP
ونفس بيانات الاعتماد الخاصة بعميل SSH الخاص بك. انتقل إلى الدليل wis2box-data/data-ingest-exercises
وقم بتحرير copy_file_to_incoming.py
باستخدام محرر النصوص المدمج.
تأكد من أنك:
- تحدد نقطة النهاية الصحيحة لـ MinIO لمضيفك.
- توفر كلمة مرور التخزين الصحيحة لمثيل MinIO الخاص بك.
- توفر المسار الصحيح في حاوية MinIO لتخزين البيانات.
أعد تشغيل السكربت لإدخال ملف بيانات العينة synop_202501030900.txt
إلى MinIO:
python3 ~/wis2box-data/ ~/wis2box-data/synop_202501030900.txt
تأكد من حل الأخطاء.
بمجرد أن تتمكن من تشغيل السكربت بنجاح، سترى رسالة تشير إلى أن الملف تم نسخه إلى MinIO، ويجب أن ترى إشعارات البيانات المنشورة بواسطة مثيل 'wis2box' الخاص بك في MQTT Explorer.
يمكنك أيضًا التحقق من لوحة معلومات Grafana لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
الآن بعد أن أصبح السكربت يعمل، يمكنك محاولة نسخ ملفات أخرى إلى MinIO باستخدام نفس السكربت.
إدخال بيانات ثنائية بتنسيق BUFR
قم بتشغيل الأمر التالي لنسخ ملف البيانات الثنائية bufr-example.bin
إلى الحاوية wis2box-incoming
في MinIO:
python3 copy_file_to_incoming.py bufr-example.bin
تحقق من لوحة معلومات Grafana وMQTT Explorer لمعرفة ما إذا تم إدخال بيانات الاختبار ونشرها بنجاح. إذا رأيت أي أخطاء، حاول حلها.
التحقق من إدخال البيانات
كم عدد الرسائل التي تم نشرها إلى وسيط MQTT لهذه العينة من البيانات؟
اضغط لعرض الإجابة
سترى أخطاءً تم الإبلاغ عنها في Grafana لأن المحطات في ملف BUFR غير معرفة في قائمة المحطات الخاصة بمثيل 'wis2box' الخاص بك.
إذا كانت جميع المحطات المستخدمة في ملف BUFR معرفة في مثيل 'wis2box' الخاص بك، يجب أن ترى 10 رسائل منشورة إلى وسيط MQTT. كل إشعار يتوافق مع بيانات لمحطة واحدة ولطابع زمني واحد للملاحظة.
يقوم المكون الإضافي wis2box.data.bufr4.ObservationDataBUFR
بتقسيم ملف BUFR إلى رسائل BUFR فردية وينشر رسالة واحدة لكل محطة وطابع زمني للملاحظة.
إدخال البيانات عبر SFTP
يمكن الوصول إلى خدمة MinIO في wis2box
أيضًا عبر SFTP. إذا كان لديك نظام قائم يمكن تكوينه لإرسال البيانات عبر SFTP، يمكنك استخدام هذه الطريقة كبديل لأتمتة عملية إدخال البيانات.
يتم ربط خادم SFTP الخاص بـ MinIO بالمنفذ 8022 على المضيف (المنفذ 22 مخصص لـ SSH).
في هذا التمرين، سنوضح كيفية استخدام WinSCP لتحميل البيانات إلى MinIO باستخدام SFTP.
يمكنك إعداد اتصال جديد في WinSCP كما هو موضح في لقطة الشاشة التالية:
بيانات الاعتماد لاتصال SFTP يتم تعريفها بواسطة WIS2BOX_STORAGE_USERNAME
و WIS2BOX_STORAGE_PASSWORD
في ملف wis2box.env
الخاص بك، وهي نفس بيانات الاعتماد التي استخدمتها للاتصال بواجهة MinIO.
عند تسجيل الدخول، ستظهر لك الحاويات (buckets) المستخدمة بواسطة wis2box
في MinIO:
يمكنك التنقل إلى الحاوية wis2box-incoming
ثم إلى المجلد الخاص بمجموعة البيانات الخاصة بك. ستظهر لك الملفات التي قمت بتحميلها في التمارين السابقة:
تحميل البيانات باستخدام SFTP
قم بتنزيل هذا الملف النموذجي إلى جهاز الكمبيوتر الخاص بك:
synop_202503030900.txt (انقر بزر الماوس الأيمن واختر "حفظ باسم" لتنزيل الملف).
ثم قم بتحميله إلى مسار مجموعة البيانات الواردة في MinIO باستخدام جلسة SFTP الخاصة بك في WinSCP.
تحقق من لوحة معلومات Grafana ومستكشف MQTT لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
انقر لعرض الإجابة
يجب أن ترى إشعار بيانات WIS2 جديدًا تم نشره للمحطة التجريبية 0-20000-0-64400
، مما يشير إلى أن البيانات تم إدخالها ونشرها بنجاح.
إذا استخدمت المسار الخاطئ، ستظهر رسالة خطأ في السجلات.
الخلاصة
تهانينا!
في هذه الجلسة العملية، تعلمت كيفية:
- تشغيل سير عمل
wis2box
عن طريق تحميل البيانات إلى MinIO باستخدام طرق مختلفة. - تصحيح الأخطاء الشائعة في عملية إدخال البيانات باستخدام لوحة معلومات Grafana وسجلات مثيل
wis2box
الخاص بك. - مراقبة إشعارات بيانات WIS2 التي يتم نشرها بواسطة
wis2box
الخاص بك في لوحة معلومات Grafana ومستكشف MQTT.