Problems and events

Refer to Problem detection & analysis description to understand the problem and event concepts in Dynatrace.

How to push problems and events from an ActiveGate plugin

ActiveGate plugins enable you to push the infrastructure problems and events for a monitored technology on a node level. Problems and events for a node group are not available.

You can use the following API methods for reporting problems:

  • report_performance_event
  • report_error_event
  • report_availability_event
  • report_resource_contention_event

You can use the following methods for sending the events:

  • report_custom_info_event
  • report_custom_deployment_event
  • report_custom_annotation_event

Problems end events are made up of the title, description and a set of custom key-value properties to report important context information. See ActiveGate plugins reference

To send a problem or event, you have to execute the following steps in the plugin source code:

  1. Create a topology group
  2. Create an element (node) in this group
  3. Push problem or event using one of the methods mentioned above.

There's no need to define anything specific in the plugin.json file.

Limitation

There are some restrictions regarding reporting events protecting the server against data flood:

  • Max length of Title string cannot be larger than 1024 characters, longer strings will be trimmed,
  • Max length of Description string cannot be larger than 10240 characters, longer strings will be trimmed.
  • Max number of elements in the properties dictionary cannot be larger than 100, if more elements are passed to the method, it will be automatically trimmed to 100,
  • Max length of KEY string cannot be larger than 100, longer stings will be trimmed,
  • Max length of VALUE string cannot be larger than 4000, longer stings will be trimmed.

Working example

The following example shows how to push problems and events from a plugin:

Example Python file
Download
from ruxit.api.base_plugin import RemoteBasePlugin
import logging

logger = logging.getLogger(__name__)

class DemoPluginRemote(RemoteBasePlugin):
    def initialize(self, **kwargs):
        config = kwargs['config']
        logger.info("Config: %s", config)
        self.url = config["url"]

    def query(self, **kwargs):
        # Create group - provide group id used to calculate unique entity id in dynatrace
        #   and display name for UI presentation
        group = self.topology_builder.create_group(identifier="DemoGroup",
                                                   group_name="ActiveGate Demo Group")

        # Create node - provide node id used to calculate unique entity id in dynatrace
        #   and display name for UI presentation
        node = group.create_element(identifier="DemoNode",
                                    element_name="ActiveGate Demo Node")

        logger.info("Topology: group name=%s, node name=%s", group.name, node.name)

        # Push infrastructure problems
        node.report_performance_event(title="Performance Event",
                                      description="Use it to focus on some performance issue",
                                      properties={"property_key": "property_value"})

        node.report_error_event(title="Error Event",
                                description="Use it to report some error",
                                properties={"property_key": "property_value"})

        node.report_availability_event(title="Availability Event",
                                       description="Use it to focus on some availability issue",
                                       properties={"property_key": "property_value"})

        node.report_resource_contention_event(title="Resources Contention Event",
                                              description="Use it to focus on some resource contention issue",
                                              properties={"property_key": "property_value"})

        # Push custom info events
        node.report_custom_info_event(title="Custom Info Event",
                                      description="Use it to report some custom info",
                                      properties={"property_key": "property_value"})

        node.report_custom_deployment_event(source="demo source",
                                            project="demo plugin",
                                            version="1.001",
                                            ci_link=self.url + "/deployment",
                                            remediation_action_link=self.url + "/remediation",
                                            deployment_name="Demo deployment",
                                            properties={"property_key": "property_value"})

        node.report_custom_annotation_event(description="Annotation event",
                                            annotation_type="demo",
                                            source="demo source",
                                            properties={"property_key": "property_value"})

Example JSON file
Download
{
	"name": "custom.remote.python.demo_events",
	"version": "1.009",
	"type": "python",
	"entity": "CUSTOM_DEVICE",
	"processTypeNames": ["PYTHON"],
	"technologies": ["ActiveGate Demo Technology"],
	"favicon": "https://lh3.googleusercontent.com/gN6iBKP1b2GTXZZoCxhyXiYIAh8QJ_8xzlhEK6csyDadA4GdkEdIEy9Bc8s5jozt1g=w300",
	"source": {
		"package": "demo_activegate_plugin_events",
		"className": "DemoPluginRemote",
		"install_requires": ["requests>=2.6.0"],
		"activation": "Remote"
	},
	"configUI": {
		"displayName": "ActiveGate Demo Plugin - Events",
		"properties": [{
			"key": "url",
			"displayName": "URL",
			"displayHint": "http://localhost:8769"
		}]
	},
	"properties": [{
		"key": "url",
		"type": "String",
        "defaultValue": "http://localhost:8769"
	}],
	"metrics": [{
			"entity": "CUSTOM_DEVICE",
			"timeseries": {
				"key": "counter",
				"unit": "Count",
				"displayname": "Counter"
			}
		}
	],
	"ui": {

	}
}

This plugin pushes all the problems and events every minute.

This example is included in Plugin SDK and can be installed using oneagent_build_plugin script.