User Tools

Site Tools


prometheus_grafana_loki_-_observability

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
prometheus_grafana_loki_-_observability [2026/05/12 16:00]
val
prometheus_grafana_loki_-_observability [2026/05/27 09:24] (current)
val [Модуль 2. Сбор и анализ метрик с Prometheus]
Line 13: Line 13:
  
   * Настроить учет работы систем,​ сервисов и сетей предприятия с точки зрения:​ метрик (Service Level Indicator - SLI), целей команды предприятия (Service Level Objective - SLO) и гарантий для клиентов (Service Level Agreement - SLA)   * Настроить учет работы систем,​ сервисов и сетей предприятия с точки зрения:​ метрик (Service Level Indicator - SLI), целей команды предприятия (Service Level Objective - SLO) и гарантий для клиентов (Service Level Agreement - SLA)
 +
 +===== После окончания обучения слушатель будет знать =====
 +
 +  * Фундаментальные понятия мониторинга ​
 +  * Показатели качества (SLI/​SLO/​SLA)
 +  * Технические термины мониторинга
 +  * Основные этапы мониторинга
 +
 +===== После окончания обучения слушатель будет уметь =====
 +
 +  * Разворачивать стек продуктов Prometheus, Grafana, Loki
 +  * Настраивать сбор метрик в Prometheus с использование exporter
 +  * Автоматизировать поиск и добавлять собственные источники метрик
 +  * Использровать язык запросов PromQL для анализа и визуализации измерений
 +  * Настраивать сбор, фильтрацию и анализ журналов с использованием Loki и языка LogQL
 +  * Использовать готовые и создавать собственные dashboard в Grafana
 +  * Настраивать уведомления в Prometheus Alertmanager с использованием готовых и собственных правил
 +  * Настраивать маршрутизацию уведомлений с использованием Email и Webhook
 +  * Настраивать уведомления в Grafana
  
 ===== Модуль 1. Основы наблюдаемости и архитектура стека ===== ===== Модуль 1. Основы наблюдаемости и архитектура стека =====
Line 26: Line 45:
 ==== Практика ==== ==== Практика ====
  
-  * Установка [[Сервис ​Prometheus]] и [[Сервис Grafana]]+  * Развертывание стенда предприятия 
  
 ===== Модуль 2. Сбор и анализ метрик с Prometheus ===== ===== Модуль 2. Сбор и анализ метрик с Prometheus =====
  
-  * Настройка экспортера ([[Сервис Prometheus#​prometheus-node-exporter]] для метрик ОС)принцип pull-модели, Service Discovery+  * Установка [[Сервис Prometheus]] 
 +  * Использование ​экспортеров, принцип pull-модели  
 +  * Пример ​[[Сервис Prometheus#​prometheus-node-exporter]] для ​сбора ​метрик ОС, оценка загрузки CPU, RAM, сети, задержки ввода/​вывода
   * Язык [[Сервис Prometheus#​Запросы PromQL]]: Изучение типов данных (счетчики,​ измеряемые величины,​ гистограммы),​ операторов и агрегаций   * Язык [[Сервис Prometheus#​Запросы PromQL]]: Изучение типов данных (счетчики,​ измеряемые величины,​ гистограммы),​ операторов и агрегаций
-  * Оценка загрузки CPU, RAM, сети, задержки ввода/​вывода +  * Пример [[Сервис Prometheus#​prometheus-apache-exporter]] для сбора метрик "штатного"​ приложения, [[Сервис HTTP#Нагрузочное тестирование]] 
-  * Настройка экспортера ([[Сервис Prometheus#​prometheus-pushgateway]] и [[Сервис Prometheus#Пример сбора метрик из приложения]]+  * Service Discovery 
 +  * Использование push-модели ​[[Сервис Prometheus#​prometheus-pushgateway]] и [[Сервис Prometheus#Отправка метрик из приложения]] 
 +  * prometheus federation
  
 ===== Модуль 3. Централизация логов с Loki ===== ===== Модуль 3. Централизация логов с Loki =====
  
-  * Установка ​Grafana ​Loki+  * Установка Loki
   * Установка и настройка Promtail для доставки логов приложений и системных журналов   * Установка и настройка Promtail для доставки логов приложений и системных журналов
   * Язык LogQL, фильтрация и анализ логов (поиск ошибок,​ парсинг JSON, агрегация статистики по логам)   * Язык LogQL, фильтрация и анализ логов (поиск ошибок,​ парсинг JSON, агрегация статистики по логам)
Line 43: Line 67:
 ===== Модуль 4. Визуализация данных и дашборды в Grafana ===== ===== Модуль 4. Визуализация данных и дашборды в Grafana =====
  
 +  * Установка [[Сервис Grafana]]
   * [[Сервис Grafana#​Подключение Prometheus]] и Loki к Grafana.   * [[Сервис Grafana#​Подключение Prometheus]] и Loki к Grafana.
-  * Создание [[Сервис Grafana#Grafana ​dashboard]],​ типы панелей (Time series, Table, Stat, Logs), настройка внешнего вида и переменных,​ интерактивные дашборды +  * [[Сервис Grafana#​Импорт готовых dashboard]] в Grafana 
-  * Пример дашборда "​Мониторинг сервера"​ с метриками (CPU/RAM) и виджетом последних ошибок из логов+  * [[Сервис Grafana#Создание ​dashboard]] ​"​Мониторинг сервиса"​ с метриками приложениястатусами сервисов от которых оно зависит и виджетами последних ошибок из логов 
 +  * Типы панелей (Time series, Table, Stat, Logs), настройка внешнего вида и переменных,​ интерактивные дашборды
  
 ===== Модуль 5. Алертинг и обнаружение проблем ===== ===== Модуль 5. Алертинг и обнаружение проблем =====
  
-  * Prometheus + Alertmanager, ​создание правил алертинга (например,​ "сервер не отвечает",​ "​много 500-х ошибок"​) +  * Установка [[Сервис Prometheus#​prometheus-alertmanager]] ​ 
-  * Настройка маршрутизации уведомлений (Email, ​Telegram)+  * [[Сервис Prometheus#Настройка маршрутизации уведомлений]] (Email, ​Webhookи [[Сервис Prometheus#​Тестирование alertmanager]] 
 +  * [[Сервис Prometheus#​Подключение готовых правил alertmanager]] 
 +  * [[Сервис Prometheus#​Подключение Alertmanager к Prometheus]] 
 +  * [[Сервис Prometheus#​Создание правил alertmanager]] ​
   * Управление инцидентами,​ настройка silence (подавление алертов),​ агрегация нотификаций   * Управление инцидентами,​ настройка silence (подавление алертов),​ агрегация нотификаций
-  * Grafana ​Alerting, настройка ​алертов непосредственно в интерфейсе Grafana+  * [[Сервис ​Grafanaастройка ​уведомлений]] ​непосредственно в интерфейсе Grafana ​(вместе с оценкой пороговых значений,​ на примере [[Сервис Prometheus#​Отправка метрик из приложения]])
  
 ===== Идеи для курса ===== ===== Идеи для курса =====
Line 59: Line 88:
  
 ===== Черновик ===== ===== Черновик =====
-<​code>​ 
-root@server:​~#​ cat /​usr/​local/​bin/​roundcube_monitor.sh 
-</​code><​code>​ 
-#​!/​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 
-</​code>​ 
- 
-<​code>​ 
-root@server:​~#​ cat /​usr/​local/​bin/​mywall.sh 
-</​code><​code>​ 
-#!/bin/sh 
  
-for MY_T in $(w | grep pts | awk '​{print $2}') 
-do 
-        echo "​$1"​ | jq > /dev/$MY_T 
-done 
-</​code>​ 
prometheus_grafana_loki_-_observability.1778590849.txt.gz · Last modified: 2026/05/12 16:00 by val