Общая концепция
Telescope позиционируется как веб‑инструмент для централизованного просмотра журналов приложений. Изначально система использовала ClickHouse в качестве единственного хранилища, но архитектура была задумана как модульная, позволяющая добавлять новые типы источников без изменения ядра. Это открывает возможность объединять логи из разных сред — облачных, контейнерных, локальных — в единой консоли, где сохраняются единые правила доступа и единый язык запросов.
Расширяемая модель источников
Модель источников в Telescope построена на абстракции «провайдер», который реализует набор интерфейсов для чтения, фильтрации и передачи данных. Каждый провайдер отвечает за подключение к конкретной системе, преобразование формата записей в общий внутренний вид и передачу их в движок запросов. Такая архитектура позволяет внедрять новые провайдеры без риска нарушения совместимости с уже существующими компонентами.
В предыдущих релизах уже была реализована поддержка Docker‑контейнеров, что дало возможность собирать логи из локальных окружений без необходимости развёртывать отдельную систему агрегации. Этот шаг продемонстрировал гибкость подхода и подтолкнул к дальнейшему развитию.
Интеграция с Kubernetes
Версия 0.0.24 привнесла в Telescope полноценный провайдер для Kubernetes. Теперь система способна напрямую обращаться к API кластера и считывать журналы pod‑ов в реальном времени. Ключевые особенности реализации:
- Подключение через kubeconfig – провайдер использует стандартный файл конфигурации, поддерживая любые механизмы аутентификации (certificate, token, OIDC). Это упрощает развертывание в разных окружениях: от локального minikube до продакшн‑кластеров в облаке.
- Потоковое чтение – вместо периодической выборки журналов Telescope открывает поток
watchна выбранных pod‑ах, получая новые записи по мере их появления. Это обеспечивает минимальную задержку и экономит трафик. - Кеширование метаданных – для ускорения фильтрации кэшируются сведения о namespace, labels и annotations pod‑ов. При изменении конфигурации кластера кеш автоматически обновляется.
- Поддержка мульти‑тенантности – каждый пользователь видит только те pod‑ы, к которым у него есть права согласно RBAC‑политике кластера. Это достигается через проверку токенов и сопоставление ролей в Kubernetes.
Управление доступом и язык фильтрации
Тот же механизм прав доступа, который использовался для ClickHouse, применяется и к Kubernetes‑источнику. Пользователи аутентифицируются в Telescope через SSO или LDAP, после чего их роли сопоставляются с политиками Kubernetes. Это гарантирует, что даже при наличии доступа к веб‑интерфейсу пользователь не сможет запросить логи из pod‑ов, находящихся за пределами его зоны ответственности.
Язык запросов остаётся единым: Telescope использует собственный DSL, поддерживающий условия по полям timestamp, level, message и пользовательским метаданным. Для Kubernetes‑логов в DSL автоматически добавляются виртуальные поля:
k8s.namespace– пространство имён pod‑а;k8s.pod_name– имя pod‑а;k8s.container– имя контейнера внутри pod‑а;k8s.labels.<key>– значения меток.
Пример запроса, возвращающего ошибки уровня ERROR из всех pod‑ов в namespace production, где метка app=payment:
k8s.namespace = "production" AND k8s.labels.app = "payment" AND level = "ERROR"
Практические сценарии использования
- Отладка микросервисов в продакшн – разработчики могут быстро переключаться между логами разных сервисов, не выходя из браузера, и видеть взаимосвязанные события в едином временном окне.
- Аудит безопасности – благодаря интеграции с RBAC, специалисты по безопасности могут просматривать только те журналы, которые им разрешено, и формировать отчёты по подозрительным запросам.
- Мониторинг CI/CD – при запуске пайплайнов в Kubernetes‑кластерных job‑ах Telescope автоматически захватывает их вывод, позволяя сравнивать результаты разных сборок.
- Локальная разработка – используя Minikube или Kind, разработчики могут воспроизводить продакшн‑поведение и сразу видеть логи в Telescope без необходимости настроек внешних агентов.
Быстрый старт
Для включения Kubernetes‑источника достаточно выполнить несколько шагов:
- Установить Telescope – последняя сборка доступна в виде Docker‑образа. Запуск производится командой
docker run -p 8080:8080 telescope/telescope:0.0.24. - Сконфигурировать провайдер – в файле
config.yamlдобавить блок:
sources:
kubernetes:
enabled: true
kubeconfig: "/path/to/kubeconfig"
namespaces: ["default", "production"]
- Настроить права доступа – в административной панели создать роли, сопоставив их с группами Kubernetes. При этом можно использовать автоматический импорт ролей из
ClusterRoleBinding. - Перезапустить сервис – после изменения конфигурации Telescope перечитывает настройки и открывает соединения с API кластера.
После перезагрузки веб‑интерфейс отобразит новый раздел «Kubernetes», где доступны списки pod‑ов, фильтры по меткам и возможность построения запросов в реальном времени.
Интеграция с Kubernetes расширяет возможности Telescope, превращая его в универсальное решение для наблюдения за распределёнными системами. Единый интерфейс, согласованные политики доступа и гибкий язык запросов позволяют сократить время на поиск проблем и повысить эффективность работы команд DevOps и разработчиков.