Three instrument types, and each answers a different question.
A counter is monotonic — it only goes up, and it is reset only by a process restart. Its instantaneous value is meaningless; you read its rate.
rate(http_requests_total[5m])
A gauge is a point-in-time level that moves in both directions: active connections, queue depth, pool size, in-flight requests.
A histogram is a set of cumulative bucket counters plus _sum and _count. You observe values into it and query distributions out of it.
These three are the ones you should reach for. Prometheus also ships a summary, which computes its quantiles inside the process and exports them as finished numbers — and quantiles, unlike bucket counts, cannot be added, so a summary is unmergeable across a fleet. That is the whole subject of the next lesson, and the reason a histogram is the default.
Getting the type wrong is not a style mistake — a counter cannot tell you concurrency, and a gauge cannot tell you rate.
