Знание всех показателей, доступных на экземпляре Прометея, иногда может показаться невозможным, поэтому я хотел бы поделиться трюком, который я разработал, чтобы облегчить изучение этих показателей!
Одной из сильных сторон Прометея является его способность принимать много данных из широкого спектра источников данных из -за простоты его формата метрик. Однако, если вы работаете в организации с несколькими командами, управляющими Exporters Prometheus, вы можете почувствовать себя немного потерянным или перегруженным всеми доступными вам показателями, особенно если вы в инфраструктурной команде, которая использует более низкие уровни. Метрики для его правил оповещения. Эти виды метрик часто происходят от сторонних экспортеров, которые ваша команда не писала, поэтому вы можете не знать все доступные вам показатели.
Прометей делает Предложите списки метрик в диалоговом окне с автозаполнением, когда вы начнете печатать запрос, и вы можете выполнить что -то подобное, если используете Grafana. Однако этот рабочий процесс больше подходит для «известных неизвестных», а не «неизвестных неизвестных» — Это больше похоже на поиск библиотеки для книги с помощью каталога, в отличие от простого просмотра стеков.
Перечислите все показатели для данного экспортера
Допустим, вам нужен список всех метрик, экспортируемых Prometheus, когда он соскребает себя — проверка трюка выглядит так:
count({job="prometheus"}) by ( __name__ )
В зависимости от вашего опыта с Prometheus, вы можете или не могли видеть это __name__
метка раньше. __name__
это специальный лейбл в Prometheus — это название самой метрики. На самом деле foo {bar = "baz"}
действительно просто сахар для {, bar = "baz"}
!
Перечисление всех «пространств имен» для данного экспортера
Забегая это против моего собственного Прометея, я получаю 202 результата — вот небольшая выборка:
1 | Прометеус_tsdb_isolation_low_watermark {} |
1 | Прометеус_TSDB_LOWEST_TIMESTAMP_SECONDS {} |
1 | Прометеус |
1 | Прометеус_SD_FILE_READ_ERRORS_TOTAL {} |
1 | Прометеус_tsdb_compactions_total {} |
1 | go_memstats_gc_sys_bytes {} |
1 | Прометеус_tsdb_head_min_time {} |
1 | Прометеус |
1 | Прометэус |
9 | net_conntrack_dialer_conn_establed_total {} |
1 | Прометеус |
1 | Прометеус |
Здесь есть два важных вывода — во -первых, метрики не заказаны по имени, и на самом деле, порядок результатов может измениться между казнями. Из -за этого я часто буду запускать эти виды исследовательских запросов, используя PROMTOOL и поднять их к таким инструментам, как jq
или сортировка
Анкет
Вы также можете увидеть, что метрики следуют какой -то схеме размещения имен. Мы можем использовать label_replace Чтобы извлечь первый уровень «пространств имен»:
count(label_replace({job="prometheus"}, "metric_namespace", "$1", " __name__", "^([^_]+).*")) by(metric_namespace)
… что дает нам список, который выглядит так:
{metric_namespace = "prometheus"}
{metric_namespace = "promttp"}
{metric_namespace = "scrape"}
{metric_namespace = "up"}
{metric_namespace = "Go"}
{metric_namespace = "net"}
{metric_namespace = "process"}
Этот список может дать нам некоторые намеки на дополнительные фильтры, которые можно использовать для того, чтобы привлекать к нулю, что мы ищем — например, если я заинтересован в низкоуровневых показателях о том, как Прометеус общается с вещами по сети, я могу копаться в net
«Пространство имен», добавив __name__ = ~ "net_. *"
Моему векторному селектору! Поскольку эти «пространства имен» не задокументированы в самих метрик, вам часто нужно исследовать каждый из них и посмотреть, что вы найдете, чтобы выяснить, о чем каждый из них.
Перечислите все показатели для всех экспортеров
Вы можете немного настроить этот первый запрос, чтобы перечислить метрики для каждый Работа в вашем Prometheus:
count({ __name__!=""}) by ( __name__ )
Одна примечательная вещь об этом запросе по сравнению с первым — это __name __! = ""
Бит — это может показаться немного странным, если вы не привыкли к этому! Это всего лишь одна из возможных сокращений для «Дай мне все временные ряды». Причина этой части заключается в том, что PROMQL требует, чтобы векторный селектор имел хотя бы одну метку, которая не собирает пустую строку, поэтому вы не можете использовать что -то вроде {}
или {__name__ = ~ ". *"}
.
Перечислите все временные ряды для данного экспортера
Еще одно изменение, которое вы могли бы внести в этот первоначальный запрос, — перечислить все Временные ряды — а не метрики — что экспортер предлагает:
{job="prometheus"}
Это позволяет вам видеть все перестановки метки для каждой метрики. Будьте осторожны: это может привести к Лот вывода, поэтому я рекомендую добавить несколько дополнительных фильтров, когда вы исследуете. Это еще одна ситуация, когда я достигнут PROMTOOL
, о чем я упоминал выше. Мне нередко можно использовать PROMTOOL
Чтобы сбросить все временные ряды в файл, а затем использовать инструменты оболочки (или даже просто изучить файл в вим
!) Чтобы получить лучшее представление о том, что мне доступно.
Я надеюсь, что вы нашли это полезным, и что теперь вы чувствуете себя уполномоченными изучить, какие показатели доступны в случаях Prometheus, которые вы используете каждый день! У вас есть какие -нибудь аккуратные трюки Promql, которые вы обнаружили? Если так, дай мне знать!
Большое спасибо Фрю Шмидт , Джон Андерсон , Дэвид Голден , Джонатан Йон и Лиз Лам Для просмотра этого поста!
Оригинал: «https://dev.to/hoelzro/discovering-your-prometheus-via-promql-2n8i»