Проблемы и события: различия между версиями
ENetrebin (обсуждение | вклад) (Новая страница: «''Только расширения АктивногоШлюза'' Обратитесь к описанию обнаружения и анализа пробле...») |
ENetrebin (обсуждение | вклад) |
||
(не показаны 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
Проблемы и события состоят из заголовка, описания и набора настраиваемых свойств «ключ-значение», которые сообщают важную контекстную информацию. См. Справочник по расширениям .
Чтобы отправить проблему или событие, выполните следующие шаги в исходном коде расширения:
- Создайте группу топологии.
- Создайте элемент (устройство) в этой группе.
- Сообщите о проблеме или событии, используя один из методов, упомянутых выше.
Нет необходимости определять что-либо конкретное в 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
сценария.