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

Ввод данных для публикации

Ожидаемые результаты

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

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

Введение

В WIS2 данные передаются в реальном времени с использованием уведомлений о данных WIS2, которые содержат "каноническую" ссылку, по которой можно скачать данные.

Для инициации рабочего процесса данных в узле WIS2 с использованием программного обеспечения wis2box, данные должны быть загружены в корзину wis2box-incoming в MinIO, что запускает рабочий процесс wis2box. Этот процесс приводит к публикации данных через уведомление о данных WIS2. В зависимости от настроек сопоставления данных в вашем экземпляре wis2box, данные могут быть преобразованы в формат BUFR перед публикацией.

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

Во время упражнения мы будем мониторить статус ввода данных с помощью панели управления Grafana и MQTT Explorer. Панель управления Grafana использует данные из Prometheus и Loki для отображения статуса вашего wis2box, в то время как MQTT Explorer позволяет вам видеть уведомления о данных WIS2, опубликованные вашим экземпляром wis2box.

Обратите внимание, что wis2box преобразует примеры данных в формат BUFR перед их публикацией в MQTT-брокере, согласно предварительно настроенным сопоставлениям данных в вашем наборе данных. На этом упражнении мы сосредоточимся на различных методах загрузки данных в ваш экземпляр wis2box и проверке успешного ввода и публикации данных. Преобразование данных будет рассмотрено позже на практическом занятии Инструменты преобразования данных.

Подготовка

Этот раздел использует набор данных для "наземных наблюдений/synop", созданный ранее на практическом занятии Настройка наборов данных в wis2box. Также требуется знание настройки станций в wis2box-webapp, как описано в практическом занятии Настройка метаданных станции.

Убедитесь, что вы можете войти в свою студенческую виртуальную машину с использованием вашего SSH-клиента (например, PuTTY).

Убедитесь, что wis2box работает:

cd ~/wis2box/
python3 wis2box-ctl.py start
python3 wis2box-ctl.py status

Убедитесь, что MQTT Explorer запущен и подключен к вашему экземпляру с использованием общедоступных учетных данных everyone/everyone с подпиской на тему origin/a/wis2/#.

Убедитесь, что у вас открыт веб-браузер с панелью управления Grafana для вашего экземпляра, перейдя по адресу http://YOUR-HOST:3000.

Подготовка примера данных

Скопируйте каталог 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.

Это позволяет вам делиться данными между хостом и контейнером.

Добавление тестовой станции

Добавьте станцию с идентификатором WIGOS 0-20000-0-64400 в ваш экземпляр wis2box, используя редактор станций в wis2box-webapp.

Получите станцию из OSCAR:

oscar-station

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

webapp-test-station

Обратите внимание, что вы можете удалить эту станцию из вашего набора данных после практического занятия.

Тестирование ввода данных из командной строки

На этом упражнении мы будем использовать команду wis2box data ingest для загрузки данных в MinIO.

Убедитесь, что вы находитесь в каталоге wis2box и войдите в контейнер wis2box-management:

cd ~/wis2box
python3 wis2box-ctl.py login

Проверьте наличие следующих образцов данных в каталоге /data/wis2box/ внутри контейнера wis2box-management:

ls -lh /data/wis2box/data-ingest-exercises/synop_202412030900.txt

Ввод данных с использованием wis2box data ingest

Выполните следующую команду для ввода образца файла данных в ваш экземпляр wis2box:

wis2box data ingest -p /data/wis2box/data-ingest-exercises/synop_202412030900.txt --metadata-id urn:wmo:md:not-my-centre:synop-test

Были ли данные успешно введены? Если нет, какое сообщение об ошибке вы получили и как вы можете это исправить?

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

Данные не были успешно введены. Вы должны увидеть следующее:

Error: metadata_id=urn:wmo:md:not-my-centre:synop-test not found in data mappings

Сообщение об ошибке указывает, что идентификатор метаданных, который вы предоставили, не соответствует ни одному из наборов данных, которые вы настроили в вашем экземпляре wis2box.

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

Processing /data/wis2box/data-ingest-exercises/synop_202412030900.txt
Done

Перейдите в консоль MinIO в вашем браузере и проверьте, был ли файл synop_202412030900.txt загружен в корзину wis2box-incoming. Вы должны увидеть новый каталог с именем набора данных, который вы указали в параметре --metadata-id, и внутри этого каталога вы найдете файл synop_202412030900.txt:

minio-wis2box-incoming-dataset-folder

Note

Команда wis2box data ingest загрузила файл в корзину wis2box-incoming в MinIO в каталог, названный в соответствии с идентификатором метаданных, который вы предоставили.

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

Проверьте статус ввода данных на Grafana

Перейдите на панель управления Grafana по адресу http://your-host:3000 и проверьте статус ввода данных в вашем браузере.

Как вы можете узнать, были ли данные успешно введены и опубликованы?

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

Если вы успешно ввели данные, вы должны увидеть следующее:

grafana_data_ingest

Если вы этого не видите, проверьте наличие сообщений WARNING или ERROR, отображаемых в нижней части панели управления, и попытайтесь их устранить.

Проверьте MQTT-брокер на наличие уведомлений WIS2

Перейдите в MQTT Explorer и проверьте, видите ли вы уведомление о данных WIS2 для данных, которые вы только что ввели.

Сколько уведомлений о данных WIS2 было опубликовано вашим wis2box?

Как вы можете получить доступ к содержимому опубликованных данных?

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

Вы должны увидеть 1 уведомление о данных WIS2, опубликованное вашим wis2box.

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

Содержимое сообщения имеет раздел "links" с ключом "rel" "canonical" и ключом "href" с URL для загрузки данных. URL будет в формате http://YOUR-HOST/data/....

Обратите внимание, что формат данных — BUFR, и вам понадобится парсер BUFR для просмотра содержимого данных. Формат BUFR — это бинарный формат, используемый метеорологическими службами для обмена данными. Плагины данных внутри wis2box преобразовали данные в BUFR перед публикацией.

После завершения этого упражнения выйдите из контейнера wis2box-management:

exit

Загрузка данных с использованием веб-интерфейса MinIO

На предыдущих упражнениях вы загружали доступные на хосте wis2box данные в MinIO с использованием команды wis2box data ingest.

Далее мы будем использовать веб-интерфейс MinIO, который позволяет загружать и скачивать данные в MinIO с использованием веб-браузера.

Повторная загрузка данных с использованием веб-интерфейса MinIO

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

Нажмите на файл, и у вас будет возможность его скачать:

minio-wis2box-incoming-dataset-folder

Вы можете скачать этот файл и повторно загрузить его по тому же пути в MinIO, чтобы повторно инициировать рабочий процесс wis2box.

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

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

Вы увидите сообщение о том, что wis2box уже опубликовал эти данные:

ERROR - Data already published for WIGOS_0-20000-0-64400_20241203T090000-bufr4; not publishing

Это демонстрирует, что рабочий процесс данных был инициирован, но данные не были повторно опубликованы. Wis2box не будет публиковать одни и те же данные дважды.

Загрузка новых данных с использованием веб-интерфейса MinIO

Скачайте этот образец файла synop_202502040900.txt (щелкните правой кнопкой мыши и выберите "сохранить как" для загрузки файла).

Загрузите скачанный файл с помощью веб-интерфейса в тот же путь в MinIO, что и предыдущий файл.

Были ли данные успешно введены и опубликованы?

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

Перейдите на панель управления Grafana и проверьте, были ли данные успешно введены и опубликованы.

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

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

grafana_data_ingest

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

Сервис MinIO в wis2box также можно использовать через SFTP. Сервер SFTP для MinIO привязан к порту 8022 на хосте (порт 22 используется для SSH).

На этом упражнении мы продемонстрируем, как использовать WinSCP для загрузки данных в MinIO с использованием SFTP.

Вы можете настроить новое соединение WinSCP, как показано на этом сн

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

Загрузка данных с помощью Python-скрипта

В этом упражнении мы будем использовать клиент Python для MinIO, чтобы скопировать данные в MinIO.

MinIO предоставляет клиент для Python, который можно установить следующим образом:

pip3 install minio

На вашей учебной виртуальной машине пакет 'minio' для Python уже будет установлен.

В директории 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 и публикует одно сообщение для каждой станции и временной метки наблюдения.

Заключение

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

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

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