<?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=API_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA_%E2%80%94_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA</id>
	<title>API метрик — выражения метрик - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=API_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA_%E2%80%94_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=API_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA_%E2%80%94_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA&amp;action=history"/>
	<updated>2026-09-16T13:25:46Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=API_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA_%E2%80%94_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA&amp;diff=6532&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «= API метрик — выражения метрик =  Метрические выражения позволяют использовать простые арифметические операции прямо в селекторе метрики.  Например, это выражение вычисляет отношение (в процентах) двух показателей:  &lt;code&gt;metric1 / metric2 * 100&lt;/code&gt;  В качестве опер...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=API_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA_%E2%80%94_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA&amp;diff=6532&amp;oldid=prev"/>
		<updated>2026-07-29T03:03:44Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «= API метрик — выражения метрик =  Метрические выражения позволяют использовать простые арифметические операции прямо в селекторе метрики.  Например, это выражение вычисляет отношение (в процентах) двух показателей:  &amp;lt;code&amp;gt;metric1 / metric2 * 100&amp;lt;/code&amp;gt;  В качестве опер...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= API метрик — выражения метрик =&lt;br /&gt;
&lt;br /&gt;
Метрические выражения позволяют использовать простые арифметические операции прямо в селекторе метрики.&lt;br /&gt;
&lt;br /&gt;
Например, это выражение вычисляет отношение (в процентах) двух показателей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;metric1 / metric2 * 100&amp;lt;/code&amp;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;
&lt;br /&gt;
* Селектор должен содержать как минимум один ключ метрики.&lt;br /&gt;
* В одном запросе можно запросить данные по 10 показателям. Для целей этого ограничения одно выражение (например, &amp;lt;code&amp;gt;metric2 + metric2&amp;lt;/code&amp;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;
# Сложение, вычитание&lt;br /&gt;
# Агрегация&lt;br /&gt;
&lt;br /&gt;
Если в цепочке преобразований было применено агрегирование, используется именно это агрегирование. Если преобразование не применялось, используется агрегирование по умолчанию. Ваши операнды метрик могут иметь разные агрегирования. Например, &amp;lt;code&amp;gt;metric:max - metric:min&amp;lt;/code&amp;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;
&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;
&lt;br /&gt;
После формирования пар кортежей точки данных выравниваются, а затем к выровненным точкам данных применяется необходимая арифметическая операция.&lt;br /&gt;
&lt;br /&gt;
* Если хотя бы одна из выровненных точек данных равна null, выражение преобразуется в null.&lt;br /&gt;
* Если в операции используется число, оно выравнивается с каждой точкой данных операнда метрики.&lt;br /&gt;
* Если один показатель представляет собой отдельную точку данных, а другой — ряд данных, то эта отдельная точка данных соответствует каждой точке данных ряда.&lt;br /&gt;
* Если оба показателя представляют собой одну точку данных, то точки данных совпадают, и результирующий временной интервал охватывает обе точки данных.&lt;br /&gt;
* Если оба показателя являются последовательными рядами, то точки данных выравниваются по временным меткам.&lt;br /&gt;
* Для любых невыровненных точек данных выражение преобразуется в null.&lt;br /&gt;
&lt;br /&gt;
= Передовые методы =&lt;br /&gt;
&lt;br /&gt;
== Использовать только при необходимости ==&lt;br /&gt;
&lt;br /&gt;
Используйте выражение метрики только в том случае, если без него вы не сможете достичь своей цели. Допустим, вы хотите рассчитать среднее использование ЦП двумя хостами, &amp;lt;code&amp;gt;HOST-001&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;HOST-002&amp;lt;/code&amp;gt;. Вы можете сделать это с помощью выражения метрики:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
    builtin:host.cpu.usage:filter(eq(&amp;quot;dt.entity.host&amp;quot;,&amp;quot;HOST-001&amp;quot;)):splitBy()&lt;br /&gt;
    +&lt;br /&gt;
    builtin:host.cpu.usage:filter(eq(&amp;quot;dt.entity.host&amp;quot;,&amp;quot;HOST-002&amp;quot;)):splitBy()&lt;br /&gt;
)&lt;br /&gt;
/2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У этого подхода есть две проблемы. Во-первых, выражение трудночитаемо и, следовательно, подвержено синтаксическим ошибкам. Во-вторых, если один из хостов находится в автономном режиме, результат выражения будет пустым. Хотя вторую проблему можно было бы решить с помощью преобразования по умолчанию, использование агрегирования по среднему значению более эффективно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builtin:host.cpu.usage&lt;br /&gt;
:filter(&lt;br /&gt;
    or(&lt;br /&gt;
        eq(&amp;quot;dt.entity.host&amp;quot;,&amp;quot;HOST-001&amp;quot;),&lt;br /&gt;
        eq(&amp;quot;dt.entity.host&amp;quot;,&amp;quot;HOST-002&amp;quot;)&lt;br /&gt;
    )&lt;br /&gt;
)&lt;br /&gt;
:splitBy()&lt;br /&gt;
:avg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Не переводите единицы измерения ==&lt;br /&gt;
&lt;br /&gt;
Не используйте метрические выражения для преобразования единиц измерения данных. Вместо этого используйте преобразование &amp;lt;code&amp;gt;toUnit&amp;lt;/code&amp;gt;. Единственное исключение из этого правила — единицы измерения, которые не поддерживаются Ключ-АСТРОМ. Используйте запрос &amp;#039;&amp;#039;&amp;#039;GET all units&amp;#039;&amp;#039;&amp;#039;, чтобы получить список поддерживаемых единиц измерения.&lt;br /&gt;
&lt;br /&gt;
== Ограничить использование преобразований ==&lt;br /&gt;
&lt;br /&gt;
Преобразование предела всегда следует применять к результату вычисления, а не к его операндам.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующий запрос, который пытается сложить 10 периодов наибольшего использования ЦП с 10 периодами простоя ЦП.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builtin:host.cpu.usage:sort(value(avg,descending)):limit(10)&lt;br /&gt;
+&lt;br /&gt;
builtin:host.cpu.idle:sort(value(avg,descending)):limit(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас большая среда с сотнями хостов, маловероятно, что 10 хостов с самым высоким уровнем загрузки ЦП окажутся среди 10 хостов с самым длительным временем простоя ЦП. Операнды не будут иметь совпадающих кортежей, поэтому результат выражения будет пустым. Решение состоит в том, чтобы применить ограничение к результату выражения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
    builtin:host.cpu.usage&lt;br /&gt;
    +&lt;br /&gt;
    builtin:host.cpu.idle&lt;br /&gt;
)&lt;br /&gt;
:sort(value(auto,descending))&lt;br /&gt;
:limit(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Устраните пробелы в данных с помощью преобразования по умолчанию ==&lt;br /&gt;
&lt;br /&gt;
Преобразование по умолчанию особенно полезно для выражений метрик. Хотя обычно преобразование не заполняет точки данных, &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; если метрика не имеет ни одной точки данных в заданном временном интервале, в контексте выражения метрики его семантика несколько иная. Пока метрика с любой стороны выражения имеет хотя бы одну точку данных, преобразование заполнит пробелы. Однако, если все метрики в выражении содержат отсутствующие данные, преобразование вернет пустые результаты.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример выражения для расчета коэффициента ошибок для ключевых действий пользователя:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builtin:apps.other.keyUserActions.reportedErrorCount.os&lt;br /&gt;
/&lt;br /&gt;
builtin:apps.other.keyUserActions.requestCount.os&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если за указанный вами период времени было много запросов, но ни одной ошибки, результат будет пустым, хотя коэффициент ошибок &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; был бы более информативным. Этого можно добиться с помощью преобразования &amp;lt;code&amp;gt;default(0)&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builtin:apps.other.keyUserActions.reportedErrorCount.os:default(0)&lt;br /&gt;
/&lt;br /&gt;
builtin:apps.other.keyUserActions.requestCount.os&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>