﻿# Установка Tempo

> [HTML Version](install-tempo.html)

Tempo — это высокопроизводительная и масштабируемая система для хранения и анализа трассировок. Обеспечивает полное наблюдение за взаимодействиями между компонентами распределённых систем. Tempo позволяет устранить сложности, связанные с хранением и извлечением трассировок из многочисленных источников в режиме реального времени.

Предварительно установите [средства мониторинга](install-monitoring-tools.md).

Установка Tempo состоит из нескольких этапов:

1. [Загрузить Helm-чарт и конфигурационный файл](#download-helm-chart-and-config-file).

2. [Создать бакеты в minio](#create-bucket).

3. [Заполнить конфигурационный файл](#fill-config-file).

4. [Установить чарт Tempo с помощью Helm в Kubernetes-кластер](#install-chart-tempo).

5. [Задать параметры отправки трейсов](#traces).

6. [Настроить подключение Tempo в источниках данных Grafana](#configure-connection).

````
Начало внимание

````
При установке [Loki](install-loki.md) + Tempo начните с аддона Loki. Это позволит сохранить настройки перекрёстных ссылок, так как изначально прописываются настройки **Datasource**.

````
Конец внимание

````
После установки дополнения Tempo вы можете связать его трейсы с логами Loki. Это позволит быстрее диагностировать ошибки, т. к. из лога можно перейти по ссылке к деталям нужного трейса. Если вы используете платформу Deckhouse, вам доступно [подключение Tempo к её встроенному модулю Loki](#loki).

## Шаг 1. Загрузить Helm-чарт и конфигурационный файл

Для установки через интернет получите конфигурационный файл \[OBJECT\], выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm show values elma365/tempo > values-tempo.yaml

````


Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет

1. На компьютере с доступом в интернет скачайте архив актуальной версии (latest) чарта **Tempo** из репозитория ELMA365, выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm pull elma365/tempo

2. ````
Полученный архив чарта **tempo-X.Y.Z.tgz** скопируйте на сервер, где будет производиться установка.

3. Распакуйте чарт и скопируйте конфигурационный файл по умолчанию \[OBJECT\] в \[OBJECT\].

````
tar -xf tempo-X.Y.Z.tgz  
cp tempo/values.yaml values-tempo.yaml
````

## ````
Шаг 2. Создать бакет в MinIO

1. Создайте \[OBJECT\] для MinIO:

````
mc alias set my\_alias http://minio.local accessKey secretKey

````
2. Создайте бакет с наименованием \[OBJECT\], выполнив команду:

````
mc mb -p my\_alias/tempo --region=ru-central-1

## ````
Шаг 3. Заполнить конфигурационный файл

Заполнение конфигурационного файла values-tempo.yaml для установки Tempo

````
  
 tempo:  
    tempo:  
      retention: 24h  
      storage:  
        trace:  
          # tempo storage backend  
          # refer https://grafana.com/docs/tempo/latest/configuration/  
          ## Use s3 for example  
          backend: s3  
          # store traces in s3  
          s3:  
            bucket: tempo                        # store traces in this bucket  
            endpoint: minio.local:9000           # api endpoint  
            access\_key: access\_key               # optional. access key when using static credentials.  
            secret\_key: secret\_key               # optional. secret key when using static credentials.  
            insecure: true                       # optional. enable if endpoint is http  
          #backend: local  
          local:  
            path: /var/tempo/traces  
          wal:  
            path: /var/tempo/wal  
  jaeger:  
    enabled: false  
    fullnameOverride: "jaeger"  
    provisionDataStore:  
        cassandra: false  
    storage:  
      type: badger  
    collector:  
      enabled: false  
    agent:  
      enabled: true  
      extraEnv:  
        MEMORY\_MAX\_TRACES: 100000  
        SPAN\_STORAGE\_TYPE: badger  
        BADGER\_EPHEMERAL: false  
        BADGER\_DIRECTORY\_VALUE: /badger/data  
        BADGER\_DIRECTORY\_KEY: /badger/key  
        REPORTER\_TYPE: grpc  
        REPORTER\_GRPC\_HOST\_PORT: tempo:14250  
        REPORTER\_GRPC\_RETRY\_MAX: 100
````

````
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет

  
Для подключения к приватному **registry** нужно:

1. Скачать образы ELMA365 и загрузить их в локальный реестр образов. Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Задать адрес и путь для параметра \[OBJECT\].

3. Указать наименование секрета с правами доступа к приватному **registry** в параметре \[OBJECT\]. Секрет должен быть создан вручную и зашифрован в Base64.

````
  tempo:  
\## параметры подключения к приватному registry  
\## адрес и путь для приватного registry  
  repository: registry.example.com/tempo  
\#   tag: "2.8.1"  
\#   pullPolicy: IfNotPresent  
  pullSecrets:  
    - myRegistryKeySecretName  
  
jaeger-all-in-one:  
\## параметры подключения к приватному registry  
  image:  
\## адрес и путь для приватного registry  
    repository: registry.example.com/all-in-one  
\#     versionOverride: "1.53.0"  
\#     pullPolicy: IfNotPresent  
  imagePullSecrets:  
    - myRegistryKeySecretName

````
  
Где формат **repository**: адрес — \[OBJECT\] .

## Шаг 4. Установить чарт Tempo с помощью Helm в Kubernetes-кластер

Выполните установку чарта **Tempo** в \[OBJECT\].

Для установки через интернет:

````
helm upgrade --install -n monitoring tempo elma365/tempo -f values-tempo.yaml

````
Для офлайн-установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:

````
helm upgrade --install tempo ./tempo -f values-tempo.yaml -n monitoring

## ````
Шаг 5. Задать параметры отправки трейсов

Для отображения трейсов задайте параметры \[OBJECT\] или \[OBJECT\] [на стороне приложения ELMA365](enable-monitoring-enterprise.md#alteration-config-file).

````
elma365:  
  global:  
    monitoring:  
      jaegerAgentAddress: "jaeger-agent.monitoring.svc.cluster.local:5775"  
      jaegerCollectorEndpoint: "http://tempo.monitoring.svc.cluster.local:14268/api/traces"

1. ````
Приоритетным способом является указание HTTP-эндпоинта коллектора через параметр \[OBJECT\]. В этом случае трейсы будут отправляться напрямую в систему сбора, минуя промежуточные компоненты.

2. Альтернативный вариант — использование Jaeger Agent, указав его адрес в параметре \[OBJECT\]. Тогда трейсы передаются агенту по UDP-протоколу, после чего он перенаправляет их дальше в систему хранения.

3. Если ни один из параметров не задан, трейсы автоматически отправляются на порт \[OBJECT\] локального узла, где ожидается работа агента Jaeger в режиме DaemonSet.

## Шаг 6. Настроить подключение Tempo в источниках данных Grafana

Добавьте источник Tempo при установке. Проверить его можно, используя путь: **Home > Administration > Data source > Tempo**.

В поле URL укажите значение **http://tempo:3200**.

**(install-tempo-1.png)**

Для удобного просмотра в источник данных Loki добавляется перекрёстная ссылка на Tempo.

````
(Query: \$\{\_\_value.raw\}; Regex: (?:trace\\.traceid|traceid)(?:":|=)"(\\w+)")

````
 **(install-tempo-2.png)**

Настройка **Derived Fields** обеспечит удобный просмотр ссылочного соединения трейса в Tempo.

**(install-tempo-3.png)**

## Связать трейсы Tempo c логами встроенного модуля Loki из платформы Deckhouse

При использовании платформы Deckhouse с помощью её [встроенного модуля Loki](install-loki.md#loki-in-deckhouse) можно собирать логи и просматривать их в интерфейсе Grafana. Когда вы установите Tempo, это дополнение также добавится в источники данных Grafana для просмотра трейсов. Чтобы в логах из встроенного модуля Loki отображались ссылки на трейсы из Tempo, создайте пользовательский источник данных `GrafanaAdditionalDatasource`. 

Для этого:

1. Получите токен из параметра `httpHeaderValue1`, используя команду:

````
kubectl get GrafanaAdditionalDatasource d8-loki -o yaml

2. ````
С помощью следующей команды примените конфигурацию для установки связи между логами Loki и трейсами из Tempo, указав полученный токен вместо значения `<token>`:

````
kubectl apply -f - <<EOF  
\# Настраиваем сбор логов со всех подов  
apiVersion: deckhouse.io/v1  
kind: GrafanaAdditionalDatasource  
metadata:  
  name: loki  
spec:  
  access: Proxy  
  basicAuth: false  
  jsonData:  
    derivedFields:  
      - datasourceUid: tempo  
        matcherRegex: "(?:trace.traceid|traceid)(?:\\":|=)\\"(\\\\w+)\\""  
        url: '\$\$\{\_\_value.raw\}'  
        name: traceid  
    httpHeaderName1: Authorization  
    maxLines: 5000  
    timeInterval: 30s  
    tlsSkipVerify: true  
  secureJsonData:  
    httpHeaderValue1: Bearer <token>  
  type: loki  
  url: https://loki.d8-monitoring:3100  
EOF

````
