Help us shape the future of Go! Take the 2026 Go Developer Survey

authzmetrics

package
v1.16.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package authzmetrics — ЕДИНСТВЕННЫЙ коллектор величин кеша положительных вердиктов.

Почему одна реализация на всех

Кеш вердиктов в этом дереве один (`pkg/authz.Cache`), и строит его один носитель контура на все сервисы. Ровно та же причина держит единым и его наблюдение: шесть коллекторов с одинаковыми на вид именами серий — это шесть мест, где полосу можно забыть, переименовать или сложить не с той. Здесь имя семейства собирается из имени сервиса по одному правилу, а словари полос и причин вытеснения закрыты константами.

Имена ОДНОРОДНЫ краю, а не изобретены заново

Край уже выставляет `kacho_api_gateway_authz_cache_total{result="hit"|"miss"}` (`gateway/internal/observability/metrics`). Здесь то же семейство и та же метка исхода, только имя сервиса другое: собиратель, у которого уже есть правило на край, читает сервисы тем же выражением. Расходиться в написании значило бы завести второй контракт с панелями и правилами тревог.

Полоса — потому что кешей в процессе бывает больше одного

У registry их два: окно звена решения (вопрос на вызов) и окно прямого пообъектного опроса страницы. Сложить их в одну серию значило бы сделать невидимым тот из них, который не попадает, — а это ровно тот, ради которого величину и смотрят. Полоса объявляется ВЫЗЫВАЮЩИМ: процесс без второго кеша вторую полосу не объявляет и нулями её не рисует, иначе экспозиция утверждала бы существование окна, которого в этом процессе нет.

Доли попаданий здесь НЕТ

Доля, посчитанная в процессе за всё время жизни, на поверхности сбора бесполезна: её нельзя ни продифференцировать по времени, ни сложить по репликам. Потребитель считает её из попаданий и промахов сам, а второе место об одном предмете разъезжается молча.

Величины читаются ИЗ ПРОЦЕССА

Коллектор не делает ни одного внешнего вызова в момент сбора: он зовёт функцию, которую принёс композиционный корень, а та читает счётчики кеша. Диагностика, которая ходит наружу за своими числами, гаснет ровно тогда, когда нужна.

Index

Constants

View Source
const (
	// LaneRPC — окно звена решения о доступе: один вопрос на вызов, оба
	// слушателя.
	LaneRPC = "rpc"
	// LaneList — окно, которое держит САМ СЕРВИС перед сужателем на пути страницы.
	// Сегодня такое есть у registry (`handler.cachedAuthorizer`): страница
	// контрактно бывает до тысячи элементов, и каждый её элемент — отдельный
	// вопрос.
	LaneList = "list"
	// LaneNarrow — окно ВНУТРИ общего сужателя (`pkg/listnarrow`).
	//
	// Третья полоса, а не переиспользованная `LaneList`, и причина не
	// стилистическая: у registry эти два окна стоят ДРУГ ЗА ДРУГОМ на одном пути
	// (свой кеш впереди, окно сужателя позади него), поэтому под одной меткой они
	// сложились бы — а сложить их значит сделать невидимым то из них, которое не
	// попадает, ровно как сказано абзацем выше про два кеша процесса. Полоса
	// называет МЕХАНИЗМ, чьё окно она описывает, а не форму вопроса: форма у них
	// одна, а механизма два.
	LaneNarrow = "narrow"
)

Полосы окна вердиктов — ЗАКРЫТЫЙ словарь. Ни одно значение метки не берётся из данных запроса: число различных серий не растёт с числом обслуженных арендаторов (потолок кардинальности и запрет `security.md` §«Инфра-чувствительные данные» суть один запрет с двух сторон).

Variables

This section is empty.

Functions

func DecisionsMetricName

func DecisionsMetricName(service string) string

DecisionsMetricName — семейство решений звена. Имя однородно краю (`kacho_api_gateway_authz_check_decisions_total`).

func EntriesMetricName

func EntriesMetricName(service string) string

func EvictionsMetricName

func EvictionsMetricName(service string) string

func MetricName

func MetricName(service string) string

MetricName / EntriesMetricName / EvictionsMetricName / DecisionsMetricName — имена семейств для названного сервиса.

Отдельные функции, а не литералы по месту: имя серии — контракт с панелями и правилами тревог, и собирать его в шести местах значило бы завести шесть контрактов, которые разъедутся на первом же переименовании.

Types

type Collector

type Collector struct {
	// contains filtered or unexported fields
}

Collector — коллектор величин окон вердиктов одного процесса.

func New

func New(service string, lanes map[string]Reader, decisions DecisionReader) *Collector

New собирает коллектор для сервиса `service` (`vpc`, `compute`, `nlb`, `storage`, `registry`, `geo`) поверх читателей ОБЪЯВЛЕННЫХ полос.

Полоса с `nil`-читателем отвечает нулями: провязка наблюдаемости обязана быть nil-безопасной, иначе её заводят «потом». Полоса, которую вызывающий не назвал, не рисуется вовсе — см. разбор в шапке пакета.

func (*Collector) Collect

func (c *Collector) Collect(ch chan<- prometheus.Metric)

Collect отдаёт все объявленные серии, включая нулевые.

func (*Collector) Describe

func (c *Collector) Describe(ch chan<- *prometheus.Desc)

Describe объявляет ВСЕ семейства до первого сбора — серии присутствуют нулями с первой секунды жизни процесса, поэтому «попаданий не было» и «коллектора нет» различимы без единого запроса.

type DecisionReader

type DecisionReader func() authz.Metrics

DecisionReader — читатель величин ЗВЕНА решения. Одно на процесс: звено у сервиса ровно одно, и оба слушателя проходят через него.

type Reader

type Reader func() authz.CacheStats

Reader — читатель величин ОДНОГО окна вердиктов.

type Source

type Source struct {
	// contains filtered or unexported fields
}

Source — приёмник читателя величин, установимый ПОЗЖЕ регистрации.

Нужен потому, что порядок сборки обратен порядку наблюдения: композиционный корень регистрирует коллектор на диагностической поверхности ДО того, как носитель контура соберёт звено решения со своим кешем. Неустановленный источник отвечает нулями, а не исчезает: исчезновение серий на это окно сообщило бы собирателю не «попаданий не было», а ничего.

func (*Source) Cache

func (s *Source) Cache() authz.CacheStats

Cache — величины окна вердиктов этого звена, читатель полосы.

func (*Source) Install

func (s *Source) Install(read func() authz.Metrics)

Install ставит читателя. Идемпотентен по последнему вызову.

Тип параметра НЕ именованный намеренно: значение этого метода передаётся как `servicecontract.Spec.AuthzObserve`, а типы функций в Go тождественны только при тождественных параметрах — с `DecisionReader` в подписи присваивание потребовало бы обёртки в каждом из шести корней.

func (*Source) Read

func (s *Source) Read() authz.Metrics

Read отдаёт величины звена; до установки — нули.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL