И продолжаем баловаться с Loki.
Первая часть — тут>>>, вторая — тут>>>.
Очень пригодилась помощь разработчиков в Slack-комьюнити Grafana — там есть отдельный канал #loki.
Задача сейчас — настроить Loki для использования AWS S3 корзины как persistent storage для данных самих логов, и AWS DynamoDB — для хранения индексов.
При запуске Loki с конфигурацией по умолчанию — данные и индексы хранятся в каталоге /tmp/loki
контейнера:
А описываются настройки хранилища в блоке storage_config
:
Собственно всё, что нам надо — это создать S3 корзину, DynamoDB таблицу, и обновить конфиг Loki для их использования.
Содержание
AWS S3
Настройка и подключение S3 самые простые — начнём с них.
Создание корзины и пользователя описывать не буду, примеры есть.
Создаём корзину, и обновляем локальный файл настроек Loki на хосте loki.setevoy.org.ua — меняем секцию storage_config
:
... storage_config: boltdb: directory: /tmp/loki/index # filesystem: # directory: /tmp/loki/chunks aws: s3: s3://AKI***PHA:0/W***WFN@eu-west-1/logger-loki-poc limits_config: enforce_metric_name: false
Не думаю, что так заведётся — но ради интереса глянем:
Ну, окей.
Добавляем DynamoDB.
DynamoDB
В документации наконец-то появилось указание по типам полей, см. operations.md
.
Создаём таблицу, задаём поле с именем h типа String в качестве Primary key, и добавляем Sort key с именем r и типом Binary: (нет, не спрашивайте — почему такие имена полей…):
Обновляем конфигурацию Loki — приводим файл loki-conf.yml
к такому виду:
auth_enabled: false server: http_listen_port: 3100 ingester: lifecycler: address: 0.0.0.0 ring: store: inmemory replication_factor: 1 chunk_idle_period: 15m #schema_config: # configs: # - from: 0 # store: boltdb # object_store: filesystem # schema: v9 # index: # prefix: index_ # period: 168h schema_config: configs: - from: 0 store: aws object_store: aws schema: v9 index: prefix: loki_index period: 0 storage_config: # boltdb: # directory: /tmp/loki/index # filesystem: # directory: /tmp/loki/chunks aws: s3: s3://AKI***PHA:0/W***WFN@eu-west-1/logger-loki-poc dynamodbconfig: dynamodb: dynamodb://AKI***Y7A:lTH***zg4@eu-west-1 limits_config: enforce_metric_name: false
Примечание: кривой парсер SECRET_KEY
: вырезает символы 0/ и /, пришлось генерить новый ключ. Issue: https://github.com/grafana/loki/issues/310
Запускаем сервис:
Ждём минуту-две, и проверяем Grafana (Split — удобная опция):
Данные пошли.
Правда — корзина пустая… И индексов нет.
И где они?
Пусть поработает пока.
А ещё — сыплет ошибками вида:
loki_1 | level=error ts=2019-02-13T12:05:57.928786555Z caller=flush.go:118 org_id=fake msg=»failed to flush user» err=»NoCredentialProviders: no valid providers in chain. Deprecated.\n\tFor verbose messaging see aws.Config.CredentialsCha
inVerboseErrors»
Это ошибка решилась тем, что для S3 и DynamoDB использовал один и тот же набор ACCESS/SECRET ключ (для Dynamo генерировался отдельный из-за бага с 0/).
И данные в S3 и DynamoDB появились минут через 15:
S3:
Вроде пока ОК.
Будем потихоньку поднимать на Стейджинге, и смотреть за поведением.