Метрики рантайма: что экспортировать из runtime/metrics и на что смотреть
У Go два источника метрик о себе. Старый — runtime.ReadMemStats: он останавливает мир на время сбора, поэтому в горячем мониторинге неуместен. Новый — пакет runtime/metrics, появившийся в 1.16: он дешевле, отдаёт значения по именам вроде /gc/pauses:seconds, поддерживает гистограммы и не требует остановки. Практически же метрики почти никогда не собирают руками: клиентская библиотека Prometheus делает это сама через свой сборщик, и достаточно его зарегистрировать. Смотреть стоит на пять вещей, и все они про приближение к проблеме, а не про её факт. Число горутин — монотонный рост означает утечку. Доля процессорного времени на сборку — рост показывает давление на сборщик. Размер живой кучи против GOMEMLIMIT — приближение к пределу. Перцентиль пауз — редко бывает проблемой, но пусть будет. И число потоков ОС — рост говорит о блокирующих системных вызовах или CGO.