У меня есть несколько контейнеров, работающих в Kubernetes в облаке, они делают запросы на локальных серверах баз данных, мне интересно посмотреть, как задержки от баз данных влияют на приложение. Как мне это отслеживать/регистрировать?
решение1
Предполагая, что я просто хочу построить график времени отклика SGBD, я мог бы настроить некий Pod, который будет запрашивать мою базу данных в цикле и выводить какой-то результат на свой stdout, ... что-то вроде time mysql <cmd-args>
. Затем я бы использовал библиотеку Prometheus, предоставляющую эти метрики (или munin, collectd, ... что угодно, что подходит вашей экосистеме).
Если предположить, что меня интересуют внутренние метрики SQL, я мог бы развернуть какой-нибудь экспортер mysql на Kubernetes, запрашивая удаленный SGBD. Хотя я сомневаюсь, что у вас будет много данных относительно задержки соединения.
Если предположить, что меня не очень интересует сам MySQL, а скорее задержка между сайтами, я мог бы использовать что-то вроде smokeping, графическое отображение времени отклика. Лучше: какая-то проверка TCP, не обязательно запрашивающая MySQL, а измеряющая, сколько времени вам потребуется для установления TCP-рукопожатия.
Хотя идеальным вариантом было бы, чтобы ваше приложение измеряло эти времена. Медленные ответы могут быть вызваны расстоянием, а также аппаратными сбоями или программными неполадками. Может иметь смысл отслеживать как время запроса, так и запрашиваемые данные, поскольку вы можете точно определить запросы, которые можно оптимизировать, ...
О, и, очевидно, Istio, Service Meshes, .... как правило, поставляются с множеством инструментов, которые помогут вам отслеживать время выполнения, потоки данных, ...