authzmetrics

package
v1.4.0 Latest Latest
Warning

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

Go to latest
Published: Sep 10, 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