Загрузка данных для публикации
Результаты обучения
К концу этой практической сессии вы сможете:
- запускать рабочий процесс 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
.
Убедитесь, что вы можете войти в свою виртуальную машину (VM) студента с помощью 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
После входа вы окажетесь в представлении Object Browser 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"
Далее вы будете работать с набором данных, созданным в предыдущей практической сессии, используя Template='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
, как вы узнали в практической сессии Configuring Station Metadata.
Получите данные станции из OSCAR:
Добавьте станцию в тему '../weather/surface-based-observations/synop' и сохраните изменения, используя ваш токен аутентификации.
После добавления станции повторно запустите рабочий процесс wis2box
, загрузив файл примера данных synop_202502040900.txt снова в тот же путь в MinIO.
Проверьте панель мониторинга Grafana и MQTT Explorer, чтобы убедиться, что данные были успешно опубликованы. Если вы увидите уведомление ниже, значит, вы успешно опубликовали пример данных synop:
Вопрос
Какое расширение имеет файл, опубликованный в уведомлении WIS2 о данных?
Нажмите, чтобы увидеть ответ
Проверьте раздел Links уведомления 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, например, скрипты или приложения, использующие API MinIO, совместимый с S3.
В этом упражнении мы будем использовать клиент MinIO для Python, чтобы копировать данные в MinIO.
MinIO предоставляет клиент для Python, который можно установить следующим образом:
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: установите новое соединение, используя протокол File Protocol 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.
После входа в систему вы увидите бакеты, которые используются 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.