استيعاب البيانات للنشر
نتائج التعلم
بنهاية هذه الجلسة العملية، ستكون قادرًا على:
- تشغيل سير عمل
wis2boxعن طريق تحميل البيانات إلىMinIOباستخدام واجهة الويب الخاصة بـMinIO، أوSFTP، أو باستخدام سكربت بلغة Python. - الوصول إلى لوحة تحكم
Grafanaلمراقبة حالة استيعاب البيانات وعرض سجلات مثيلwis2boxالخاص بك. - عرض إشعارات بيانات
WIS2التي تم نشرها بواسطةwis2boxالخاص بك باستخدامMQTT Explorer.
المقدمة
في نظام WIS2، يتم مشاركة البيانات في الوقت الفعلي باستخدام إشعارات بيانات WIS2 التي تحتوي على رابط "قياسي" يمكن من خلاله تنزيل البيانات.
لتشغيل سير عمل البيانات في عقدة WIS2 باستخدام برنامج 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'**. القالب قام بتكوين المكونات الإضافية التالية مسبقًا:
<img alt="synop-dataset-plugins" src="/../assets/img/wis2box-data-mappings.png" width="1000">
لاحظ أن أحد المكونات الإضافية هو **بيانات FM-12 المحولة إلى BUFR** (synop2bufr) والذي تم تكوينه للعمل مع الملفات ذات الامتداد **txt**.
قم بتنزيل بيانات العينة هذه [synop_202502040900.txt](../sample-data/synop_202502040900.txt) (انقر بزر الماوس الأيمن واختر "حفظ باسم" لتنزيل الملف) إلى جهاز الكمبيوتر المحلي الخاص بك. قم بإنشاء مسار جديد في MinIO يتطابق مع معرف البيانات الوصفية لمجموعة بيانات synop، وقم بتحميل بيانات العينة إلى هذا المسار.
تحقق من لوحة تحكم Grafana ومستكشف MQTT لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
!!! question "سؤال"
لماذا لم تحصل على إشعار في مستكشف MQTT؟
??? success "اضغط لعرض الإجابة"
في لوحة تحكم Grafana سترى تحذيرًا يشير إلى:
```bash
WARNING - Station 64400 not found in station file
```
أو إذا لم تكن هناك محطات مرتبطة بالموضوع سترى:
```bash
ERROR - No stations found
```
تم تشغيل سير العمل الخاص بالبيانات، ولكن المكون الإضافي لم يتمكن من معالجة البيانات بسبب نقص بيانات المحطة الوصفية.
!!! note "حول المكون الإضافي FM-12 المحول إلى BUFR"
يحاول هذا المكون الإضافي تحويل بيانات الإدخال FM-12 إلى صيغة BUFR.
كجزء من عملية التحويل، يقوم المكون الإضافي بإضافة البيانات الوصفية المفقودة إلى البيانات الناتجة، مثل معرف محطة WIGOS، الموقع، وارتفاع البارومتر للمحطة. لإضافة هذه البيانات الوصفية، يبحث المكون الإضافي عن هذه المعلومات في قائمة المحطات في مثيل 'wis2box' الخاص بك باستخدام المعرف التقليدي (المكون من 5 أرقام) (64400 في هذه الحالة).
إذا لم يتم العثور على المحطة في قائمة المحطات، فلن يتمكن المكون الإضافي من إضافة البيانات الوصفية المفقودة ولن ينشر أي بيانات.
أضف المحطة بمعرف WIGOS `0-20000-0-64400` إلى مثيل 'wis2box' الخاص بك باستخدام محرر المحطات في 'wis2box-webapp'، كما تعلمت في الجلسة العملية [تكوين بيانات المحطة الوصفية](./configuring-station-metadata.md).
استرجع المحطة من OSCAR:
<img alt="oscar-station" src="/../assets/img/webapp-test-station-oscar-search.png" width="600">
أضف المحطة إلى الموضوع '../weather/surface-based-observations/synop' واحفظ التغييرات باستخدام رمز المصادقة الخاص بك.
بعد إضافة المحطة، أعد تشغيل سير العمل الخاص بـ 'wis2box' عن طريق تحميل ملف بيانات العينة *synop_202502040900.txt* مرة أخرى إلى نفس المسار في MinIO.
تحقق من لوحة تحكم Grafana ومستكشف MQTT للتأكد من أن البيانات تم نشرها بنجاح. إذا رأيت الإشعار أدناه، فهذا يعني أنك نشرت بيانات العينة synop بنجاح:
<img alt="webapp-test-station" src="/../assets/img/mqtt-explorer-wis2box-notification-synop-sample.png" width="800">
!!! question "سؤال"
ما هو امتداد الملف الذي تم نشره في إشعار بيانات WIS2؟
??? success "اضغط لعرض الإجابة"
تحقق من قسم الروابط في إشعار بيانات WIS2 في مستكشف MQTT وسترى الرابط القانوني:
```json
{
"rel": "canonical",
"type": "application/bufr",
"href": "http://example.training.wis2dev.io/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، والذي يمكن تثبيته كما يلي:
```bash
pip3 install minio
على جهاز الطالب الخاص بك، ستكون حزمة '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.
يمكنك أيضًا التحقق من لوحة تحكم Grafana لمعرفة ما إذا تم إدخال البيانات ونشرها بنجاح.
الآن بعد أن أصبح السكربت يعمل، يمكنك محاولة نسخ ملفات أخرى إلى MinIO باستخدام نفس السكربت.
إدخال بيانات ثنائية بصيغة BUFR
قم بتشغيل الأمر التالي لنسخ ملف البيانات الثنائية bufr-example.bin إلى الحاوية wis2box-incoming في MinIO:
python3 copy_file_to_incoming.py bufr-example.bin
تحقق من لوحة تحكم Grafana ومستكشف MQTT لمعرفة ما إذا تم إدخال بيانات الاختبار ونشرها بنجاح. إذا رأيت أي أخطاء، حاول حلها.
التحقق من إدخال البيانات
كم عدد الرسائل التي تم نشرها إلى وسيط 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 Explorer للتأكد من أنه تم إدخال البيانات ونشرها بنجاح.
انقر لعرض الإجابة
يجب أن ترى إشعار بيانات WIS2 جديدًا منشورًا لمحطة الاختبار 0-20000-0-64400، مما يشير إلى أن البيانات تم إدخالها ونشرها بنجاح.
إذا استخدمت المسار الخطأ، ستظهر رسالة خطأ في السجلات.
الخاتمة
تهانينا!
في هذه الجلسة العملية، تعلمت كيفية:
- تشغيل سير عمل
wis2boxعن طريق تحميل البيانات إلى MinIO باستخدام طرق مختلفة. - تصحيح الأخطاء الشائعة في عملية إدخال البيانات باستخدام لوحة تحكم Grafana وسجلات مثيل
wis2boxالخاص بك. - مراقبة إشعارات بيانات WIS2 المنشورة بواسطة
wis2boxالخاص بك في لوحة تحكم Grafana وMQTT Explorer.