Проблемы и события: различия между версиями

Материал из Документация Ключ-АСТРОМ
(Новая страница: «''Только расширения АктивногоШлюза'' Обратитесь к описанию обнаружения и анализа пробле...»)
 
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
'''''[[Расширения]] / [[Расширения#.D0.A0.D0.B0.D0.B7.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0|Разработка]] / Расширения / Проблемы и события'''''
''Только расширения АктивногоШлюза''
''Только расширения АктивногоШлюза''


Строка 37: Строка 39:
* Максимальная длина <code>KEY</code>строки не может быть больше 100; более длинные значения будут обрезаны.
* Максимальная длина <code>KEY</code>строки не может быть больше 100; более длинные значения будут обрезаны.
* Максимальная длина <code>VALUE</code>строки не может превышать 4000; более длинные значения будут обрезаны.
* Максимальная длина <code>VALUE</code>строки не может превышать 4000; более длинные значения будут обрезаны.
== Рабочий пример ==
В следующем примере показано, как отправлять проблемы и события из расширения:
<code>from ruxit.api.base_plugin import RemoteBasePlugin</code>
<code>import logging</code>
<code>logger = logging.getLogger(__name__)</code>
<code>class DemoPluginRemote(RemoteBasePlugin):</code>
<code>    def initialize(self, **kwargs):</code>
<code>        config = kwargs['config']</code>
<code>        logger.info("Config: %s", config)</code>
<code>        self.url = config["url"]</code>
<code>    def query(self, **kwargs):</code>
<code>        # Create group - provide group id used to calculate unique entity id in astromkey</code>
<code>        #   and display name for UI presentation</code>
<code>        group = self.topology_builder.create_group(identifier="DemoGroup",</code>
<code>                                                   group_name="ActiveGate Demo Group")</code>
<code>        # Create node - provide node id used to calculate unique entity id in astromkey</code>
<code>        #   and display name for UI presentation</code>
<code>        node = group.create_element(identifier="DemoNode",</code>
<code>                                    element_name="ActiveGate Demo Node")</code>
<code>        logger.info("Topology: group name=%s, node name=%s", group.name, node.name)</code>
<code>        # Push infrastructure problems</code>
<code>        node.report_performance_event(title="Performance Event",</code>
<code>                                      description="Use it to focus on some performance issue",</code>
<code>                                      properties={"property_key": "property_value"})</code>
<code>        node.report_error_event(title="Error Event",</code>
<code>                                description="Use it to report some error",</code>
<code>                                properties={"property_key": "property_value"})</code>
<code>        node.report_availability_event(title="Availability Event",</code>
<code>                                       description="Use it to focus on some availability issue",</code>
<code>                                       properties={"property_key": "property_value"})</code>
<code>        node.report_resource_contention_event(title="Resources Contention Event",</code>
<code>                                              description="Use it to focus on some resource contention issue",</code>
<code>                                              properties={"property_key": "property_value"})</code>
<code>        # Push custom info events</code>
<code>        node.report_custom_info_event(title="Custom Info Event",</code>
<code>                                      description="Use it to report some custom info",</code>
<code>                                      properties={"property_key": "property_value"})</code>
<code>        node.report_custom_deployment_event(source="demo source",</code>
<code>                                            project="demo plugin",</code>
<code>                                            version="1.001",</code>
<code>                                            ci_link=self.url + "/deployment",</code>
<code>                                            remediation_action_link=self.url + "/remediation",</code>
<code>                                            deployment_name="Demo deployment",</code>
<code>                                            properties={"property_key": "property_value"})</code>
<code>        node.report_custom_annotation_event(description="Annotation event",</code>
<code>                                            annotation_type="demo",</code>
<code>                                            source="demo source",</code>
<code>                                            properties={"property_key": "property_value"})</code>
<code>{</code>
<code>  "name": "custom.remote.python.demo_events",</code>
<code>  "version": "1.009",</code>
<code>  "type": "python",</code>
<code>  "entity": "CUSTOM_DEVICE",</code>
<code>  "processTypeNames": ["PYTHON"],</code>
<code>  "technologies": ["ActiveGate Demo Technology"],</code>
<code>  "favicon": "<nowiki>https://lh3.googleusercontent.com/gN6iBKP1b2GTXZZoCxhyXiYIAh8QJ_8xzlhEK6csyDadA4GdkEdIEy9Bc8s5jozt1g=w300</nowiki>",</code>
<code>  "source": {</code>
<code>    "package": "demo_activegate_plugin_events",</code>
<code>    "className": "DemoPluginRemote",</code>
<code>    "install_requires": ["requests>=2.6.0"],</code>
<code>    "activation": "Remote"</code>
<code>  },</code>
<code>  "configUI": {</code>
<code>    "displayName": "ActiveGate Demo Plugin - Events",</code>
<code>    "properties": [</code>
<code>      {</code>
<code>        "key": "url",</code>
<code>        "displayName": "URL",</code>
<code>        "displayHint": "<nowiki>http://localhost:8769</nowiki>"</code>
<code>      }</code>
<code>    ]</code>
<code>  },</code>
<code>  "properties": [</code>
<code>    {</code>
<code>      "key": "url",</code>
<code>      "type": "String",</code>
<code>      "defaultValue": "<nowiki>http://localhost:8769</nowiki>"</code>
<code>    }</code>
<code>  ],</code>
<code>  "metrics": [</code>
<code>    {</code>
<code>      "entity": "CUSTOM_DEVICE",</code>
<code>      "timeseries": {</code>
<code>        "key": "counter",</code>
<code>        "unit": "Count",</code>
<code>        "displayname": "Counter"</code>
<code>      }</code>
<code>    }</code>
<code>  ],</code>
<code>  "ui": {}</code>
<code>}</code>
Это расширение ежеминутно выдвигает все проблемы и события.
Этот пример включен в Extension SDK и может быть установлен с помощью <code>oneagent_build_plugin</code>сценария.

Текущая версия на 17:43, 4 сентября 2024

Расширения / Разработка / Расширения / Проблемы и события

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

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

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

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

Чтобы сообщить о проблемах, вы можете использовать следующие методы 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сценария.