Назад | Перейти на главную страницу

InfluxDB 2.0 | Результат резервного копирования: «read: dbrp is unauthorized». Как перенести данные корзины?

Мы запускаем экземпляр InfluxDB 2.0 в среде докеров. Несколько недель мы собирали данные с помощью телеграфа и храним их в корзине. Теперь мы хотели бы сделать резервную копию наших данных.

Что мы можем сделать, чтобы сохранить наши данные, так это сделать копию /root/.influxdbv2/, но мы предпочитаем использовать встроенные функции и иметь возможность восстанавливать данные в другом экземпляре InfluxDB 2.0. Вот тут и начались проблемы.

Версия Influx

$ influx version
Influx CLI 2.0.0-beta.13 (git: 86796ddf2d) build_date: 2020-07-09T12:15:08Z

Пытаюсь сделать резервную копию

$ export INFLUX_TOKEN=<token of admin user>
$ influx bucket find --org myOrg
ID                      Name            Retention       Organization ID
05b89a36ffe01003        _monitoring     168h0m0s        05b89a36ffe01000
05b89a36ffe01002        _tasks          72h0m0s         05b89a36ffe01000
05b89a36ffe01001        myBucket        0s              05b89a36ffe01000

$ influx backup -p /backup/backup_$(date '+%Y-%m-%d_%H-%M')
Error: read:dbrp is unauthorized
See 'influx backup -h' for help

В поисках influx "Error: read:dbrp is unauthorized" ничего не нашел бы в интернете.

Единственный намек, который я получил от документация:

Если вы настроили InfluxDB с использованием v2.0.0-beta.1 или более ранней версии, вы не сможете выполнять резервное копирование данных. У корневых токенов, созданных до v2.0.0-beta.2, нет необходимых разрешений. Чтобы успешно использовать инструмент резервного копирования, настройте новый экземпляр InfluxDB, используя v2.0.0-beta.2 +.

Я почти уверен, что мы начали с более позднего бета-версия, с марта, но я не могу это проверить дважды. Однако я хотел бы найти решение для экспорта наших данных.

Попытка добавить недостающие разрешения

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

Проверить текущие разрешения

Во время проверки разрешений я вижу, что у моего токена администратора нет dbrp разрешения. Но когда я создаю новый токен в графическом интерфейсе через Генерировать -> Все токены доступа, то у нового токена есть необходимые разрешения:

$ influx auth list
05f79912b4f73000        <newToken>       myAdmin        05b89a36e7e01000        [... read:orgs/05b89a36ffe01000/dbrp write:orgs/05b89a36ffe01000/dbrp ...]

(Я сократил вывод)

Ошибка при добавлении разрешений

Однако на всякий случай я все равно попытался добавить права своему администратору.

$ influx auth create --user myAdmin --org myOrg --read-dbrps
Error: Permission read:orgs/05b89a36ffe01000/dbrp is not allowed: read:orgs/05b89a36ffe01000/dbrp is unauthorized.

Пробуем новый созданный токен

Как мы видели на шаге выше, новый токен имеет разрешения dprp. Когда я использую этот токен для резервного копирования, я получаю еще одно сообщение об ошибке.

$ export INFLUX_TOKEN=<newToken>
$ influx backup -p /backup/backup_$(date '+%Y-%m-%d_%H-%M')
Error: read:authorizations is unauthorized
See 'influx backup -h' for help

В поисках этой ошибки нахожу одну аналогичная проблема, который ссылается другой.

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

Перенос данных в новый экземпляр InfluxDB 2.0

Когда я создаю новый Docker-контейнер InfluxDB 2.0, influx backup команда работает как положено. Итак, чтобы использовать встроенные команды, я хотел бы перенести собранные данные из моей корзины в другой экземпляр. Видите ли вы возможность или мне что-то не хватает, чтобы эти команды работали?

Большое спасибо.

PS: Ой, нет influxdb тег, вообще? И у меня недостаточно репутации, чтобы создать этот тег. Надеюсь, это подходящая платформа для вопросов и ответов?

Вчера я опубликовал этот ответ на проблему, которая поможет (инструкции дублируются ниже): https://github.com/influxdata/influxdb/issues/18882#issuecomment-663113088

Вы можете вручную отредактировать файл boltdb, чтобы добавить к токену недостающие разрешения. Вот как:

  1. Остановите процесс притока
  2. Обновитесь до последней бета-версии Influxd (в настоящее время beta-15).
  3. Установить https://github.com/br0xen/boltbrowser на машине, где находится резервная копия. Возможно, существуют и другие браузеры boltdb, но я использовал их для тестирования.
  4. СДЕЛАЙТЕ РЕЗЕРВНУЮ ~/.influxdbv2/influxd.bolt . Мол, это действительно важно. Если вы каким-либо образом повредите этот файл, вы НЕ сможете получить доступ к каким-либо данным в своей базе данных. Так что, может быть, сделайте две резервные копии :)
  5. Загрузите файл boltdb, используя что-нибудь вроде boltbrowser ~/.influxdbv2/influxd.bolt Вы должны увидеть что-то вроде этого:
  6. Перейдите к authorizationsv1 parent и найдите ключ с идентификатором корневого токена. Если у вас более одного токена, вы можете найти сопоставление для токена -> id в authorizationindexv1 родитель.
  7. Что мы хотим сделать, так это добавить dbrp разрешение в значение массива json. если ты ударил e, вы сможете изменить значение вручную. В самом конце permissions array и добавьте следующую запись для чтения и записи ресурса dbrp: {"action":"read","resource":{"type":"dbrp"}},{"action":"write","resource":{"type":"dbrp"}} (не забывайте запятую). Возможно, вам будет проще экспортировать json в файл ( x key) и протестируйте редактирование там.
  8. Вам также может потребоваться добавить разрешения для stack ресурс, который {"action":"read","resource":{"type":"stack"}},{"action":"write","resource":{"type":"stack"}}. Короче говоря, если вы пройдете через этот процесс и все равно получите сообщение вроде Error: read:<resource> is unauthorized, просто вернитесь и добавьте чтение / запись для этого ресурса.
  9. Нажмите Enter, чтобы сохранить значение, а затем нажмите esc, чтобы вернуться в терминал.
  10. Запустите свой входящий экземпляр и убедитесь, что токен действителен, перейдя на страницу токенов в пользовательском интерфейсе или запустив influx auth list в кли. Вы должны увидеть добавленные новые разрешения.
  11. Попробуйте еще раз экспорт.

Если что-то пойдет не так, удалите отредактированный файл болта, восстановите резервную копию и повторите попытку.

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

Редактировать:
Похоже, моя хакерская идея работает.

Отредактируйте файл infxd.bolt с помощью болтбраузер:

  • Открытые авторизации v1 bucket
  • Найдите токен пользователя резервного копирования (значение в формате json)
  • Добавьте следующие два объекта в массив разрешений:
 {
    "action": "read",
    "resource": {
      "type": "dbrp"
    }
  }, {
    "action": "write",
    "resource": {
      "type": "dbrp"
   }
 }