Комментарии 4
Если есть возможность (а в go она есть) метрики лучше отдавать на отдельном порту. Иначе есть опасность случайно сделать их доступным в интернете, а потом придумывать как их закрыть.
Да, хорошая практика, согласен. Намеренно упустил как здесь так и в прошлой статье, потому что тут зависит от окружения — не всегда отдельный порт нужен. Можно закрыть балансировщиком. Но в целом да, вынести на отдельный порт — самый простой и безопасный вариант. Спасибо, что подсветил!
Пока писал ответ, понял что упомянуть все же стоило.
Есть ли возможность и какая-то методика подключения трейсов у любых готовых докеризированных приложений, где нельзя менять исходники и собирать что своё? Главное условие - образ Docker готовый, и работать с ним можно лишь в пределах заданных разработчиком условиях. Допустим, я включил Verbose-режим у контейнера, тот плюется в stdout или в лог-файл. Туда же попадут и трейсы при падении контейнера. Есть ли готовые к старту (почти) бесконфиговые штуки, которые отследят и grep'нут трейс?
Прямо сейчас я таким образом настроил отправку логов в Axiom и мой сервер PushGateway, но, мне кажется, для трейсов нужно что-то иное...
Область применения и ограничения: средний сервер 0.5 vCPU, 1 GB RAM, 15 GB ROM, 10+ контейнеров. Таких 20-40 штук. Пет-проекты и личная инфраструктура.
Хочу уточнить: метрики — это не логи, их нужно явно прописывать. Либо использовать библиотеки, которые оборачивают их как middleware, например, в случае с HTTP, как показано в статье выше.
Поэтому не совсем понятен кейс: если разработчики предусмотрели трейсы, почему нельзя просто сделать переменную окружения (ENV), с помощью которой можно указать, куда отправлять эти трейсы?
Ну то есть, смотрите, на примере Go. Есть библиотека stdouttrace. Она в основном используется для отладки и позволяет писать трейсы в stdout. Теоретически можно настроить Vector на их сбор и решить вашу задачу.
Но тогда возникает вопрос: почему разработчик/вендор/подрядчик не может просто заменить stdouttrace на gRPC и воткнуть ENV что бы URL коллектора можно была явно указывать? Ни какая сборка в этом случае не нужна.
Возможно ответил на ваш вопрос, если нет, то требуются явно более конкретные уточнения.
Как я создавал Observability для своих pet-проектов. Часть 2