diff --git a/10-monitoring-03-grafana/README.md b/10-monitoring-03-grafana/README.md new file mode 100644 index 000000000..1067c925a --- /dev/null +++ b/10-monitoring-03-grafana/README.md @@ -0,0 +1,57 @@ +# Домашнее задание к занятию "10.03. Grafana" + +## Задание повышенной сложности + +**В части задания 1** не используйте директорию [help](./help) для сборки проекта, самостоятельно разверните grafana, где в +роли источника данных будет выступать prometheus, а сборщиком данных node-exporter: +- grafana +- prometheus-server +- prometheus node-exporter + +За дополнительными материалами, вы можете обратиться в официальную документацию grafana и prometheus. + +В решении к домашнему заданию приведите также все конфигурации/скрипты/манифесты, которые вы +использовали в процессе решения задания. + +**В части задания 3** вы должны самостоятельно завести удобный для вас канал нотификации, например Telegram или Email +и отправить туда тестовые события. + +В решении приведите скриншоты тестовых событий из каналов нотификаций. + +## Обязательные задания + +### Задание 1 +Используя директорию [help](./help) внутри данного домашнего задания - запустите связку prometheus-grafana. + +Зайдите в веб-интерфейс графана, используя авторизационные данные, указанные в манифесте docker-compose. + +Подключите поднятый вами prometheus как источник данных. + +Решение домашнего задания - скриншот веб-интерфейса grafana со списком подключенных Datasource. + +## Задание 2 +Изучите самостоятельно ресурсы: +- [promql-for-humans](https://timber.io/blog/promql-for-humans/#cpu-usage-by-instance) +- [understanding prometheus cpu metrics](https://www.robustperception.io/understanding-machine-cpu-usage) + +Создайте Dashboard и в ней создайте следующие Panels: +- Утилизация CPU для nodeexporter (в процентах, 100-idle) +- CPULA 1/5/15 +- Количество свободной оперативной памяти +- Количество места на файловой системе + +Для решения данного ДЗ приведите promql запросы для выдачи этих метрик, а также скриншот получившейся Dashboard. + +## Задание 3 +Создайте для каждой Dashboard подходящее правило alert (можно обратиться к первой лекции в блоке "Мониторинг"). + +Для решения ДЗ - приведите скриншот вашей итоговой Dashboard. + +## Задание 4 +Сохраните ваш Dashboard. + +Для этого перейдите в настройки Dashboard, выберите в боковом меню "JSON MODEL". + +Далее скопируйте отображаемое json-содержимое в отдельный файл и сохраните его. + +В решении задания - приведите листинг этого файла. \ No newline at end of file diff --git a/10-monitoring-03-grafana/help/docker-compose.yml b/10-monitoring-03-grafana/help/docker-compose.yml new file mode 100644 index 000000000..075271af3 --- /dev/null +++ b/10-monitoring-03-grafana/help/docker-compose.yml @@ -0,0 +1,68 @@ +version: '3.8' + +services: + prometheus: + image: prom/prometheus:v2.24.1 + container_name: prometheus + volumes: + - ./prometheus:/etc/prometheus:Z + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + - '--web.console.libraries=/etc/prometheus/console_libraries' + - '--web.console.templates=/etc/prometheus/consoles' + - '--storage.tsdb.retention.time=200h' + - '--web.enable-lifecycle' + restart: unless-stopped + depends_on: + - nodeexporter + expose: + - 9090 + networks: + - monitor-net + + nodeexporter: + image: prom/node-exporter:v1.0.1 + container_name: nodeexporter + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.rootfs=/rootfs' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)' + restart: unless-stopped + expose: + - 9100 + networks: + - monitor-net + + + grafana: + image: grafana/grafana:7.4.0 + container_name: grafana + volumes: + - grafana_data:/var/lib/grafana + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin + - GF_USERS_ALLOW_SIGN_UP=false + restart: unless-stopped + depends_on: + - prometheus + ports: + - 3000:3000 + expose: + - 3000 + networks: + - monitor-net + +networks: + monitor-net: + driver: bridge + +volumes: + prometheus_data: {} + grafana_data: {} \ No newline at end of file diff --git a/10-monitoring-03-grafana/help/prometheus/prometheus.yml b/10-monitoring-03-grafana/help/prometheus/prometheus.yml new file mode 100644 index 000000000..413e59a9b --- /dev/null +++ b/10-monitoring-03-grafana/help/prometheus/prometheus.yml @@ -0,0 +1,9 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: 'nodeexporter' + scrape_interval: 5s + static_configs: + - targets: ['nodeexporter:9100'] diff --git a/README.md b/README.md index 85aabc716..f8f9cf882 100644 --- a/README.md +++ b/README.md @@ -34,15 +34,15 @@ 10.1. [Зачем и что нужно мониторить](./10-monitoring-01-base/README.md) -10.2. [Системы для мониторинга]() +10.2. [Системы для мониторинга](./10-monitoring-02-systems) -10.3. [Системы оповещения]() +10.3. [Средство визуализации Grafana](./10-monitoring-03-grafana) -10.4. [ELK]() +10.4. [Система сбора логов ELK]() -10.5. [Zabbix]() +10.5. [Система перехватчик-ошибок Sentry]() -10.6. [Prometheus, Grafana, Alertmanager]() +10.6. [Инцидент-менеджмент]() ## Дополнительные материалы