+++
title = "Связанные переменные"
keywords = ["harvest", "templating", "variable", "nested", "chained", "linked"]
aliases = ["/docs/harvest/latest/variables/chained-variables.md"]
weight = 800
+++

# Связанные переменные

Переменные с цепочкой, также называемые связанными переменными или вложенными переменными, представляют собой переменные запроса с одной или несколькими другими переменными в их запросе переменных. На этой странице объясняется, как работают связанные переменные, и приводятся ссылки на примеры панелей мониторинга, в которых используются связанные переменные.

Запросы с цепочкой переменных различны для каждого источника данных, но исходная посылка одинакова для всех. Вы можете использовать запросы с цепочкой переменных в любом источнике данных, который их допускает.

Возможны чрезвычайно сложные связанные шаблонные панели мониторинга глубиной 5 или 10 уровней. Технически, нет предела тому, насколько глубоко или сложно вы можете зайти, но чем больше у вас ссылок, тем больше нагрузка на запрос.

# Примеры панели управления # Harvest Play

Следующие информационные панели Harvest Play содержат довольно простые переменные с цепочкой, всего в два слоя глубиной. Чтобы просмотреть переменные и их настройки, нажмите ** Настройки панели мониторинга ** (значок шестеренки), а затем нажмите ** Переменные **. Оба примера подробно описаны в следующем разделе.

- [Графитовый шаблон Nested](https://play.harvest.org/d/000000056/graphite-templated-nested?orgId=1&var-app=country&var-server=All&var-interval=1h)
- [Шаблон InfluxDB](https://play.harvest.org/d/000000002/influxdb-templated?orgId=1 )

## Объясненные примеры

Переменные полезны для повторного использования панелей мониторинга, динамического изменения того, что отображается на панелях мониторинга. Связанные переменные особенно полезны для фильтрации того, что вы видите.

Создайте отношения родитель / потомок в переменной, своего рода древовидную структуру, где вы можете выбирать различные уровни фильтров.

В следующих разделах подробно объясняются связанные примеры на приведенных выше информационных панелях и основываются на них. Хотя примеры относятся к конкретным источникам данных, эти концепции могут применяться в широком смысле.

### Пример графита

В этом примере у вас есть несколько приложений. Каждое приложение имеет свое подмножество серверов. Он основан на [Графитовом шаблоне Nested](https://play.harvest.org/d/000000056/graphite-templated-nested?orgId=1&var-app=country&var-server=All&var-interval=1h).

Теперь вы могли бы создать отдельные переменные для каждого источника метрик, но тогда вы должны знать, какой сервер подключается к какому приложению. Лучшее решение - использовать одну переменную для фильтрации другой. В этом примере, когда пользователь изменяет значение переменной `app`, он изменяет параметры выпадающего списка, возвращаемые переменной `server`. Обе переменные используют опцию ** С несколькими значениями ** и опцию ** Включить все **, позволяя пользователям выбирать некоторые или все представленные параметры в любое время.

#### переменная приложения

Запрос для этой переменной в основном гласит: "Дайте мне все существующие приложения".

```
приложения.*
```

Возвращаемые значения - "серверная часть", `страна`, `поддельный сайт" и `Все`.

#### переменная сервера

Запрос для этой переменной в основном гласит: "Дайте мне все серверы для выбранного в данный момент приложения".

```
приложения.$приложение.*
```

Если пользователь выбирает "серверная часть", то запрос изменяется на:

```
приложения.серверная часть.*
```

Запрос возвращает все серверы, связанные с `backend`, включая `backend_01`, `backend_02` и так далее.

Если пользователь выбирает "поддельный сайт", то запрос изменяется на:

```
приложения.поддельный сайт.*
```

Запрос возвращает все серверы, связанные с `fakesite`, включая `web_server_01`, `web_server_02` и так далее.

#### Больше переменных

> ** Примечание:** Этот пример является теоретическим. Сервер Graphite, используемый в примере, не содержит показателей процессора.

Приборная панель останавливается на двух уровнях, но вы могли бы продолжать движение. Например, если вы хотите получить показатели процессора для выбранных серверов, вы можете скопировать переменную `server` и расширить запрос так, чтобы он считывал:

```
приложения.$приложение.$сервер.процессор.*
```

Этот запрос в основном гласит: "Покажите мне показатели процессора для выбранного сервера".

В зависимости от того, какие параметры переменных выбирает пользователь, вы можете получать запросы типа:

```
приложения.серверная часть.сервер_01.процессор.*
приложения.{серверная часть.сервер_02,сервер_03}.процессор.*
приложения.поддельный сайт.web_server_01.процессор.*
```

## Пример # InfluxDB

В этом примере у вас есть несколько центров обработки данных. Каждый центр обработки данных имеет свое подмножество хостов. Он основан на [InfluxDB Templated](https://play.harvest.org/d/000000002/influxdb-templated?orgId=1 ).

В этом примере, когда пользователь изменяет значение переменной `datacenter`, он изменяет параметры выпадающего списка, возвращаемые переменной `host`. Переменная `host` использует опцию **с несколькими значениями ** и опцию **Включить все **, позволяя пользователям выбирать некоторые или все представленные опции в любое время. "Центр обработки данных" не использует ни один из вариантов, поэтому вы можете выбрать только один центр обработки данных одновременно.

#### переменная центра обработки данных

Запрос для этой переменной в основном гласит: "Дайте мне все существующие центры обработки данных".

```
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "центр обработки данных"
```

Возвращаемые значения - "Америка`, `Африка`, `Азия` и `Европа`.

#### переменная хоста

Запрос для этой переменной в основном гласит: "Дайте мне все хосты для выбранного в данный момент центра обработки данных".

```
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "hostname", ГДЕ "datacenter" =~ /^$datacenter$/
```

Если пользователь выбирает "Америка", то запрос меняется на:

```
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "имя хоста", ГДЕ "центр обработки данных" = ~ /^Америка/
```

Запрос возвращает все серверы, связанные с `America`, включая `server1`, `server2` и так далее.

Если пользователь выбирает "Европа", то запрос меняется на:

```
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "имя хоста", ГДЕ "центр обработки данных" = ~ /^Европа/
```

Запрос возвращает все серверы, связанные с `Europe`, включая `server3`, `server4` и так далее.

#### Больше переменных

> ** Примечание:** Этот пример является теоретическим. Сервер InfluxDB, используемый в примере, не содержит показателей процессора.

Приборная панель останавливается на двух уровнях, но вы могли бы продолжать движение. Например, если вы хотите получить показатели процессора для выбранных хостов, вы можете скопировать переменную `host` и расширить запрос так, чтобы он считывал:

```
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "cpu", ГДЕ "datacenter" =~ /^$datacenter$/ И "host" =~ /^$host$/
```

Этот запрос в основном гласит: "Покажите мне показатели процессора для выбранного хоста".

В зависимости от того, какие параметры переменных выбирает пользователь, вы можете получать запросы типа:

``удар
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "cpu", ГДЕ "datacenter" =~ /^America/ И "host" =~ /^server2/
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "cpu", ГДЕ "центр обработки данных" = ~ /^Африка/ И "хост" = ~ /^сервер/7/
ПОКАЗЫВАТЬ ЗНАЧЕНИЯ ТЕГОВ С КЛЮЧОМ = "cpu", ГДЕ "центр обработки данных" = ~ /^Европа/ И "хост" = ~ /^server3+server4/
```

## Лучшие практики и советы

Следующие действия упростят использование ваших панелей мониторинга и переменных.

### Создание новых связанных переменных

- Переменные цепочки создают родительские/дочерние зависимости. Вы можете представить их в виде лестницы или дерева.
- Самый простой способ создать новую цепную переменную - это скопировать переменную, на которой вы хотите основать новую. В списке переменных щелкните значок ** Дублировать переменную** справа от записи переменной, чтобы создать копию. Затем вы можете добавить к запросу родительскую переменную.
- Новые переменные, созданные таким образом, отображаются в нижней части списка. Возможно, вам придется перетащить его в другое место в списке, чтобы упорядочить в логическом порядке.

### Переменный порядок

Вы можете изменить порядок переменных в списке переменных панели мониторинга, щелкнув стрелки вверх и вниз справа от каждой записи. Harvest перечисляет выпадающие списки переменных слева направо в соответствии с этим списком, причем переменная находится вверху в крайнем левом углу.

- Перечислите переменные, которые не имеют зависимостей вверху, перед их дочерними переменными.
- Каждая переменная должна следовать за той, от которой она зависит.
- Помните, что в пользовательском интерфейсе нет указания на то, какие переменные имеют отношения зависимости. Перечислите переменные в логическом порядке, чтобы облегчить работу другим пользователям (и вам самим).

### Рассмотрение сложности

Чем больше уровней зависимости у вас есть в переменных, тем больше времени потребуется для обновления панелей мониторинга после изменения переменных.

Например, если у вас есть ряд из четырех связанных переменных (страна, регион, сервер, метрика) и вы изменяете значение корневой переменной (страна), то Harvest должна выполнить запросы для всех зависимых переменных, прежде чем обновлять визуализации на панели мониторинга.