Frontera multi-tenant
El invariante de seguridad principal: cada consulta PromQL pasa por `composeQuery` o `rewritePromQL`. Ambos inyectan organization_id como mandatory label matcher. No existe un raw-query path para el input de usuario.
composeQuery
Toma un bare metric name + filters → construye PromQL de la forma:
metric{organization_id="<org-id>", host="web-01"}Los mandatory filters siempre ganan. Los opcionales (de URL params) se añaden si no entran en conflicto.
rewritePromQL
Parsea el PromQL del usuario vía prometheus/promql/parser, recorre el AST vía parser.Inspect. En cada VectorSelector y MatrixSelector los LabelMatchers se reemplazan por un merged set donde organization_id gana.
Un usuario no puede «eludir» organization_id ni indicándolo explícitamente en la consulta — el rewrite lo sobrescribe.