OneAgent and ActiveGate version 1.299 are the last versions supporting OneAgent and ActiveGate Extensions 1.0 framework. You can continue using Extensions 1.0 if you stay at OneAgent or ActiveGate version 1.299. Note that this means you'll be using an unsupported Python version 3.8. We strongly recommend migrating your extensions to the latest Extensions 2.0 framework.
For more information, see General guidance and how to migrate.
If after deploying your extension the results are different from your expectations, try one of the following actions to find out what went wrong.
Starting with Dynatrace OneAgent and ActiveGate version 1.231, we are upgrading the Extension Framework (also referred to as the plugins framework) from Python 3.6 to Python 3.8.
ModuleNotFoundError
in the PluginAgent log.Extension
What to do
For assistance, contact a Dynatrace product expert via live chat within your Dynatrace environment.
No action required. Extensions distributed with OneAgent will be updated automatically to work with Python 3.8 together with the Python upgrade.
To learn about upgrading custom Dynatrace extensions from Python 3.6 to Python 3.8, see Upgrade custom Dynatrace extensions from Python 3.6 to Python 3.8.
Go to the Technology overview page to verify that your monitored technology is displayed on one of the tiles. If you can't find it, your device group wasn't reported by the extension.
Click your device group. If the device group doesn't contain a device, your device wasn't reported. If there are no metrics reported in the device group, the extension isn't sending group metrics. Note that this may be the expected behavior.
You can find the problems reported by a running extension on the Monitored technologies page. Go to Settings > Monitoring > Monitored Technologies and select the Custom extensions tab. The extensions that report errors are displayed in red. Click the extension name to see the reported errors.
/var/lib/dynatrace/remotepluginmodule/log/remoteplugin
.%PROGRAMDATA%\Dynatrace\remotepluginmodule\log\remoteplugin
.The base folder contains logs from Remote Plugin Module internals. The extension messages are stored in subfolders. Let's use an example:
import loggingfrom ruxit.api.base_plugin import RemoteBasePluginlogger = logging.getLogger(__name__)class LogPluginRemote(RemoteBasePlugin):def query(self, **kwargs):logger.info('LogPluginRemote query is called')
{"name": "custom.remote.python.log_demo","version": "1.001","type": "python","entity": "CUSTOM_DEVICE","metricGroup": "my_log","technologies": ["My Technology"],"source": {"package": "log_demo_plugin","className": "LogPluginRemote","activation": "Remote"},"metrics": [{"entity": "CUSTOM_DEVICE","timeseries": {"key": "counter","unit": "Count","displayname": "Counter"}}]}
The extension creates the custom.remote.python.log_demo
subfolder with the LogPluginRemote.log
file where it logs the messages:
2019-09-17 11:20:11.911 UTC INFO \[Python]\[17956881948133727]\[my_endpoint]\[140679152801536]\[ThreadPoolExecutor-0\_0] - \[query] LogPluginRemote query is called2019-09-17 11:20:19.909 UTC INFO \[Python]\[17956881948133727]\[my_endpoint]\[140679152801536]\[ThreadPoolExecutor-0\_0] - \[event_set_configuration] event_set_configuration, plugin: \<RemotePluginEngine, meta_name:custom.remote.python.log_demo id:0x7ff26b36fb38> config: {}2019-09-17 11:20:19.910 UTC INFO \[Python]\[17956881948133727]\[my_endpoint]\[140679152801536]\[ThreadPoolExecutor-0\_0] - \[query] LogPluginRemote query is called2019-09-17 11:21:01.950 UTC INFO \[Python]\[17956881948133727]\[my_endpoint]\[140679144408832]\[ThreadPoolExecutor-0\_1] - \[query] LogPluginRemote query is called
As a last resort, you can create your own logger and log suspicious data or behavior, as shown in the examples below:
from ruxit.api.base_plugin import RemoteBasePluginimport logginglogger = logging.getLogger(__name__)class MyRemotePlugin(RemoteBasePlugin):def query(self):logger.debug("MyPluginRemote query method")
{"name": "custom.remote.python.my_remote_plugin","version": "1.001","type": "python","entity": "CUSTOM_DEVICE","metricGroup": "remote_demo","processTypeNames": ["PYTHON"],"technologies": ["example technology"],"source": {"package": "my_remote_plugin","className": "MyRemotePlugin","activation": "Remote"}}
You can use a remote debugger for deep diagnosis of extension issues.
Install Eclipse with pydev
or PyCharm
.
Copy the debugger libraries to
C:\Program Files\Dynatrace\remotepluginmodule\agent\plugin\engine
(on Windows)
or /opt/dynatrace/remotepluginmodule/agent/plugin/engine
(on Linux).
Add the following to your plugin Python code:
import pydevdpydevd.settrace()
Start the remote debugger from your developer environment and restart the Remote Plugin Module.