<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python</id>
	<title>Создание расширений Python - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;action=history"/>
	<updated>2026-05-03T22:16:46Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=6324&amp;oldid=prev</id>
		<title>IKuznetsov: /* Визуализация данных */</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=6324&amp;oldid=prev"/>
		<updated>2026-04-13T22:24:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Визуализация данных&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 22:24, 13 апреля 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l419&quot;&gt;Строка 419:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 419:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;На данный момент мы отправляем в Ключ-АСТРОМ только метрические данные.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;На данный момент мы отправляем в Ключ-АСТРОМ только метрические данные.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Мы можем визуализировать эти показатели с помощью &amp;lt;code&amp;gt;Dashboards&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Notebooks&lt;/del&gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Metric Explorer&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Мы можем визуализировать эти показатели с помощью &amp;lt;code&amp;gt;Dashboards&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Metric Explorer&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Полноценное расширение будет включать дашборды, топологию, экраны и многое другое. Полный пример кода можно найти на странице [https://github.com/dynatrace-extensions/python-rabbitmq расширения RabbitMQ на GitHub]﻿.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Полноценное расширение будет включать дашборды, топологию, экраны и многое другое. Полный пример кода можно найти на странице [https://github.com/dynatrace-extensions/python-rabbitmq расширения RabbitMQ на GitHub]﻿.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key ka_db:diff::1.12:old-5761:rev-6324 --&gt;
&lt;/table&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=5761&amp;oldid=prev</id>
		<title>IKuznetsov в 15:28, 18 сентября 2025</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=5761&amp;oldid=prev"/>
		<updated>2025-09-18T15:28:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 15:28, 18 сентября 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l24&quot;&gt;Строка 24:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 24:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Откройте пустую папку в '''Visual Studio Code'''.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Откройте пустую папку в '''Visual Studio Code'''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Выполните команду &amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dynatrace &lt;/del&gt;extensions: Initialize workspace&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Выполните команду &amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey &lt;/ins&gt;extensions: Initialize workspace&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Выберите последнюю доступную версию схемы.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Выберите последнюю доступную версию схемы.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Создайте новый сертификат или используйте существующий.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Создайте новый сертификат или используйте существующий.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l107&quot;&gt;Строка 107:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 107:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нам также потребуется включить в качестве зависимости наше расширение &amp;lt;code&amp;gt;requests&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нам также потребуется включить в качестве зависимости наше расширение &amp;lt;code&amp;gt;requests&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|from &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dynatrace_extension &lt;/del&gt;import Extension, Status, StatusValue&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|from &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey_extension &lt;/ins&gt;import Extension, Status, StatusValue&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import requests&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import requests&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l153&quot;&gt;Строка 153:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 153:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            # 3 - Send a metric to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dynatrace&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            # 3 - Send a metric to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l279&quot;&gt;Строка 279:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 279:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Финальный код ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Финальный код ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|from &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dynatrace_extension &lt;/del&gt;import Extension, Status, StatusValue&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|from &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey_extension &lt;/ins&gt;import Extension, Status, StatusValue&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import requests&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import requests&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l325&quot;&gt;Строка 325:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 325:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            # 3 - Send a metric to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dynatrace&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            # 3 - Send a metric to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l400&quot;&gt;Строка 400:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 400:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Сборка расширения ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Сборка расширения ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Если вы ещё этого не сделали, вы можете сгенерировать сертификаты разработчика с помощью команды '''Visual Studio Code''' &amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dynatrace &lt;/del&gt;extensions: Generate certificates&amp;lt;/code&amp;gt;. Подробнее об этой команде см. в [[Справочник команд для VS Code|документации по генерации сертификатов]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Если вы ещё этого не сделали, вы можете сгенерировать сертификаты разработчика с помощью команды '''Visual Studio Code''' &amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey &lt;/ins&gt;extensions: Generate certificates&amp;lt;/code&amp;gt;. Подробнее об этой команде см. в [[Справочник команд для VS Code|документации по генерации сертификатов]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Чтобы создать пакет расширения, выполните команду &amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dynatrace &lt;/del&gt;extensions: Build&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Чтобы создать пакет расширения, выполните команду &amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;astromkey &lt;/ins&gt;extensions: Build&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Эта команда запустит команду &amp;lt;code&amp;gt;dt-sdk build&amp;lt;/code&amp;gt;, которая создаст подписанный файл расширения в папке &amp;lt;code&amp;gt;custom_rabbitmq-extension-0.0.1.zip&amp;lt;/code&amp;gt;. Клюя-АСТРОМ будет запускать только расширения &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, [[О расширениях|подписанные доверенным сертификатом]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Эта команда запустит команду &amp;lt;code&amp;gt;dt-sdk build&amp;lt;/code&amp;gt;, которая создаст подписанный файл расширения в папке &amp;lt;code&amp;gt;custom_rabbitmq-extension-0.0.1.zip&amp;lt;/code&amp;gt;. Клюя-АСТРОМ будет запускать только расширения &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, [[О расширениях|подписанные доверенным сертификатом]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key ka_db:diff::1.12:old-5760:rev-5761 --&gt;
&lt;/table&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=5760&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «Ключ-АСТРОМ предоставляет средства для разработки расширений '''Python''' с помощью новой пл...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9_Python&amp;diff=5760&amp;oldid=prev"/>
		<updated>2025-09-18T15:24:07Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «Ключ-АСТРОМ предоставляет средства для разработки расширений &amp;#039;&amp;#039;&amp;#039;Python&amp;#039;&amp;#039;&amp;#039; с помощью новой пл...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ключ-АСТРОМ предоставляет средства для разработки расширений '''Python''' с помощью новой платформы '''Расширения'''. Эти расширения следует использовать, когда существующие источники данных не подходят для ваших задач.&lt;br /&gt;
&lt;br /&gt;
Разрабатывайте расширения '''Python''', когда:&lt;br /&gt;
&lt;br /&gt;
* Вам нужна сложная логика для извлечения показателей, событий или логов из источника.&lt;br /&gt;
* Невозможно осуществить сбор данных с помощью декларативного источника данных ('''SQL''', '''SNMP''', '''WMI''', '''JMX''', '''Prometheus''' и т. д.).&lt;br /&gt;
&lt;br /&gt;
Пакет [https://pypi.org/project/dt-extensions-sdk/ dt -extensions-sdk﻿ python] предоставляет комплект разработки программного обеспечения ('''SDK''') и интерфейс командной строки ('''CLI'''), обеспечивающие поддержку вашего расширения '''Python'''.&lt;br /&gt;
&lt;br /&gt;
Расширения '''Python''' также поддерживаются нашим [[Дополнение для VS Code|дополнением Visual Studio Code]], это рекомендуемый нами способ их разработки.&lt;br /&gt;
----В этом пошаговом руководстве мы создадим работающее расширение &amp;lt;code&amp;gt;RabbitMQ&amp;lt;/code&amp;gt; с нуля.&lt;br /&gt;
&lt;br /&gt;
Это расширение будет использовать [https://www.rabbitmq.com/docs/management API управления RabbitMQ]﻿ для получения метрик для кластера, узлов и очередей.&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Вам понадобится следующее:&lt;br /&gt;
&lt;br /&gt;
* [https://code.visualstudio.com/download Visual Studio Code]﻿ с установленным и настроенным [[Дополнение для VS Code|дополнением Extensions]].&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.10]﻿&lt;br /&gt;
* [https://pypi.org/project/dt-extensions-sdk/ dt-extensions-sdk]﻿&lt;br /&gt;
* Ключ-АСТРОМ 1.286+&lt;br /&gt;
&lt;br /&gt;
== Создание нового расширения ==&lt;br /&gt;
&lt;br /&gt;
# Откройте пустую папку в '''Visual Studio Code'''.&lt;br /&gt;
# Выполните команду &amp;lt;code&amp;gt;Dynatrace extensions: Initialize workspace&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Выберите последнюю доступную версию схемы.&lt;br /&gt;
# Создайте новый сертификат или используйте существующий.&lt;br /&gt;
# Выберите тип проекта &amp;lt;code&amp;gt;Python Extension 2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Дайте расширению имя &amp;lt;code&amp;gt;rabbitmq_extension&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Расширения Python''' — это просто модули '''Python''', которые должны следовать соглашениям об именовании [https://peps.python.org/pep-0008/ PEP8]﻿, то есть имя должно быть написано строчными буквами и разделено символами подчеркивания.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Чтобы запустить команду в Visual Studio Code, нажмите &amp;lt;code&amp;gt;F1&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Ctrl+Shift+P&amp;lt;/code&amp;gt; и введите имя команды.&lt;br /&gt;
|}&lt;br /&gt;
Наше расширение '''Visual Studio Code''' автоматически вызовет команду &amp;lt;code&amp;gt;dt-sdk create&amp;lt;/code&amp;gt;, которая создаст необходимые файлы и папки для расширения.&lt;br /&gt;
&lt;br /&gt;
Открыв файл &amp;lt;code&amp;gt;extension/extension.yaml&amp;lt;/code&amp;gt;, вы можете изучить структуру расширения '''Python'''.&lt;br /&gt;
&lt;br /&gt;
В нём объявлены имя модуля '''Python''', минимальная версия '''Python''' и схема активации для удалённого расширения АктивногоШлюза или локального расширения ЕдиногоАгента.&lt;br /&gt;
&lt;br /&gt;
Нажатие на иконку кода &amp;lt;code&amp;gt;Simulate extension&amp;lt;/code&amp;gt; запустит расширение в среде '''Visual Studio Code'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Если вы не видите кнопку &amp;lt;code&amp;gt;Simulate extension&amp;lt;/code&amp;gt;, перезагрузите окно Visual Studio Code с помощью &amp;lt;code&amp;gt;F1 &amp;gt; Reload Window&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ ==&lt;br /&gt;
Мы предлагаем вам использовать '''Docker''' для тестирования этого расширения на реальном брокере '''RabbitMQ'''.&lt;br /&gt;
&lt;br /&gt;
Вы можете запустить узел '''RabbitMQ''' с включенным расширением управления:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|docker run -d --name rabbit -p 15672:15672 rabbitmq:3-management&lt;br /&gt;
|}&lt;br /&gt;
Чтобы сделать расширение более интересным, войдите в систему &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:15672&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, используя учетные данные по умолчанию &amp;lt;code&amp;gt;guest:guest&amp;lt;/code&amp;gt;, и создайте новую очередь.&lt;br /&gt;
&lt;br /&gt;
== Схема активации ==&lt;br /&gt;
При настройке нашего расширения нам необходимо запросить у пользователя три вида информации:&lt;br /&gt;
&lt;br /&gt;
* URL-адрес управления RabbitMQ&lt;br /&gt;
* Имя пользователя&lt;br /&gt;
* Пароль&lt;br /&gt;
&lt;br /&gt;
Вы можете определить эти параметры в файле &amp;lt;code&amp;gt;extension/activationSchema.json&amp;lt;/code&amp;gt;. По умолчанию '''SDK''' создаёт этот файл с полями для '''URL'''-адреса, имени пользователя и пароля, что удобно для нас. Вам следует изменить этот файл в соответствии с конкретными потребностями расширения в большинстве случаев использования.&lt;br /&gt;
&lt;br /&gt;
Во время разработки '''SDK''' считывает эти значения конфигурации из файла &amp;lt;code&amp;gt;activation.json&amp;lt;/code&amp;gt;. Измените этот файл так, чтобы он указывал на наш локальный экземпляр '''RabbitMQ'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|{&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;rabbitmq_extension activation&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.0.1&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;activationContext&amp;quot;: &amp;quot;REMOTE&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;pythonRemote&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;endpoints&amp;quot;: [&lt;br /&gt;
&lt;br /&gt;
      {&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;http://localhost:15672&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;user&amp;quot;: &amp;quot;guest&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;password&amp;quot;: &amp;quot;guest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|}&lt;br /&gt;
Вы можете использовать &amp;lt;code&amp;gt;activation.json&amp;lt;/code&amp;gt; только во время разработки и он не входит в комплект расширения. Будьте осторожны, чтобы случайно не закоммитить секретные данные в систему управления версиями.&lt;br /&gt;
&lt;br /&gt;
== Получение данных ==&lt;br /&gt;
В этом разделе мы реализуем метод расширения &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt;. Этот метод вызывается каждую минуту и ​​отвечает за извлечение данных из экземпляра '''RabbitMQ'''.&lt;br /&gt;
&lt;br /&gt;
=== Метрики на уровне кластера ===&lt;br /&gt;
Начнем с отчета о количестве очередей в нашем экземпляре '''RabbitMQ'''.&lt;br /&gt;
&lt;br /&gt;
Для этого мы можем вызвать конечную точку [https://rawcdn.githack.com/rabbitmq/rabbitmq-server/v3.13.0/deps/rabbitmq_management/priv/www/api/index.html /api/overview]﻿.&lt;br /&gt;
&lt;br /&gt;
Нам также потребуется включить в качестве зависимости наше расширение &amp;lt;code&amp;gt;requests&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|from dynatrace_extension import Extension, Status, StatusValue&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
class ExtensionImpl(Extension):&lt;br /&gt;
&lt;br /&gt;
    def initialize(self):&lt;br /&gt;
&lt;br /&gt;
        self.extension_name = &amp;quot;rabbitmq_extension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def query(self):&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        The query method is automatically scheduled to run every minute&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        self.logger.info(&amp;quot;query method started for rabbitmq_extension.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for endpoint in self.activation_config[&amp;quot;endpoints&amp;quot;]:&lt;br /&gt;
&lt;br /&gt;
            url = endpoint[&amp;quot;url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            user = endpoint[&amp;quot;user&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            password = endpoint[&amp;quot;password&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            self.logger.debug(f&amp;quot;Running endpoint with url '{url}'&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            # We've added these three lines&lt;br /&gt;
&lt;br /&gt;
            # 1 - Make a request to the /api/overview endpoint&lt;br /&gt;
&lt;br /&gt;
            cluster = requests.get(f&amp;quot;{url}/api/overview&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
            # 2 - Collect some dimensions for our metrics&lt;br /&gt;
&lt;br /&gt;
            dimensions = {&lt;br /&gt;
&lt;br /&gt;
                &amp;quot;cluster&amp;quot;: cluster[&amp;quot;cluster_name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                &amp;quot;rabbitmq_version&amp;quot;: cluster[&amp;quot;rabbitmq_version&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # 3 - Send a metric to Dynatrace&lt;br /&gt;
&lt;br /&gt;
            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;br /&gt;
&lt;br /&gt;
        self.logger.info(&amp;quot;query method ended for rabbitmq_extension.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def fastcheck(self) -&amp;gt; Status:&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        This is called when the extension runs for the first time.&lt;br /&gt;
&lt;br /&gt;
        If this AG cannot run this extension, raise an Exception or return StatusValue.ERROR!&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return Status(StatusValue.OK)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    ExtensionImpl().run()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
&lt;br /&gt;
    main()&lt;br /&gt;
|}&lt;br /&gt;
Чтобы включить запросы как зависимость, добавьте &amp;lt;code&amp;gt;install_requires&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|{&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;rabbitmq_extension activation&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.0.1&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;activationContext&amp;quot;: &amp;quot;REMOTE&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;pythonRemote&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;endpoints&amp;quot;: [&lt;br /&gt;
&lt;br /&gt;
      {&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;http://localhost:15672&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;user&amp;quot;: &amp;quot;guest&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;password&amp;quot;: &amp;quot;guest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|}&lt;br /&gt;
Не забудьте также установить пакет &amp;lt;code&amp;gt;requests&amp;lt;/code&amp;gt; в вашей среде разработки с помощью &amp;lt;code&amp;gt;pip install requests&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запуск расширения теперь должен показать собираемую метрику:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|2024-02-29 21:42:56,099 [INFO] api (MainThread): send_metric: rabbitmq.cluster.queues,&lt;br /&gt;
&lt;br /&gt;
cluster=&amp;quot;rabbit@49bf21ab3628&amp;quot;,rabbitmq_version=&amp;quot;3.12.12&amp;quot; gauge,1 1709264569592&lt;br /&gt;
|}&lt;br /&gt;
В этом руководстве мы не будем добавлять дополнительные метрики, но вы можете воспользоваться '''API''' управления '''RabbitMQ''' в вашем локальном экземпляре и добавить дополнительные метрики в своё расширение. Доступ к нему можно получить по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:15672/api/overview&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Метрики на уровне узла ===&lt;br /&gt;
Добавление метрик к узлам кластера '''RabbitMQ''' — аналогичный процесс.&lt;br /&gt;
&lt;br /&gt;
Кластер может состоять из множества узлов, поэтому давайте пройдёмся по ним и выведем некоторые метрики.&lt;br /&gt;
&lt;br /&gt;
Добавьте следующие строки после сообщения метрики &amp;lt;code&amp;gt;cluster&amp;lt;/code&amp;gt;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|# 4 - Get nodes&lt;br /&gt;
&lt;br /&gt;
nodes = requests.get(f&amp;quot;{url}/api/nodes&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
for node in nodes:&lt;br /&gt;
&lt;br /&gt;
    # 5 - Add node specific dimensions, including it's parent (the cluster) dimensions&lt;br /&gt;
&lt;br /&gt;
    node_dimensions = {&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;node&amp;quot;: node[&amp;quot;name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
        **dimensions&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # 6 - Report a metric for each node&lt;br /&gt;
&lt;br /&gt;
    self.report_metric(&amp;quot;rabbitmq.node.mem_used&amp;quot;, node[&amp;quot;mem_used&amp;quot;], node_dimensions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Метрики на уровне очереди ===&lt;br /&gt;
Наконец, давайте добавим некоторые метрики для очередей в нашем экземпляре '''RabbitMQ'''.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|# 7 - Get queues&lt;br /&gt;
&lt;br /&gt;
queues = requests.get(f&amp;quot;{url}/api/queues&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
for queue in queues:&lt;br /&gt;
&lt;br /&gt;
    # 8 - Add queue specific dimensions, including it's parent (the cluster) dimensions&lt;br /&gt;
&lt;br /&gt;
    queue_dimensions = {&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;name&amp;quot;: queue[&amp;quot;name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;node&amp;quot;: queue[&amp;quot;node&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;state&amp;quot;: queue[&amp;quot;state&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
        **dimensions&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # 9 - Report a metric for each queue&lt;br /&gt;
&lt;br /&gt;
    self.report_metric(&amp;quot;rabbitmq.queue.messages&amp;quot;, queue[&amp;quot;messages&amp;quot;], queue_dimensions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Финальный код ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|from dynatrace_extension import Extension, Status, StatusValue&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
&lt;br /&gt;
class ExtensionImpl(Extension):&lt;br /&gt;
&lt;br /&gt;
    def initialize(self):&lt;br /&gt;
&lt;br /&gt;
        self.extension_name = &amp;quot;rabbitmq_extension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def query(self):&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        The query method is automatically scheduled to run every minute&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        self.logger.info(&amp;quot;query method started for rabbitmq_extension.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for endpoint in self.activation_config[&amp;quot;endpoints&amp;quot;]:&lt;br /&gt;
&lt;br /&gt;
            url = endpoint[&amp;quot;url&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            user = endpoint[&amp;quot;user&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            password = endpoint[&amp;quot;password&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            self.logger.debug(f&amp;quot;Running endpoint with url '{url}'&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            # We've added these three lines&lt;br /&gt;
&lt;br /&gt;
            # 1 - Make a request to the /api/overview endpoint&lt;br /&gt;
&lt;br /&gt;
            cluster = requests.get(f&amp;quot;{url}/api/overview&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
            # 2 - Collect some dimensions for our metrics&lt;br /&gt;
&lt;br /&gt;
            dimensions = {&lt;br /&gt;
&lt;br /&gt;
                &amp;quot;cluster&amp;quot;: cluster[&amp;quot;cluster_name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                &amp;quot;rabbitmq_version&amp;quot;: cluster[&amp;quot;rabbitmq_version&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # 3 - Send a metric to Dynatrace&lt;br /&gt;
&lt;br /&gt;
            self.report_metric(&amp;quot;rabbitmq.cluster.queues&amp;quot;, cluster[&amp;quot;object_totals&amp;quot;][&amp;quot;queues&amp;quot;], dimensions)&lt;br /&gt;
&lt;br /&gt;
            # 4 - Get nodes&lt;br /&gt;
&lt;br /&gt;
            nodes = requests.get(f&amp;quot;{url}/api/nodes&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
            for node in nodes:&lt;br /&gt;
&lt;br /&gt;
                # 5 - Add node specific dimensions, including it's parent (the cluster) dimensions&lt;br /&gt;
&lt;br /&gt;
                node_dimensions = {&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;node&amp;quot;: node[&amp;quot;name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                    **dimensions&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                # 6 - Report a metric for each node&lt;br /&gt;
&lt;br /&gt;
                self.report_metric(&amp;quot;rabbitmq.node.mem_used&amp;quot;, node[&amp;quot;mem_used&amp;quot;], node_dimensions)&lt;br /&gt;
&lt;br /&gt;
            # 7 - Get queues&lt;br /&gt;
&lt;br /&gt;
            queues = requests.get(f&amp;quot;{url}/api/queues&amp;quot;, auth=(user, password)).json()&lt;br /&gt;
&lt;br /&gt;
            for queue in queues:&lt;br /&gt;
&lt;br /&gt;
                # 8 - Add queue specific dimensions, including it's parent (the cluster) dimensions&lt;br /&gt;
&lt;br /&gt;
                queue_dimensions = {&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;name&amp;quot;: queue[&amp;quot;name&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;node&amp;quot;: queue[&amp;quot;node&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                    &amp;quot;state&amp;quot;: queue[&amp;quot;state&amp;quot;],&lt;br /&gt;
&lt;br /&gt;
                    **dimensions&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                # 9 - Report a metric for each queue&lt;br /&gt;
&lt;br /&gt;
                self.report_metric(&amp;quot;rabbitmq.queue.messages&amp;quot;, queue[&amp;quot;messages&amp;quot;], queue_dimensions)&lt;br /&gt;
&lt;br /&gt;
        self.logger.info(&amp;quot;query method ended for rabbitmq_extension.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def fastcheck(self) -&amp;gt; Status:&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        This is called when the extension runs for the first time.&lt;br /&gt;
&lt;br /&gt;
        If this AG cannot run this extension, raise an Exception or return StatusValue.ERROR!&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return Status(StatusValue.OK)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    ExtensionImpl().run()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
&lt;br /&gt;
    main()&lt;br /&gt;
|}&lt;br /&gt;
Вам следует разделить метод &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; на более мелкие методы.&lt;br /&gt;
&lt;br /&gt;
Полный код можно найти в нашем настоящем [https://github.com/dynatrace-extensions/python-rabbitmq расширении '''RabbitMQ''' на '''Github'''],﻿ которое включает дашборды, топологию, экраны, все метрики и многое другое.&lt;br /&gt;
&lt;br /&gt;
== Сборка расширения ==&lt;br /&gt;
Если вы ещё этого не сделали, вы можете сгенерировать сертификаты разработчика с помощью команды '''Visual Studio Code''' &amp;lt;code&amp;gt;Dynatrace extensions: Generate certificates&amp;lt;/code&amp;gt;. Подробнее об этой команде см. в [[Справочник команд для VS Code|документации по генерации сертификатов]].&lt;br /&gt;
&lt;br /&gt;
Чтобы создать пакет расширения, выполните команду &amp;lt;code&amp;gt;Dynatrace extensions: Build&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Эта команда запустит команду &amp;lt;code&amp;gt;dt-sdk build&amp;lt;/code&amp;gt;, которая создаст подписанный файл расширения в папке &amp;lt;code&amp;gt;custom_rabbitmq-extension-0.0.1.zip&amp;lt;/code&amp;gt;. Клюя-АСТРОМ будет запускать только расширения &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, [[О расширениях|подписанные доверенным сертификатом]].&lt;br /&gt;
&lt;br /&gt;
Расширение '''Visual Studio Code''' также предложит вам загрузить расширение в среду Ключ-АСТРОМ, что является приятной и удобной функцией.&lt;br /&gt;
&lt;br /&gt;
== Настройка расширения ==&lt;br /&gt;
Перейдите в Ключ-АСТРОМ и настройте расширение. Вы можете использовать приложение '''Расширения''' или перейти в раздел &amp;lt;code&amp;gt;Infrastructure Observability&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;Extensions&amp;lt;/code&amp;gt;, чтобы настроить расширение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Для запуска этого расширения из АктивногоШлюза или ЕдиногоАгента необходимо доверять вашему сертификату разработчика.&lt;br /&gt;
&lt;br /&gt;
Информацию о том, как распространять его, можно найти в [[Расширения знаков|документации по расширениям Sign]] .&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Визуализация данных ==&lt;br /&gt;
На данный момент мы отправляем в Ключ-АСТРОМ только метрические данные.&lt;br /&gt;
&lt;br /&gt;
Мы можем визуализировать эти показатели с помощью &amp;lt;code&amp;gt;Dashboards&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Notebooks&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Metric Explorer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Полноценное расширение будет включать дашборды, топологию, экраны и многое другое. Полный пример кода можно найти на странице [https://github.com/dynatrace-extensions/python-rabbitmq расширения RabbitMQ на GitHub]﻿.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>