Сбор логов
Типы логов
Application Logs — логи работы приложения.
Это технические логи от каждого микросервиса (ui, data_api, us и так далее), которые пишутся в stdout/stderr каждого Kubernetes-пода. Они содержат информацию о запусках, внутренних операциях, ошибках и стектрейсы. Нужны для отладки и поиска причин сбоев в работе DataLens.
Usage Tracking — логи использования.
Это структурированные события о действиях пользователей: открытие дашборда, выполнение запроса, время ответа. Их собирает сервис fluent-bit и отправляет в базу данных ClickHouse®. Они нужны для анализа популярности дашбордов, поиска тяжелых запросов и аудита.
Инструменты для сбора логов
Скрипт ./init.sh предоставляет несколько инструментов для работы с логами.
Сбор логов со всех подов
Это основная команда. Используйте ее, когда нужна общая картина происходящего.
./init.sh --stern . -o extjson > datalens.enterprise.log
# --stern .: Агрегирует логи со всех подов в пространстве имен DataLens
# -o extjson: Вывод в структурированном JSON, который удобно парсить. Для чтения глазами можно использовать raw
# > datalens.enterprise.log: Перенаправление вывода в файл для дальнейшего анализа или отправки в поддержку
Сбор логов с одного пода
Если вы знаете, с каким сервисом возникла проблема (например, auth), можно смотреть только его логи.
./init.sh --stern --tail 100 --no-follow pod/<имя_пода>
Имя пода всегда уникальное, поэтому его нужно смотреть предварительно. Для этого используйте команду:
./init.sh --kubectl get pods
Сбор событий кластера
Иногда проблемы возникают на уровне Kubernetes: под не может запуститься, скачать образ или получить ресурсы. В этом случае нужно смотреть не логи приложения, а события кластера.
./init.sh --kubectl get events
Эта команда покажет проблемы ImagePullBackoff (не удалось скачать Docker-образ), CrashLoopBackoff (под падает и перезапускается) или нехватку ресурсов.
Продвинутые инструменты отладки
Терминальный интерфейс k9s
Для интерактивного мониторинга и управления кластером в дистрибутив встроена утилита k9s.
./init.sh --k9s
Эта команда запускает текстовый интерфейс прямо в терминале. В нем можно в реальном времени отслеживать состояние подов, просматривать логи, контролировать потребление ресурсов, переключаться между пространствами имен и работать с другими параметрами.
Сбор полного отчета для техподдержки
Доступна единая команда, которая автоматически собирает всю диагностическую информацию в один архив.
./init.sh --get-debug-info
Она соберет логи, конфигурацию Helm-релиза, события кластера и другую служебную информацию.
Совет
Именно результат выполнения этой команды в первую очередь попросит у вас техническая поддержка при обращении.
Настройка Usage Tracking
Как включить мониторинг пользовательских действий
-
Включить функцию. В
values.yamlустановитеfeatures.usage_tracking.enabled: trueиinfra.fluebt-bit.enabled = true. -
Создать подключение. В интерфейсе DataLens выберите любой воркбук или создайте новый. Внутри него создайте подключение к ClickHouse®. Данные для подключения можно найти в
Readme.mdв разделе Конфигурация ClickHouse®.clickhouse: CLICKHOUSE_HOST: clickhouse-cip CLICKHOUSE_PORT: '8123' CLICKHOUSE_USER: ch-user CLICKHOUSE_DB_USAGE_TRACKING: ch-usage-tracking-db CLICKHOUSE_TABLE_USAGE_TRACKING: ch-usage-tracking-tableЧтобы получить пароль, обратитесь к секрету через
./init.sh --kubectl get secret datalens-enterprise-secrets --template "{{.data.CLICKHOUSE_PASSWORD}}" | base64 -d. -
Создать датасет. На основе подключения можно создать датасет, чарты и дашборды для аналитики пользовательских действий.
Как использовать Usage Tracking с внешней базой данных ClickHouse®
Для использования Usage Tracking с внешней базой данных ClickHouse® создайте таблицу в целевом кластере при помощи запроса:
CREATE TABLE $CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_TABLE_USAGE_TRACKING
ON CLUSTER '{cluster}' (
event_time DateTime64(9),
event_date Date,
source_entry_id String,
dash_id Nullable(String),
dash_tab_id Nullable(String),
chart_id Nullable(String),
chart_kind Nullable(String),
response_status_code Nullable(UInt64),
dataset_id Nullable(String),
user_id Nullable(String),
request_id Nullable(String),
query Nullable(String),
source Nullable(String),
connection_id Nullable(String),
dataset_mode Nullable(String),
username Nullable(String),
execution_time Int64,
status Nullable(String),
error Nullable(String),
connection_type Nullable(String),
host Nullable(String),
cluster Nullable(String),
clique_alias Nullable(String),
cache_used UInt8,
cache_full_hit UInt8,
endpoint_code Nullable(String),
query_type Nullable(String),
err_code Nullable(String),
workbook_id Nullable(String)
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/$CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_TABLE_USAGE_TRACKING', '{replica}')
PARTITION BY toYYYYMM(event_date)
ORDER BY (toStartOfHour(event_time), connection_id, dash_id, dataset_id, chart_id, user_id, event_time)
TTL event_date + toIntervalMonth(6)
SETTINGS index_granularity = 8192, allow_nullable_key = 1;
В этом запросе $CLICKHOUSE_DB_USAGE_TRACKING и $CLICKHOUSE_TABLE_USAGE_TRACKING — имя базы данных и имя таблицы ClickHouse® в вашем кластере.
Данные Usage Tracking содержат только ID объектов DataLens, а не их экранные имена. Для работы с экранными именами необходимо донастроить ClickHouse®.
Как получить экранные имена объектов для аналитики
Создать в кластере ClickHouse® таблицу и словарь:
CREATE TABLE $CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_TABLE_US_ENTRIES ON CLUSTER '{cluster}'
(
encoded_entry_id String,
display_key String,
updated_at DateTime
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/$CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_TABLE_US_ENTRIES', '{replica}')
ORDER BY encoded_entry_id
SETTINGS index_granularity = 8192;
CREATE DICTIONARY $CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_DICT_US_ENTRIES ON CLUSTER '{cluster}'
ON CLUSTER '{cluster}' (
entry_id String,
title String
)
PRIMARY KEY entry_id
SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 user $CH_RO_USER password '$CH_RO_PASSWORD' DB $CH_DATABASE TABLE $CH_TABLE))
LAYOUT(complex_key_hashed())
LIFETIME(10800);
В этом коде:
$CLICKHOUSE_DB_USAGE_TRACKING— имя базы данных в ClickHouse®, в которую DataLens будет поставлять данные Usage Tracking;$CLICKHOUSE_TABLE_USAGE_TRACKING— имя таблицы в ClickHouse®, в которую будут поставляться данные об активности пользователей;$CLICKHOUSE_TABLE_US_ENTRIES— имя таблицы в ClickHouse®, с которой будут синхронизироваться экранные имена объектов DataLens;$CLICKHOUSE_DICT_US_ENTRIES— имя словаря на основе таблицы с именами объектов в ClickHouse®, который может использоваться для эффективного доступа к ним в запросах.
Рекомендуемые имена для новых объектов:
CLICKHOUSE_TABLE_US_ENTRIES: us_entries
CLICKHOUSE_DICT_US_ENTRIES: us_entries_dict
При построении запросов к статистике с использованием экранных имен используйте словарь, а не таблицу напрямую. Например, следующий запрос выведет список из 10 самых популярных датасетов по количеству уникальных пользователей:
SELECT
uniqExact(user_id) AS user_count,
dictGetStringOrDefault('$CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_DICT_US_ENTRIES', 'title', dataset_id, '__unknown__') AS dataset_title
FROM $CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_TABLE_USAGE_TRACKING
WHERE dataset_id IS NOT NULL
GROUP BY dataset_title
ORDER BY user_count DESC
LIMIT 10;
При работе с данными Usage Tracking через DataLens без использования SQL для получения экранного имени объекта по его ID воспользуйтесь функцией DB_CALL_STRING, например:
DB_CALL_STRING("dictGetStringOrDefault", "$CLICKHOUSE_DB_USAGE_TRACKING.$CLICKHOUSE_DICT_US_ENTRIES", "title", [dataset_id], "__unknown__")
Инструменты для мониторинга и отладки
Отладка c Freelens
Freelens — это графический клиент для Kubernetes. Он позволяет:
- смотреть статус подов;
- просматривать логи каждого пода в реальном времени;
- проверять потребление CPU и RAM;
- подключаться к командной строке пода для выполнения диагностических команд.
Интерфейс Freelens:

Отладка c k9s
Это встроенный аналог Freelens прямо в терминале. В отличие от Freelens, k9s доступен без дополнительных установок и настроек.
Запускается так:
./init.sh --k9s
Выглядит так:

Кейс
Пользователи жалуются, что интерфейс DataLens не загружается. Вы видите, что под datalens-enterprise-ui-... находится в состоянии ImagePullBackoff. В каком источнике вы будете искать проблему в первую очередь?
- В логах пода
datalens-enterprise-uiс помощьюstern. - В событиях кластера с помощью
./init.sh --kubectl get events. - В логах Usage Tracking в ClickHouse®.
- В интерфейсе
k9s.
Узнать ответ
-
В логи пода
datalens-enterprise-uiс помощьюstern.Неверно. Логи приложения еще не генерируются, так как контейнер даже не может запуститься.
-
В событиях кластера с помощью
./init.sh --kubectl get events.Верно. Именно в событиях кластера будет детальная информация об ошибке
ImagePullBackoff, например: «неверный адрес registry» или «ошибка аутентификации в registry». -
В логах Usage Tracking в ClickHouse®.
Неверно. Usage Tracking фиксирует действия в уже работающем приложении, а в кейсе приложение не может стартовать.
-
В интерфейс
k9s.Неверно. В
k9sвы увидите статусImagePullBackoff, но детали ошибки все равно нужно смотреть в описании пода или вevents. Так что просмотр событий — более прямой путь.
Итоги
Теперь в вашем арсенале есть полный набор инструментов для диагностики DataLens: от просмотра общих логов до анализа конкретных событий в кластере. Вы знаете, как быстро собрать информацию для техподдержки и как использовать интерактивные утилиты для мониторинга.