Проблемы и события

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

Только расширения АктивногоШлюза

Обратитесь к описанию обнаружения и анализа проблем , чтобы понять концепции проблем и событий в Ключ-АСТРОМ.

Как отправлять проблемы и события из расширения Ключ-АСТРОМ

Расширения АктивногоШлюза позволяют вам сообщать о проблемах и событиях инфраструктуры для отслеживаемой технологии на уровне устройства. Проблемы и события для группы устройств недоступны.

Чтобы сообщить о проблемах, вы можете использовать следующие методы API:

  • report_performance_event
  • report_error_event
  • report_availability_event
  • report_resource_contention_event

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

  • report_custom_info_event
  • report_custom_deployment_event
  • report_custom_annotation_event

Проблемы и события состоят из заголовка, описания и набора настраиваемых свойств «ключ-значение», которые сообщают важную контекстную информацию. См. Справочник по расширениям .

Чтобы отправить проблему или событие, выполните следующие шаги в исходном коде расширения:

  1. Создайте группу топологии.
  2. Создайте элемент (устройство) в этой группе.
  3. Сообщите о проблеме или событии, используя один из методов, упомянутых выше.

Нет необходимости определять что-либо конкретное в plugin.jsonфайле.

Ограничения

Существуют некоторые ограничения на отчеты о событиях для защиты сервера от лавины данных:

  • Максимальная длина Titleстроки не может превышать 1024 символа; более длинные строки будут обрезаны.
  • Максимальная длина Descriptionстроки не может превышать 10240 символов; более длинные строки будут обрезаны.
  • Максимальное количество элементов в словаре свойств не может превышать 100. Если в метод передается больше элементов, оно автоматически сокращается до 100.
  • Максимальная длина KEYстроки не может быть больше 100; более длинные значения будут обрезаны.
  • Максимальная длина VALUEстроки не может превышать 4000; более длинные значения будут обрезаны.

Рабочий пример

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

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 astromkey

        #   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 astromkey

        #   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"})


{

  "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": {}

}

Это расширение ежеминутно выдвигает все проблемы и события.

Этот пример включен в Extension SDK и может быть установлен с помощью oneagent_build_pluginсценария.