Troubleshoot extensions

If after deploying your extension the results are different from your expectations, try one of the following actions to find out what went wrong.

Browse the Dynatrace UI

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.

Check extension status in the Dynatrace UI

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.

Check the logs

ActiveGate extensions

  • On Linux, logs are stored at /var/lib/dynatrace/remotepluginmodule/log/remoteplugin.
  • On Windows, logs are stored at %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:

Simple example extension
Download
import logging
from ruxit.api.base_plugin import RemoteBasePlugin

logger = logging.getLogger(__name__)

class LogPluginRemote(RemoteBasePlugin):
    def query(self, **kwargs):
        logger.info('LogPluginRemote query is called')


Simple JSON example
Download
{
	"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 called

2019-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 called

2019-09-17 11:21:01.950 UTC INFO [Python][17956881948133727][my_endpoint][140679144408832][ThreadPoolExecutor-0_1] - [query] LogPluginRemote query is called

Create your own logs

As a last resort, you can create your own logger and log suspicious data or behavior, as shown in the examples below:

How to log in plugins
Download
from ruxit.api.base_plugin import RemoteBasePlugin
import logging

logger = logging.getLogger(__name__)

class MyRemotePlugin(RemoteBasePlugin):
    def query(self):
        logger.debug("MyPluginRemote query method")
JSON essential
Download
{
    "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"
    }
}

Debugging

You can use a remote debugger for deep diagnosis of extension issues.

  1. Install Eclipse with pydev or PyCharm.
  2. Copy the debugger libraries to

C:\Program Files\Dynatrace\remotepluginmodule\agent\plugin\engine (on Windows)

or /opt/dynatrace/remotepluginmodule/agent/plugin/engine (on Linux).

  1. Add the following to your plugin Python code:
import pydevd

pydevd.settrace()
  1. Start the remote debugger from your developer environment and restart the Remote Plugin Module.