ไม่สามารถเล่นวิดีโอนี้
ขออภัยในความไม่สะดวก
Как работать с Prometheus в Go на примере рекламного сервера - VyacheArt
ฝัง
- เผยแพร่เมื่อ 5 ส.ค. 2024
- Что делать, если вы разработали микросервис на Go, нагрузили его, и обнаружили, что работает он очень медленно? Где искать причину? Как оптимизировать? На эти вопросы вам могут помочь найти ответы метрики!
В этом ролике мы возьмём за основу рекламный сервер на GoLang и покроем его метриками. А поможет нам в этом система мониторинга Prometheus.
Prometheus - система мониторинга с активным сбором данных.
Весь код в репозитории github.com/VyacheArt/simple-a...
--
VyacheArt в Telegram t.me/VyacheArt
#ityoutubersru #ityoutubers
0:00 Введение
01:08 Теория
02:06 Почему Prometheus?
03:05 Задача
03:52 Поднимаем Prometheus
06:08 Код
16:33 Визуализация
20:02 Заключение
Привет, большое спасибо за качественный контент!
Про графану было бы тоже интересно посмотреть
Привет, спасибо большое за отзыв! Про графану замётано, расскажу!
Очень крутое и интересное видео, спасибо! С нетерпением жду про графану)
Спасибо большущее! Про графану сделаю!
Спасибо за видео. Коммент в поддержку! Сделайте еще продолжение c Графаной!!!
Спасибо!! Уже делаю! 🙃
Спасибо большое, очень понятно + приятный голос и оформление
Спасибо за контент! Очень интересные и качественные видео! Конечно же ждём видос про графану)!
Спасииибо! И очень рад, что нравятся видео. Про графану будет!
Спасибо! Превосходный контент и шикарные знания. Однозначно лайк и подписка.
Спасибо!
Эластик не про метрики, эластик про логи. Собственно, три столпа observability: метрики, логи, профайлинг.
Видео с подачей очень хорошее, спасибо!
Спасибо большое!
И отдельное спасибо за уточнение, но, если не ошибаюсь, не совсем так: elasticsearch да, про хранение, обработку и аналитику логов. Но есть Elastic APM, который строится на базе агента-коллектора, кибаны и elasticsearch, и он вполне себе про метрики производительности. Но да, я в видео не уточнил про конкретно APM
Спасибо огромное! Очень круто, интересно и качественно!
Большущее спасибо за такие тёплые слова!
Спасибо за видео! Интересно было бы посмотреть про SD, в частности про консул
Спасиибо! Я пока не силён в SD, но вероятно скоро поднаберусь ещё практического опыта и попробую рассказать!
Супер! Спасибо за ваш труд. Жду уроки по графане
Спасииибо! Уже готовлю!
Спасибо за видео, с нетерпением жду видео о Графане
Спасибо большущее! Видео с графаной уже даже в работе:)
Спасибо за видео! Хотел бы увидеть визуализацию в grafana)
Спасибо большое за коммент! Визуализацию в графане покажу, замётано!
Лайк за светлую тему IDE
Хехе, не ожидал, что кто-то оценит)) Спасииибо!
да мы юзаем так же бакеты и каунты но не саммори) видео все актуальней становятся)
стоит сделать про графану и обязательно про дата сорс , а то как выяснилось не все девопсы в курсе как можно крутить вертеть там данными)
> а то как выяснилось не все девопсы в курсе как можно крутить вертеть там данными)
О да, мне дико заходит, что в графане можно выводить данные из того же кликхауса. И более того ставить на эти данные метрики! Обязательно расскажу об этом в ролике про графану, готовлю его как раз.
Спасибо большущее за коммент и оценку!
спасибо, очень полезно) про графану было бы классно рассказать
Спасибоо! Рад, что оказалось полезным, а про графану уже готовлю!
❤
Привет. У меня бомбардир выдает среди прочего и значения Errors Timout. Я так понимаю это какие-то потери? Подскажи пожалуйста что это и как с этим бороться?
Не ну Grafana стопудов нужна, чтоб понять как это всё красиво сделать)
p.s. монтаж шикарен (разве что в паре мест графики были перекрыты, но это несущественно), тема интересна 👍
p.p.s. между pull и push сбором метрик есть какая-то принципиальная разница или тот или иной вариант выбирают только из-за выбора конкретной тулзы?
По поводу графаны замётано, сделаю! Спасибо большое за отзыв и монтаже и теме:))
По поводу pull и push - тут тема большая, но попробую ответить. Изначально это зависит от ваших возможностей: если ваш сервис доступен снаружи, и к нему может достучаться сервер метрик, то он может работать по Pull модели. Но может быть обратная ситуация: сервис находится за NAT, и тогда возможно использовать только Push модель. Также у вас может быть короткоживущий сервис, который запускается, что-то делает, и завершается. Тогда Pull модель тоже не подойдёт, потому что большую часть времени сервис будет недоступен.
В Pull модели очень удобно то, что Вы можете настраивать сбор централизованно и в одном месте. Но когда серверов много, и они часто меняются, то каждый раз править конфиг неудобно, и было бы удобнее на стороне приложения пушить метрики.
На практике вот какие наблюдения: мы (где я работаю) очень давно используем прометеус и классическую Pull модель. Но был период, когда у нас происходил рост в несколько десятков серверов в неделю, и приходилось часто лезть в конфиг и релоадить сервер (хотя и есть всякие ансиблы). И это в целом ок, но это отдельный процесс, который отнимает время. В такой ситуации я бы предпочёл уже Push модель, когда мне вполне ок переложить на приложение ответственность за отправку метрик.
При этом мы работаем с аутсорс девопсами, которые поддерживают инфраструктуру многих компаний, и они предпочитают использовать Push модель, потому что во-первых не угадаешь есть ли у сервера вообще публичный IP адрес, а во-вторых так проще добавлять и убирать с мониторинга.
Я сейчас придерживаюсь такого принципа: по умолчанию использую Pull модель, потому что удобна централизованная настройка, а для короткоживущих сервисов Push. При этом даже необязательно менять тулзу: в prometheus можно использовать push модель через "push-gateway". Поэтому тут выбор исключительно исходя из Ваших возможностей и требований
@@VyacheArt спасибо за такой развёрнутый ответ, стало куда понятней) это реально тема для отдельного видео! Было бы круто, после графаны, увидеть и небольшое видео про выбор между pull и push и реализацию 'push модель через "push-gateway"' - был бы довольно исчерпывающий плейлист 💪
подскажи актуальный форк bombardier, а то в главном проекте go1.15 и даже на 1.17 не ставится?
Я использую как раз github.com/codesenberg/bombardier
У него в go.mod 1.15, но это говорит о версии, на котором он разрабатывался. У гошки же обратная совместимость, поэтому на старших 1.* должно всё работать:
➜ ~ bombardier --version
bombardier version unspecified darwin/arm64
➜ ~ go version
go version go1.19.5 darwin/arm64
А какая ошибка возникает?
Спасибо, давай с grafana)
Спасибо! Уже работаю над ним!
Гоу урок про графану!
Уже в процессе, спасиибо!
Спасибо за урок! Пожалуйста, можно поподробнее про необходимость мультиплексора? Не очень понятна фраза "Вы можете получить на неожиданном порту свои метрики". Как такое возможно, если мы явно его прописываем?
Пожалуйста! И спасибо за коммент!!
Это я говорил про два варианта:
1. С мультиплексором, как в видео
2. С использованием `http.Handle` и `http.ListenAndServe(address, nil)`, то есть без мультиплексора
Вот во втором случае будет использоваться мультиплексор по умолчанию, который `http.DefaultServeMux`. Если в каком-то другом месте кода тоже будет `http.ListenAndServe(address2, nil)`, то оба слушателя будут идти к единственному DefaultServeMux, и на другом порту тоже будут доступны метрики.
Вот чтобы таких неожиданностей не случалось, лучше использовать явный мультиплексор. В частности в метриках.
@@VyacheArt Правильно понимаю, что если сначала инициализировать server := &http.Server{Addr: addr}, и уже у сервера использовать server.ListenAndServe(), то проблемы с глобальным мультеплексором не будет, и это тоже можно считать вариантом использования для метрик?
@@unlite2896 только сейчас заметил, что не ответил на комментарий из-за не пришедшего уведомления ютуба(
Это немного разные вещи. Мультиплексор - это по сути роутер, который матчит пришедший адрес и его обработчик (если такой есть). А http.Server - это сервер, задача которого слушать TCP порт и понимать HTTP протокол.
Если Вы явно прокинете в созданный http.Server отдельный Handler (то есть &http.Server{Addr: addr, Handler: mux}), то проблемы не будет, но это будет аналогично тому что Вы вызовете http.ListenAndServe(address, mux), потому что внутри он просто создаёт &Server{Addr: address, Handler: mux}.
А если вы сделаете просто &http.Server{Addr: addr}, то Handler будет также nil, и сработает вот это условие с использованием дефолтного мультиплексора github.com/golang/go/blob/0853f8caec60f59df234c287be7f5971ab62133f/src/net/http/server.go#L2927
нужен ролик про графану)
Будет, спасибо за фидбек!
есть видео по графане?
Есть, воть th-cam.com/video/1RpbstvgnVE/w-d-xo.html
Как сделать такую же офигенную консольку?
Ееее, всегда мечтал чтоб кто-то заметил:)) Это оболочка oh my zsh, плагин zsh-autosuggestions, и настроенная под себя тема Powerlevel10k
Го Графану
Будет!
еще идея для видел, эврона входило видео про чистую архитектуру, мне многое показалось спорным
было бы интересно увидеть твое мнение по архитектуре приложения на гошке
th-cam.com/video/V6lQG6d5LgU/w-d-xo.html
Спасибо за идею! Попробую подумать в эту сторону