# Метрики

> Метрики для мониторинга и отладки в реальном времени

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

Для публикации метрик etcd использует [Prometheus][prometheus]. Метрики можно применять для мониторинга и отладки в реальном времени. etcd не сохраняет метрики: при перезапуске участника они сбрасываются.

Проще всего просмотреть доступные метрики, запросив конечную точку `/metrics` с помощью cURL. Формат описан [в документации Prometheus](http://prometheus.io/docs/instrumenting/exposition_formats/).

Чтобы запустить сервер Prometheus для сбора метрик etcd, следуйте [руководству Prometheus по началу работы][prometheus-getting-started].

Имена метрик соответствуют рекомендуемым [практикам Prometheus][prometheus-naming]. Имя метрики содержит префикс пространства имён `etcd` или `etcd_debugging` и префикс подсистемы (например, `wal` и `etcdserver`).

## Метрики пространства имён etcd {#etcd-namespace-metrics}

Метрики с префиксом `etcd` предназначены для мониторинга и оповещений. Это стабильные высокоуровневые метрики. Любое их изменение указывается в примечаниях к выпуску.

Метрики, относящиеся к etcd2, описаны в [руководстве по метрикам v2][v2-http-metrics].

### Сервер {#server}

Эти метрики описывают состояние сервера etcd. Чтобы выявлять сбои и проблемы при устранении неполадок, следует внимательно отслеживать серверные метрики каждого рабочего кластера etcd.

Все эти метрики имеют префикс `etcd_server_`

| Имя                       | Описание                                                   | Тип     |
|---------------------------|------------------------------------------------------------|---------|
| has_leader                | Существует ли лидер. 1 — существует, 0 — отсутствует.      | Gauge   |
| leader_changes_seen_total | Количество обнаруженных смен лидера.                       | Counter |
| proposals_committed_total | Общее количество зафиксированных предложений консенсуса.   | Gauge   |
| proposals_applied_total   | Общее количество применённых предложений консенсуса.       | Gauge   |
| proposals_pending         | Текущее количество ожидающих предложений.                  | Gauge   |
| proposals_failed_total    | Общее количество обнаруженных неудачных предложений.       | Counter |

`has_leader` показывает, есть ли у участника лидер. Если у участника нет лидера, он полностью недоступен. Если лидера нет ни у одного участника кластера, весь кластер полностью недоступен.

`leader_changes_seen_total` подсчитывает количество смен лидера, замеченных участником с момента запуска. Частая смена лидера существенно снижает производительность etcd. Она также указывает на нестабильность лидера, возможно из-за проблем с сетевым соединением или чрезмерной нагрузки на кластер etcd.

`proposals_committed_total` регистрирует общее количество зафиксированных предложений консенсуса. В исправном кластере этот индикатор должен со временем расти. Несколько исправных участников кластера etcd могут одновременно иметь разные общие количества зафиксированных предложений. Расхождение может быть связано с восстановлением по данным одноранговых узлов после запуска, отставанием от лидера или с тем, что участник сам является лидером и потому имеет больше всего фиксаций. Важно отслеживать эту метрику для всех участников кластера: устойчиво большое отставание одного участника от его лидера означает, что этот участник работает медленно или неисправен.

`proposals_applied_total` регистрирует общее количество применённых предложений консенсуса. Сервер etcd применяет каждое зафиксированное предложение асинхронно. Разница между `proposals_committed_total` и `proposals_applied_total` обычно должна быть небольшой (не более нескольких тысяч даже при высокой нагрузке). Если она продолжает расти, сервер etcd перегружен. Такое возможно при выполнении дорогостоящих запросов, например тяжёлых диапазонных запросов или крупных операций txn.

`proposals_pending` показывает количество предложений в очереди на фиксацию. Рост числа ожидающих предложений указывает на высокую клиентскую нагрузку либо на неспособность участника фиксировать предложения.

`proposals_failed_total` обычно связано с двумя проблемами: временными сбоями во время выборов лидера или более длительным простоем из-за потери кворума в кластере.

### Диск {#disk}

Эти метрики описывают состояние дисковых операций.

Все эти метрики имеют префикс `etcd_disk_`.

| Имя                                | Описание                                                | Тип       |
|------------------------------------|---------------------------------------------------------|-----------|
| wal_fsync_duration_seconds         | Распределение задержки вызова fsync подсистемой wal      | Histogram |
| backend_commit_duration_seconds    | Распределение задержки вызова commit бэкендом.           | Histogram |

`wal_fsync` вызывается, когда etcd сохраняет записи журнала на диск перед их применением.

`backend_commit` вызывается, когда etcd фиксирует на диске инкрементный снимок последних изменений.

Высокая задержка дисковых операций (`wal_fsync_duration_seconds` или `backend_commit_duration_seconds`) часто указывает на проблемы с диском. Она может привести к высокой задержке запросов или сделать кластер нестабильным.

### Сеть {#network}

Эти метрики описывают состояние сети.

Все эти метрики имеют префикс `etcd_network_`

| Имя                             | Описание                                                                  | Тип           |
|---------------------------------|---------------------------------------------------------------------------|---------------|
| peer_sent_bytes_total           | Общее количество байтов, отправленных одноранговому узлу с ID `To`.        | Counter(To)   |
| peer_received_bytes_total       | Общее количество байтов, полученных от однорангового узла с ID `From`.     | Counter(From) |
| peer_sent_failures_total        | Общее количество сбоев отправки одноранговому узлу с ID `To`.              | Counter(To)   |
| peer_received_failures_total    | Общее количество сбоев получения от однорангового узла с ID `From`.        | Counter(From) |
| peer_round_trip_time_seconds    | Гистограмма времени прохождения туда и обратно между одноранговыми узлами. | Histogram(To) |
| client_grpc_sent_bytes_total    | Общее количество байтов, отправленных клиентам grpc.                       | Counter       |
| client_grpc_received_bytes_total| Общее количество байтов, полученных от клиентов grpc.                      | Counter       |

`peer_sent_bytes_total` подсчитывает общее количество байтов, отправленных определённому одноранговому узлу. Обычно участник-лидер отправляет больше данных, чем остальные участники, поскольку отвечает за передачу реплицированных данных.

`peer_received_bytes_total` подсчитывает общее количество байтов, полученных от определённого однорангового узла. Обычно участники-последователи получают данные только от участника-лидера.

### Запросы gRPC {#grpc-requests}

Эти метрики предоставляются через [go-grpc-prometheus][go-grpc-prometheus].

## Метрики пространства имён etcd_debugging {#etcd_debugging-namespace-metrics}

Метрики с префиксом `etcd_debugging` предназначены для отладки. Они сильно зависят от реализации и нестабильны. В новых выпусках etcd они могут изменяться или удаляться без предупреждения. По мере стабилизации некоторые метрики могут быть перенесены под префикс `etcd`.

### Снимок {#snapshot}

| Имя                                       | Описание                                                     | Тип       |
|-------------------------------------------|--------------------------------------------------------------|-----------|
| snapshot_save_total_duration_seconds      | Общее распределение задержки вызова сохранения снимком        | Histogram |

Аномально большая длительность создания снимка (`snapshot_save_total_duration_seconds`) указывает на проблемы с диском и может сделать кластер нестабильным.

## Метрики, предоставляемые Prometheus {#prometheus-supplied-metrics}

Клиентская библиотека Prometheus предоставляет ряд метрик в пространствах имён `go` и `process`. Некоторые из них особенно полезны.

| Имя                               | Описание                                      | Тип          |
|-----------------------------------|-----------------------------------------------|--------------|
| process_open_fds                  | Количество открытых файловых дескрипторов.    | Gauge        |
| process_max_fds                   | Максимальное количество файловых дескрипторов.| Gauge        |

> [!NOTE]
> Метрики процесса, такие как `process_open_fds` и `process_max_fds`, в настоящее время не поддерживаются в системах Darwin (macOS).

Интенсивное использование файловых дескрипторов (`process_open_fds`), то есть приближение к их лимиту для процесса (`process_max_fds`), указывает на возможное исчерпание файловых дескрипторов. При их исчерпании etcd может аварийно завершиться, поскольку не сможет создавать новые файлы WAL.

## Сгенерированный список метрик {#generated-list-of-metrics}

[go-grpc-prometheus]: https://github.com/grpc-ecosystem/go-grpc-prometheus
[prometheus]: https://prometheus.io/
[prometheus-getting-started]: https://prometheus.io/docs/introduction/getting_started/
[prometheus-naming]: https://prometheus.io/docs/practices/naming/
[v2-http-metrics]: https://etcd.io/docs/v2.3/metrics/#http-requests
