Перейти к содержанию

Загрузка данных для публикации

Результаты обучения

К концу этой практической сессии вы сможете:

  • запускать рабочий процесс 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_dashboard

Держите панель Grafana открытой в вашем браузере, так как мы будем использовать ее позже для мониторинга статуса загрузки данных.

Использование веб-интерфейса MinIO

Откройте веб-интерфейс MinIO, доступный по адресу http://YOUR-HOST:9001, и вы увидите экран входа:

Minio UI: minio ui

Для входа вам нужно использовать учетные данные, определенные переменными 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:

minio ui: minio ui after login

Введите новый путь к папке = new-directory и загрузите этот пример файла mydata.nc (щелкните правой кнопкой мыши и выберите "сохранить как", чтобы скачать файл). Вы можете использовать кнопку "Upload" в MinIO для загрузки файла в новую директорию:

minio ui: create new path

Вопрос

После загрузки файла, как вы можете проверить, был ли успешно запущен рабочий процесс данных в 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.

На этот раз убедитесь, что вы создаете директорию, которая соответствует идентификатору метаданных для набора прогнозов, который вы создали в предыдущей практической сессии:

minio-filepath-forecast-dataset

Войдите в вновь созданную директорию, нажмите 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:

mqtt explorer: message notification geps data

О плагине 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'. Этот шаблон предварительно настроил для вас следующие плагины данных:

synop-dataset-plugins

Обратите внимание, что один из плагинов — это данные 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:

oscar-station

Добавьте станцию в тему '../weather/surface-based-observations/synop' и сохраните изменения, используя ваш токен аутентификации.

После добавления станции повторно запустите рабочий процесс wis2box, загрузив файл примера данных synop_202502040900.txt снова в тот же путь в MinIO.

Проверьте панель мониторинга Grafana и MQTT Explorer, чтобы убедиться, что данные были успешно опубликованы. Если вы увидите уведомление ниже, значит, вы успешно опубликовали пример данных synop:

webapp-test-station

Вопрос

Какое расширение имеет файл, опубликованный в уведомлении 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, как показано на этом скриншоте:

winscp-sftp-connection

Учетные данные для подключения по SFTP определяются переменными WIS2BOX_STORAGE_USERNAME и WIS2BOX_STORAGE_PASSWORD в вашем файле wis2box.env и совпадают с учетными данными, которые вы использовали для подключения к интерфейсу MinIO.

После входа в систему вы увидите бакеты, которые используются wis2box в MinIO:

winscp-sftp-bucket

Вы можете перейти в бакет wis2box-incoming, а затем в папку вашего набора данных. Вы увидите файлы, которые вы загрузили в предыдущих упражнениях:

winscp-sftp-incoming-path

Загрузка данных с использованием SFTP

Скачайте этот пример файла на ваш локальный компьютер:

synop_202503030900.txt (щелкните правой кнопкой мыши и выберите "сохранить как", чтобы загрузить файл).

Затем загрузите его в путь входящего набора данных в MinIO, используя вашу SFTP-сессию в WinSCP.

Проверьте панель мониторинга Grafana и MQTT Explorer, чтобы убедиться, что данные были успешно загружены и опубликованы.

Нажмите, чтобы увидеть ответ

Вы должны увидеть новое уведомление WIS2 о данных, опубликованное для тестовой станции 0-20000-0-64400, что указывает на успешную загрузку и публикацию данных.

grafana_data_ingest

Если вы используете неправильный путь, вы увидите сообщение об ошибке в логах.

Заключение

Поздравляем!

В этом практическом занятии вы научились:

  • запускать рабочий процесс wis2box, загружая данные в MinIO различными способами.
  • устранять распространенные ошибки в процессе загрузки данных с использованием панели мониторинга Grafana и логов вашего экземпляра wis2box.
  • отслеживать уведомления WIS2 о данных, опубликованных вашим wis2box, в панели мониторинга Grafana и MQTT Explorer.