User Tools

Site Tools


prometheus_grafana_loki_-_observability

This is an old revision of the document!


Prometheus, Grafana, Loki - Observability

Реклама

  • Мониторинг не нужен, если он формален и не нацелен на бизнес-результат
  • Observability — переход от простого сбора метрик к пониманию влияния ИТ-решений на бизнес-показатели, прогнозированию сбоев и автоматизации реагирования
  • Бизнес-метрики - мониторинг не сервисов, а действий пользователя (например, количество успешных подключений)
  • Умные оповещения - должны приходить только при реальной угрозе для сервиса а не по каждому незначительному отклонению
  • Автоматизация - запуск процедур восстановления параллельно с уведомлениями инженеров

Техническое задание

  • Настроить учет работы систем, сервисов и сетей предприятия с точки зрения: метрик (Service Level Indicator - SLI), целей команды предприятия (Service Level Objective - SLO) и гарантий для клиентов (Service Level Agreement - SLA)

Модуль 1. Основы наблюдаемости и архитектура стека

Теория

  • SLA (Service Level Agreement) и SLO (Service Level Objective)
  • Метрики, Логи, Трейсы, Чем отличается мониторинг от наблюдаемости
  • Роль каждого компонента (Prometheus, Grafana, Loki) в экосистеме

Практика

Модуль 2. Сбор и анализ метрик с Prometheus

Модуль 3. Централизация логов с Loki

  • Установка Grafana Loki
  • Установка и настройка Promtail для доставки логов приложений и системных журналов
  • Язык LogQL, фильтрация и анализ логов (поиск ошибок, парсинг JSON, агрегация статистики по логам)

Модуль 4. Визуализация данных и дашборды в Grafana

  • Создание Grafana dashboard, типы панелей (Time series, Table, Stat, Logs), настройка внешнего вида и переменных, интерактивные дашборды
  • Пример дашборда “Мониторинг сервера” с метриками (CPU/RAM) и виджетом последних ошибок из логов

Модуль 5. Алертинг и обнаружение проблем

  • Prometheus + Alertmanager, создание правил алертинга (например, “сервер не отвечает”, “много 500-х ошибок”)
  • Настройка маршрутизации уведомлений (Email, Telegram)
  • Управление инцидентами, настройка silence (подавление алертов), агрегация нотификаций
  • Grafana Alerting, настройка алертов непосредственно в интерфейсе Grafana

Идеи для курса

  • Процент и время задержки писем через greylist

Черновик

root@server:~# cat /usr/local/bin/roundcube_monitor.sh
#!/usr/bin/env bash
set -euo pipefail

ROUND_URL="${1:-http://server.corp13.un/mail/}"
LOGIN="${2:-student}"
PASSWORD="${3:-password}"

TMP_DIR="$(mktemp -d)"
COOKIE_JAR="$TMP_DIR/cookies.txt"
LOGIN_PAGE="$TMP_DIR/login.html"
RESPONSE_PAGE="$TMP_DIR/response.html"
LOGOUT_PAGE="$TMP_DIR/logout.html"

cleanup() {
  rm -rf "$TMP_DIR"
}
trap cleanup EXIT

extract_token() {
  local file="$1"
  grep -oP 'name="_token"\s+value="\K[^"]+' "$file" | head -n1 || true
}

echo "1) Открываю форму входа: $ROUND_URL"
curl -ksSL \
  -c "$COOKIE_JAR" \
  -b "$COOKIE_JAR" \
  "$ROUND_URL" \
  -o "$LOGIN_PAGE"

TOKEN="$(extract_token "$LOGIN_PAGE")"

if [[ -z "$TOKEN" ]]; then
  echo "CRITICAL: не найден _token на странице логина"
  exit 2
fi

echo "2) Найден CSRF token"

echo "3) Отправляю форму логина"
curl -ksSL \
  -c "$COOKIE_JAR" \
  -b "$COOKIE_JAR" \
  -e "$ROUND_URL" \
  -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "_token=$TOKEN" \
  --data-urlencode "_task=login" \
  --data-urlencode "_action=login" \
  --data-urlencode "_timezone=Europe/Moscow" \
  --data-urlencode "_url=" \
  --data-urlencode "_user=$LOGIN" \
  --data-urlencode "_pass=$PASSWORD" \
  "$ROUND_URL?_task=login" \
  -o "$RESPONSE_PAGE"

if grep -qiE 'Invalid request|Invalid security token|request token' "$RESPONSE_PAGE"; then
  echo "CRITICAL: ошибка CSRF/token при логине"
  exit 2
fi

if grep -qiE 'login failed|authentication failed|invalid password|failed to login' "$RESPONSE_PAGE"; then
  echo "CRITICAL: логин не выполнен"
  exit 2
fi

if grep -qi '_task=mail' "$RESPONSE_PAGE" || grep -qi 'logout' "$RESPONSE_PAGE"; then
  echo "OK: вход в Roundcube выполнен"
else
  echo "WARNING: результат логина неоднозначен"
  exit 1
fi

echo "4) Выполняю logout"

POST_LOGIN_TOKEN="$(extract_token "$RESPONSE_PAGE")"
if [[ -z "$POST_LOGIN_TOKEN" ]]; then
  POST_LOGIN_TOKEN="$TOKEN"
fi

curl -ksSL \
  -c "$COOKIE_JAR" \
  -b "$COOKIE_JAR" \
  -e "$ROUND_URL?_task=mail" \
  "$ROUND_URL?_task=logout&_token=$POST_LOGIN_TOKEN" \
  -o "$LOGOUT_PAGE"

if grep -qiE 'request check failed|invalid security token' "$LOGOUT_PAGE"; then
  echo "CRITICAL: logout не выполнен, ошибка token"
  exit 2
fi

if grep -qiE 'login' "$LOGOUT_PAGE" || grep -qi 'logged out' "$LOGOUT_PAGE" || grep -qi '_task=login' "$LOGOUT_PAGE"; then
  echo "OK: logout выполнен"
  exit 0
fi

echo "WARNING: logout отправлен, но результат неоднозначен"
exit 1
root@server:~# cat /usr/local/bin/mywall.sh
#!/bin/sh

for MY_T in $(w | grep pts | awk '{print $2}')
do
        echo "$1" | jq > /dev/$MY_T
done
prometheus_grafana_loki_-_observability.1778590849.txt.gz · Last modified: 2026/05/12 16:00 by val