---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - ru/cookbook/useful-commands
  - href: ru/cookbook/useful-commands.md
    type: text/markdown
    title: Markdown version
csp:
  - script-src:
      - https://mc.yandex.ru
    img-src:
      - https://mc.yandex.ru
    connect-src:
      - https://mc.yandex.ru
      - wss://mc.yandex.ru
    child-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-ancestors:
      - 'blob:'
      - https://mc.yandex.ru
canonical: ru/cookbook/useful-commands.html
title: Полезные команды DataLens On-premises
description: >-
  Из статьи вы узнаете о полезных командах, которые пригодятся для решения задач
  администрирования DataLens On-premises.
vcsPath: ru/cookbook/useful-commands.md
---

# Полезные команды

В этом уроке вы найдете команды, которые пригодятся при администрировании DataLens On-premises.

## Получение всех логов со всех контейнеров приложения {#total-logging}

```shell
./init.sh --stern .
```

## Сбор логов только с одного сервиса {#service-logging}

```shell
./init.sh --stern --tail 100 --no-follow deployment/datalens-enterprise-auth
```

## Получение всех событий K8s-кластера в текущем пространстве имен {#k8s-events}

```shell
./init.sh --kubectl get events
```

## Развертывание на урезанной конфигурации {#min-install}

Минимальная конфигурация, которую мы рекомендуем для комфортной работы:

```yaml
- vCPU — 8;
- RAM — 16 ГБ;
```

При необходимости можно развернуть и при такой конфигурации:

```yaml
- vCPU — 4;
- RAM — 8 ГБ;
```

И даже при такой (при условии деградации производительности):

```yaml
- vCPU — 2;
- RAM — 4 ГБ;
```

Для переопределения значений выделенных ресурсов для сервисов укажите необходимые значения в файле `values.yaml`.

Достаточно указать только те значения, которые требуют переопределения, например:

```yaml
application:
    control_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    data_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    ui:
    replicas: 1
    version: '0.95.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 256Mi
        limits:
        memory: 512Mi
    us:
    replicas: 1
    version: '0.79.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 512Mi
        limits:
        memory: 1024Mi
    auth:
    replicas: 1
    version: '0.34.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
```

Для еще более сжатой конфигурации можно указать так:

```shell
application:
    control_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 256Mi
        limits:
        memory: 512Mi
    data_api:
    replicas: 1
    version: '0.29.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 512Mi
        limits:
        memory: 1024Mi
    ui:
    replicas: 1
    version: '0.95.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.25
        memory: 256Mi
        limits:
        memory: 512Mi
    us:
    replicas: 1
    version: '0.79.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 0.5
        memory: 256Mi
        limits:
        memory: 512Mi
    auth:
    replicas: 1
    version: '0.34.0'
    maxSurge: 50%
    maxUnavailable: 0
    resources:
        requests:
        cpu: 1
        memory: 256Mi
        limits:
        memory: 512Mi
```

После указания настроек можно применить значения через команду `./init.sh --values ./values.yaml`.

## Откат на предыдущий релиз {#rollback}

```shell
export KUBECONFIG="/etc/rancher/k3s/k3s.yaml"

./bin/helm-amd64 rollback datalens-enterprise -n datalens-enterprise
```

## Отладка LDAP-интеграции {#ldap-debug}

```shell
ldapsearch \
-H ldap://localhost:8389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=users,dc=example,dc=org \
"(uid=bob)"
```

```shell
ldapsearch \
-H ldap://localhost:8389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=groups,dc=example,dc=org \
"(&(objectClass=groupOfNames)(member=uid=bob,ou=users,dc=example,dc=org))"
```

## Генерация нового пароля администратора {#admin-password-new}

```shell
echo ""
echo "Generate DataLens password hash..."

PASSWORD_LENGTH=32

PASSWORD_VALUE=$(openssl rand -base64 "${PASSWORD_LENGTH}" | tr -dc a-zA-Z0-9 | head -c "${PASSWORD_LENGTH}")

SALT=$(openssl rand 16)
SALT_HEX=$(echo -n "${SALT}" | od -A n -t x1 -v | tr -d ' \n')
SALT_BASE64URL=$(echo -n "${SALT}" | base64 | tr '+/' '-_' | tr -d '=')

echo "  new admin password: ${PASSWORD_VALUE}"

KEY_LENGTH=64
COST_ITERATIONS=16384
BLOCK_SIZE=8
PARALLELIZATION=1
MAX_MEMORY_BYTES=33554432

KEY_BASE64URL=$(
  openssl kdf -keylen "${KEY_LENGTH}" \
    -kdfopt "pass:${PASSWORD_VALUE}" -kdfopt "hexsalt:${SALT_HEX}" \
    -kdfopt "n:${COST_ITERATIONS}" -kdfopt "r:${BLOCK_SIZE}" -kdfopt "p:${PARALLELIZATION}" \
    -kdfopt "maxmem_bytes:${MAX_MEMORY_BYTES}" \
    -binary scrypt | base64 | tr '+/' '-_' | tr -d '='
)

PASSWORD_HASH="${SALT_BASE64URL}:${KEY_BASE64URL}"
            
echo "  new hash: ${PASSWORD_HASH}"
```

## Обновление пароля администратора в базе {#admin-password-update}

```shell
psql \
    --host "${POSTGRES_HOST}" \
    --port "${POSTGRES_PORT}" \
    --username "${POSTGRES_USER_AUTH}" \
    --dbname "${POSTGRES_DB_AUTH}" <<-EOSQL
  UPDATE auth_users SET password = '${PASSWORD_HASH}' WHERE login = 'admin';
EOSQL
```

## Ошибка авторизации `Access denied` {#access-denied}


![image](../_assets/datalens/cookbook/access-denied.png)


1. Проверить корректное заполнение секретов:

    ```shell
    secrets.AUTH_TOKEN_PRIVATE_KEY 
    secrets.AUTH_TOKEN_PUBLIC_KEY
    ```

1. Если использовался режим развертывания через файл `values.yaml`, то эти секреты нужно сгенерировать самостоятельно.

    Пример файла `values.yaml`:

    ```shell
    KUBECONFIG=~/.kube/config ./init.sh --values ./values.deploy.yaml --ingress-domain <domain> --disable-postgres
    ```

    Команда для генерации ключа:

    ```shell
    openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096
    ```

## Авторизация проходит успешно, но страница авторизации появляется по кругу {#ui-app-endpoint}

* В Auth-сервисе можно проверить значение переменной `UI_APP_ENDPOINT` — именно на это значение выписывается Cookie авторизации.
* Если пользователь заходит в сервис по другому эндпоинту, то авторизация будет выполняться с некорректным значением Cookie.

## Получение ключа шифрования `CONTROL_API_CRYPTO_KEY` из секретов K8s {#k8s-crypto-key}

```shell
./init.sh --kubectl get secret datalens-enterprise-secrets -o jsonpath='{.data.CONTROL_API_CRYPTO_KEY}' | base64 -d; echo
```

Вывод все равно будет в формате base64. Это не ошибка, это значение ключа в base64, которое и нужно сохранить.

## Восстановление воркбука по его ID {#workbook-id-restore}

```shell
 ./init.sh --kubectl exec -it deploy/datalens-enterprise-us -- node -e "fetch('http://localhost:8080/private/v2/workbooks/<WORKBOOK_ID>/restore',{method:'POST',headers:{'content-type':'application/json','x-us-master-token':process.env.MASTER_TOKEN}}).then(r=>r.json()).then(console.log)"
```

Где `<WORKBOOK_ID>` — ID воркбука.

Получить список удаленных воркбуков:

```shell
./init.sh --pg sh -c 'psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB_US}" -c "SELECT encode_id(workbook_id) AS workbook_id,deleted_at FROM workbooks WHERE deleted_at IS NOT NULL"'
```

Заполнять ничего не нужно, скопируйте и вставьте команду как есть.

## Итоги {#results}

Вы узнали о полезных командах, которые пригодятся для решения задач администрирования DataLens On-premises.
