Рубрики
Uncategorized

Как настроить предупреждение с Loki

Это было первоначально опубликовано на Blog.ruanbekker.com Недавно Grafana Labs анонсировала Loki V2 и его … Tagged с Linux, Logging, DevOps, Grafana.

Это было первоначально опубликовано на blog.ruanbekker.com.

Недавно Grafana Labs объявил Локи V2 И его удивительный! Определенно проверяйте их в блоге по более подробностям.

У Loki есть опция индекса под названием Болтддб-грузоотправитель , что позволяет вам запустить Loki только с помощью магазина объектов, а вы Больше не нужен выделенный магазин индекса такие как dynamodb. Вы можете извлечь этикетки из строк журнала в запросе, что безумие!

И мне очень нравится, как они это реализовали, вы можете проанализировать, фильтровать и форматировать как безумный. Мне это действительно нравится.

А затем генерируя оповещения от любого запроса, который мы будем уходить в сегодня. Определенно проверь Этот блогпост и Это видео Для получения более подробной информации о функциях Loki V2.

Что мы будем делать сегодня

В этом руководстве мы настроим предупреждение, используя Loki Local Jualer, чтобы предупредить нас, когда у нас есть Большое количество журналов событий, приходящих в Отказ Например, скажем, что у кого-то в их приложении может быть включен, и мы хотим отправить оповещение для расслаивания, когда он нарушает порог.

Я смотрю это с помощью http-client Контейнер, который проходит Curl В то время как цикла, чтобы выстрелить кучу HTTP-запросов на контейнер Nginx, который входит в Loki, поэтому мы можем видеть, как работает оповещение, а в этом сценарии мы будем предупреждать о расслаивании.

И после этого мы остановим наш контейнер HTTP-Client, чтобы увидеть, как сигнализация решает, когда скорость журнала снова снизится.

Все компоненты доступны в Docker-Compose.yml На мой Репозиторий GitHub

Компоненты

Давайте сломаемся и начнем с Loki Config:

...
ruler:
  storage:
    type: local
    local:
      directory: /etc/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://alertmanager:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  enable_alertmanager_v2: true

В разделе Loki Config я буду использовать локальный правитель и сопоставить мои правила оповещения под /etc/loki/правила/ И мы также определяем наш экземпляр Alertmanager, в котором должны быть отправлены эти оповещения.

В определении моего правила /etc/loki/rules/demo/rules.yml :

groups:
  - name: rate-alerting
    rules:
      - alert: HighLogRate
        expr: |
          sum by (compose_service)
            (rate({job="dockerlogs"}[1m]))
            > 60
        for: 1m
        labels:
            severity: warning
            team: devops
            category: logs
        annotations:
            title: "High LogRate Alert"
            description: "something is logging a lot"
            impact: "impact"
            action: "action"
            dashboard: "https://grafana.com/service-dashboard"
            runbook: "https://wiki.com"
            logurl: "https://grafana.com/log-explorer"

В моем выражении я использую logql для возврата в секунду всех моих журналов Docker в последнюю минуту Per Compose Service для работы My DockerLogs, и мы указываем, что он должен предупредить, когда порог выше 60.

Как вы можете видеть, у меня есть пара Этикетки и аннотации , который становится Очень полезно Когда у вас есть ссылки на приборной панели, Runbooks Etc И вы хотели бы сопоставить это на ваше предупреждение. Я делаю картографирование в моем alertmanager.yml.yml.yml config:

route:
...
  receiver: 'default-catchall-slack'
  routes:
  - match:
      severity: warning
    receiver: warning-devops-slack
    routes:
    - match_re:
        team: .*(devops).*
      receiver: warning-devops-slack

receivers:
...
- name: 'warning-devops-slack'
  slack_configs:
    - send_resolved: true
      channel: '__SLACK_CHANNEL__'
      title: '{{ if eq .Status "firing" }}:fire:{{ else }}:white_check_mark:{{ end }} [{{ .Status | toUpper }}] {{ .CommonAnnotations.title }} '
      text: >-
        {{ range .Alerts }}
          *Description:* {{ .Annotations.description }}
          *Severity:* `{{ .Labels.severity }}`
          *Graph:* {{ if eq .Labels.category "logs" }}<{{ .Annotations.logurl }}|:chart_with_upwards_trend:>{{ else }}<{{ .GeneratorURL }}|:chart_with_upwards_trend:>{{ end }} *Dashboard:* <{{ .Annotations.dashboard }}|:bar_chart:> *Runbook:* <{{ .Annotations.runbook }}|:spiral_note_pad:>
          *Details:*
          {{ range .Labels.SortedPairs }} - *{{ .Name }}:* `{{ .Value }}`
          {{ end }}
           - *Impact*: {{ .Annotations.impact }}
           - *Receiver*: warning-{{ .Labels.team }}-slack
        {{ end }}

Как вы можете видеть, когда мой оповещение ничего не совпадает с тем, что он перейдет на мой приемник Chatall, но когда моя этикетка содержит дежопт и маршрут оповещение к моему Предупреждение - DevOps-Slack Приемник, а затем мы будем разблокировать наши этикетки и аннотации, чтобы включить значения в нашу тревогу на провисании.

Демонстрация

Достаточно с деталями фона, и пришло время попасть в действие.

Весь код для этой демонстрации будет доступен в моем репозитории GitHub: github.com/ruanbekker/Loki-Alerts-Docker.

У Docker-Compose будет контейнер Графана , alertmanager. , Локи , nginx и а http-client Отказ

HTTP-Client скручивается во время цикла, который просто сделает кучу HTTP-запросов на контейнер Nginx, который будет входить в Loki.

Получить источник

Получите код из моего репозитория GitHUB:

$ git clone https://github.com/ruanbekker/loki-alerts-docker
$ cd loki-alerts-docker

Вам нужно будет заменить URL Well WebHook и Slack канал, где вы хотите, чтобы ваши оповещения были отправлены. Это примет переменные среды и заменит значения в config/alertmanager.yml (Всегда проверяйте сценарий сначала, прежде чем выполнять его)

$ SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xx/xx/xx" SLACK_CHANNEL="#notifications" ./parse_configs.sh

Вы можете дважды проверить, работает Cat Config/alertmanager.yml , как только вы закончите, загрузите стек:

$ docker-compose up -d

Откройте графану:

$ open http://grafana.localdns.xyz:3000

Используйте первоначальный комбинацию пользователя и пароль admin/admin. а затем сбросьте свой пароль:

Просмотрите свои этикетки на секции журнала Explorer, в моем примере это будет {Job = "DockerLogs"} :

Когда мы выбираем нашу этикетку, мы увидим наши журналы:

Как я объяснил ранее, запрос, который мы будем работать в нашем правитере, можно проверить, что такое тариф в настоящее время:

sum by (compose_project, compose_service) (rate({job="dockerlogs"}[1m]))

Что будет выглядеть так:

В настроенном выражении в нашем конфиге правителя мы установили сигнал тревоги после того, как значение отправится выше 60, мы можем подтвердить это, запустив:

sum by (compose_project, compose_service) (rate({job="dockerlogs"}[1m])) > 60

И мы можем проверить, что это так, и теперь он должен быть тревожным:

Перейти к AlertManager:

$ open http://alertmanager.localdns.xyz:9093

Мы можем видеть AlertManager, показывает тревогу:

Когда мы отправляемся, чтобы расслабиться, мы видим ваше уведомление:

Итак, давайте остановим наш HTTP-клиент:

$ docker-compose stop http-client
Stopping http-client ... done

Тогда мы можем видеть, как журнал остановлен:

И в расслаивании мы должны увидеть, что тревога восстановлена, и мы должны увидеть уведомление:

Тогда вы можете остановить свой стек:

$ docker-compose down

Довольно эпическое вещество верно? Я действительно люблю, как экономически эффективные Loki так же, как бухгалтерское использование будет столь дорого бегать, и особенно поддерживать, Grafana Labs действительно выполняет некоторую эпическую работу, и моя шляпа уходит к ним.

Спасибо

Я надеюсь, что вы нашли это полезно, не стесняйтесь добраться до меня в Twitter @Ruanbekker или посетить меня на моем сайте ruan.dev

Оригинал: «https://dev.to/ruanbekker/how-to-setup-alerting-with-loki-kmj»