Talking about rate() I’ve noticed that it needs at least 4 values to build an average and return something, otherwise it will return empty value.
So basing on how often you ship your metrics (AFAIR, default value is 15 seconds), you can narrow your rate window to catch peaks.
I think that in general, the idea is not to show the very short term few seconds peaks, but rather something more serious and impactful, which likely may last minutes…