
Как создавать оповещения Loki через ресурс Prometheusrule
9 июля 2025 г.В современных стеклах наблюдаемости журнальные оповещения часто более непосредственно и действуют, чем на основе показателей, особенно когда вы отслеживаете аномалии, инциденты безопасности или внезапные сбои применения. В то время как инструменты, какЛокиУпростить агрегацию журнала, превращение этих журналов в значимые, автоматизированные оповещения остается проблемой.
В мире метрик многие инженеры знакомы с Прометеем и егоPrometheusRule
Ресурс для Kubernetes. Но что, если бы вы могли применить ту же гибкую, декларативную модель оповещения о журналах Loki?
В этой статье мы рассмотрим, как использоватьГрафана сплаввместе сPrometheusRule
ресурс для динамического генерирования правил оповещения дляЛоки, принесло мощное, основанное на правилах предупреждение о ваших журналах. В средах Kubernetes этот подход соединяет разрыв между журналами и метриками, что позволяет вам управлять журналами Loki с тем жеPrometheusRule
Конфигурация оповещения об оптимизации ресурсов.
Начнем!
Проблема в дикой природе
АPrometheusRule
Пользовательское определение ресурсов (CRD) является де -факто стандартом для управления правилами оповещения в экосистеме Прометея. Он поддерживается многими инструментами, включая Графана Аллея, Таноса и других. Тем не менее, изначально он не был предназначен для обработки оповещений на основе журналов Loki. Это прискорбно, какЛокиПравила оповещения имеют одну и ту же структуру - единственная разница заключается в выражениях, которые используют
Со временем некоторые члены сообщества попытались расширить этот шаблон, введя такие пользовательские ресурсы, какLokiRule
иGlobalLokiRule
Полем Однако,
АAlertingRule
иRecordingRule
Ресурсы, но они работают только в том случае, если Локи развернут через оператора. Если вы установили Loki, используя другой метод - например, очень популярный
К счастью, Grafana Alloy (ранее агент Grafana) предлагает путь вперед. Он поддерживает специальный блок конфигурацииloki.rules.kubernetes
, что позволяет вам определить правила оповещения Loki, используя стандартPrometheusRule
Крдс Это пробивает разрыв, но он не работает без ящика. Из -за разреженной документации и необходимой дополнительной конфигурации может быть сложно настроить. Мы пройдем через необходимые шаги в этой статье.
Пошаговое руководство по настройке loki.rules.kubernetes
Это руководство предполагает, что сплав Локи и Графана уже развернуты и работают в вашем кластере Kubernetes.
Шаг I: добавитьloki.rules.kubernetes к конфигурации сплава графана
Чтобы включить правила оповещения Loki, настройте сплав, чтобы найтиPrometheusRule
Ресурсы, предназначенные для Локи:
loki.rules.kubernetes "kvendingoldo_demo" {
address = "http://loki-ruler.loki.svc.cluster.local:3100"
tenant_id = "17"
rule_selector {
match_labels = {
loki = "enabled"
}
}
}
Этот блок сообщает Графана Сплав сканироватьPrometheusRule
Ресурсы помеченыloki=enabled
Полем Вы можете использовать любую метку по вашему выбору - просто будьте последовательны на протяжении всей конфигурации.
Примечания:
- Одной только этой конфигурации недостаточно. Если вы попытаетесь применить
PrometheusRule
содержащий специфическое выражение выражения локи на этом этапе,он будет отклоненПо допускам Prometheus webhook из -за неудачной проверки выражения. - Не забудьте обновитьЛоки
address
иtenant_id
Чтобы соответствовать вашей среде. - Если вы также используете
mimir.rules.kubernetes направлять правилаМимир, Обязательно исключите любые LOKI-специфические правила из отправки туда. Поскольку Локи используетLogqlвместоPromql Мимир не сможет правильно их проанализировать и бросить ошибки. Пример фрагмента:
mimir.rules.kubernetes "kvendingoldo_demo" {
...
rule_selector {
match_expression {
key = "loki"
operator = "DoesNotExist"
}
}
}
Шаг II: Настройте Prometheus приема Webhook, чтобы пропустить проверку правил Loki
По умолчанию оператор Prometheus проверяет всеPrometheusRule
Объекты с использованием promql. Поскольку локи по правилам использования используютсяLogql, эта проверка потерпит неудачу, если не будет четко обойти. Чтобы избежать этого, настройтеПрием WebhookВ операторе PromeTheus пропустить проверку для правил, помеченных для Loki:
admissionWebhooks:
matchConditions:
# Skip PrometheusRule validation when the "loki" label is present
- name: ignore-loki-rules
expression: '!("loki" in object.metadata.labels)'
Это правило рассказывает о приеме WebHook:Еслиloki
этикетка присутствует наPrometheusRule
, пропустить проверку своих выражений.
Это важно для предотвращения сбоев проверки при применении правил, которые содержат запросы LogQL.
Примечания:
- Убедитесь, что вы
PrometheusRule
Пользовательское определение ресурса (CRD) является актуальным. - Если вы используете
Kube-Prometheus-Stack Helm Chart, вам понадобится хотя бы версия75.3.6
использоватьmatchConditions
поле вadmissionWebhooks
Полем
Шаг III: Настройте линейку Loki
Для поддержки динамических правил оповещения для компонента линейки требуется дополнительная конфигурация:
- Обеспечить настойчивость: Это необходимо для хранения и управления динамически загруженными правилами.
- Используйте S3 (или любое другое хранилище объекта) для хранения линейки: По умолчанию
local
Бэкэнд хранения не поддерживает динамические правила, так как файловая система обычно только считывается в контейнерных средах. - Включить API правителя: Это позволяет Loki динамически получать определения правил - например, от сплава через CRD.
loki:
…
rulerConfig:
enable_api: true
storage:
type: s3
s3:
s3: "<YOUR_BUCKET_URL>"
s3forcepathstyle: true
insecure: true
…
ruler:
…
persistence:
enabled: true
Примечания:
После того, как стек журналов настроен с постоянностью и доступом к API, Loki выставит конечные точки для динамической загрузки правил оповещения, независимо от того, происходят ли они из:
- Монтированные файлы yaml
- Kubernetes configmaps
PrometheusRule
CRD черезГрафана сплав
Чтобы узнать больше, проверить
Шаг IV: Создайте ресурс Prometheusrule
Как только все будет подключено, вы можете определить правила оповещения на основе журналов, используяPrometheusRule
CRD - даже если они используютLogqlвместоPromqlПолем
Вот примерPrometheusRule
предупреждение об этом триггера, когда сплав Grafana генерирует более 100 линий бревна в минуту, поддерживается в течение 10 минут:
---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kvendingoldo_demo
labels:
loki: enabled
spec:
groups:
- name: AlloyPrometheusRuleTest
rules:
- alert: AlloyLogLineCount
expr: count_over_time({namespace="grafana", container="alloy"}[1m]) > 100
for: 10m
labels:
severity: warn
annotations:
summary: Grafana Alloy is logging more than usual
Шаг V: Убедитесь, что все работает
Прежде всего, создайте капсул Kubernetes, который непрерывно излучает журналы. Сообщение POD предназначено для точно соответствовать правилу оповещения.
---
apiVersion: v1
kind: Pod
metadata:
name: kvendingoldo-log-generator
labels:
app: kvendingoldo-log-generator
spec:
containers:
- name: logger
image: busybox
command:
- /bin/sh
- -c
- >
while true; do
echo "how-to-create-loki-alerts-kvendingoldo-article";
sleep 10;
done
ОпределитьPrometheusRule
Это запустит, если строка журнала появится более одного раза в минуту:
---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kvendingoldo-loki-log-alerts
labels:
loki: enabled
spec:
groups:
- name: log-generator-alerts
rules:
- alert: ErrorLogsDetected
expr: |
sum by(pod) (
count_over_time(
{app="kvendingoldo-log-generator"} |= "how-to-create-loki-alerts-kvendingoldo-article"
[1m]
)
) > 1
for: 1m
labels:
severity: warning
annotations:
summary: "High error rate in kvendingoldo-log-generator pod"
description: "More than one error log in the past minute from pod {{ $labels.pod }}"
Это правило:
- ИспользованиеLogqlЧтобы найти конкретные сообщения в журналах из стручки.
- Триггеры, если в течение минуты видны более одного такого журнала.
- Ждет 1 минуту, прежде чем стрелять в предупреждение (
for: 1m
)
Наконец, пришло время убедиться, что правило было загружено, а оповещение функционирует правильно.
ОткрытьGrafana ui, затем перейдите к:Оповещения → Правила оповещения
Вы должны увидеть перечисленное правило логариста-генератора. Если POD сгенерировал достаточно подходящих журналов, предупреждение будет показывать какУвольнениеПолем В противном случае это будетНормальныйПолем
Это подтверждает, что:
- Правило было успешно поднято правителем Локи через сплав Графана.
- Локи оценивает правило на основе данных журнала в реальном времени.
Последние мысли
Объединив Kubernetes-NationalPrometheusRule
CRD с селекторами метки иloki.rules.kubernetes
Блокируйте в сплаве Grafana, вы получаете мощный и гибкий способ управления оповещениями на основе журналов в вашем кластере. Это позволяет вам:
- Динамически предоставление оповещений через ресурсы K8S.
- Сохраняйте все правила оповещения, управляемые CRD, контролируемые версией и Kubernetes-National
- Используйте полный logQL, чтобы поймать все от простых ошибок до сложных шаблонов журнала
- Централизовать все оповещения - журналы и метрики - в одном интерфейсе Grafana
Короче говоря, эта настройка объединяет лучшие из DevOps и наблюдение: автоматизированное, масштабируемое и полностью интегрированное предупреждение о журнале, все в вашей экосистеме Kubernetes.
Оригинал