Обновление до Python 3.8

Материал из Документация Ключ-АСТРОМ

Обновите пользовательские расширения Ключ-АСТРОМ с Python 3.6 до Python 3.8.

Начиная с ЕдиногоАгента и АктивногоШлюза версии 1.231, мы обновляем платформу расширений (также называемую платформой плагинов) с Python 3.6 до Python 3.8.

  • Последствия : некоторые расширения Ключ-АСТРОМ, работающие в вашей среде, могут перестать работать и потребовать повторного развертывания новой версии, подготовленной для Python 3.8.
  • Симптомы :
    • Никакие данные не предоставляются для затронутых показателей на информационных панелях, оповещениях и страницах пользовательских устройств, заполненных затронутыми метриками расширения.
    • В логах расширений отображаются ошибки. ModuleNotFoundErrorЧаще всего в логе PluginAgent это проявляется как Python .
    • Иногда виртуальная машина Python дает сбой.
  • Влияние . Эта проблема затрагивает только те расширения, которые используют собственные библиотеки, вызываемые из кода Python, распространяемого вместе с расширением.

Рекомендуемое решение

В случае каких-либо проблем с пользовательскими расширениями после обновления до ЕдиногоАгента версии 1.231+ мы рекомендуем пересобрать пакет расширений с использованием Python 3.8 вместе с новейшими модулями и повторно развернуть его на всех хостах.

Подробную информацию о создании, загрузке и развертывании расширений см. в разделе Расширения .

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

  • Расширения, работающие на компьютерах с Windows, необходимо пересобирать в Windows; Расширения Linux необходимо пересобрать в Linux.
  • В настоящее время поддерживаются только 64-битные платформы.

Обновите расширение versionи install_requiresсвойства в plugin.jsonфайле.

Модули зависимостей, определенные в install_requiresсвойстве, должны быть последней доступной версией или версией, поддерживаемой Python 3.8.

Пример миграции

Ниже приведен отрывок из plugin.jsonфайла расширения, специфичного для Windows.

{

  "name": "custom.python.mssql",

  "version": "1.0",

  "type": "python",

  "requiredAgentVersion": "0.000.0",

  "entity": "PROCESS_GROUP_INSTANCE",

  "technologies": ["MSSQL"],

  "source": {

    "package": "custom_mssql_plugin",

    "className": "CustomMsSqlPlugin",

    "install_requires": ["pymssql==2.1.4"],

    "activation": "Singleton"

  },

  • Это версия 1.0; для этого не требуется какая-либо конкретная версия ЕдиногоАгента.
  • Для расширения требуется модуль pymssql версии 2.1.4.
  • Пакет расширения содержит бинарные модули, специфичные для конкретной платформы:
    • _mssql.cp36-win_amd64.pyd
    • pymssql.cp36-win_amd64.pyd Эти модули поддерживают Python версии 3.7 и более ранних версий, но не Python 3.8 (см. pymssql 2.1.4).).

Сообщение об ошибке

Расширение перестанет работать после обновления до ЕдиногоАгента версии 1.231+, и в логе PluginAgent появится следующая ошибка.

2021-10-26 11:03:32.032 UTC [00000c5c] info [native] 3164(MainThread) - [report_status] status changed for engine ('custom.python.mssql', 16080871464060409180) PluginFullStatus(pluginName=custom.python.mssql, pluginVersion=1.0, state=ERROR_UNKNOWN, description=No module named 'pymssql', monitoredEntityId=0xdf2abb657e09555c, stacktrace=Traceback (most recent call last):

File "C:\ProgramData/astromkey/oneagent/agent/runtime/engine_unpacked\ruxit\plugin_state_machine.py", line 336, in _execute_next_task

self._query_plugin()

File "C:\ProgramData/astromkey/oneagent/agent/runtime/engine_unpacked\ruxit\plugin_state_machine.py", line 663, in _query_plugin

self._plugin_run_data = self._create_plugin_run_data()

File "C:\ProgramData/astromkey/oneagent/agent/runtime/engine_unpacked\ruxit\plugin_state_machine.py", line 636, in _create_plugin_run_data

plugin_module = importlib.import_module(self.metadata["source"]["package"])

File "C:\Program Files/astromkey/oneagent/agent/plugin/python3.8\importlib\__init__.py", line 127, in import_module

return _bootstrap._gcd_import(name[level:], package, level)

File "<frozen importlib._bootstrap>", line 1014, in _gcd_import

File "<frozen importlib._bootstrap>", line 991, in _find_and_load

File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked

File "<frozen importlib._bootstrap>", line 671, in _load_unlocked

File "<frozen importlib._bootstrap_external>", line 843, in exec_module

File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

File "C:\Program Files/astromkey/oneagent/plugin_deployment/custom.python.mssql\custom_mssql_plugin.py", line 14, in <module>

import pymssql

ModuleNotFoundError: No module named 'pymssql'

)

Расширение должно быть обновлено и пересобрано с использованием Python 3.8 и новейшего модуля pymssql, версия которого на данный момент равна 1. 2.2.2. Новую версию пакета расширения необходимо развернуть на всех хостах, на которых он работает.

Разрешение

Обновите определение расширения, изменив его plugin.jsonследующим образом:

{

"name": "custom.python.mssql",

"version": "1.1",

"type": "python",

"requiredAgentVersion": "1.231.0",

"entity": "PROCESS_GROUP_INSTANCE",

"technologies": ["MSSQL"],

"source": {

"package": "custom_mssql_plugin",

"className": "CustomMsSqlPlugin",

"install_requires": ["pymssql==2.2.2"],

"activation": "Singleton"

},

где свойства version, requiredAgentVersionи install_requiresобновляются.

Теперь расширение готово к восстановлению. См plugin_sdk build_plugin. руководство по расширениям ЕдиногоАгента.

Убедитесь, что новый пакет расширений содержит обновленные модули:

  • _mssql.cp38-win_amd64.pyd
  • _pymssql.cp38-win_amd64.pyd

Разверните пакет на хосте ЕдиногоАгента, перезапустите службу ЕдиныйАгент и проверьте в логе PluginAgent, что расширение запускается успешно.