Skip to content

Egorich88/russia-weather

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

116 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇷🇺 Russia Weather Monitoring

DevOps-проект: Мониторинг погоды в 90 городах России

Финальный дашборд image

Jenkins Prometheus Grafana Ansible Vagrant

📋 Описание проекта

Этот проект представляет собой полностью автоматизированную систему мониторинга погоды. Она разворачивает три виртуальные машины, устанавливает и настраивает на них необходимые сервисы, а также предоставляет готовый дашборд для визуализации температуры в 90 городах России, включая все федеральные округа. CI/CD автоматизация позволяет обновлять экспортер при каждом push в репозиторий.

🏗️ Архитектура

Система состоит из трех виртуальных машин, развернутых с помощью Vagrant на базе VirtualBox, и управляется через единый Jenkins-оркестратор.

  • VM 1 (Jenkins): Автоматизация CI/CD, запуск экспортера в Docker-контейнере.
  • VM 2 (Prometheus): Сбор и хранение метрик по HTTPS.
  • VM 3 (Grafana): Визуализация данных, кастомные дашборды.

Диаграмма архитектуры проекта Архитектура

✅ Что реализовано

  • Инфраструктура: 3 VM (Jenkins, Prometheus, Grafana) под управлением Vagrant + VirtualBox.
  • Мониторинг:
    • Prometheus доступен по HTTPS.
    • Grafana доступна по HTTPS.
  • CI/CD: Автоматический деплой экспортера через Jenkins при push в ветку main (Poll SCM).
  • Безопасность: Токен Gismeteo хранится в Jenkins Credentials и передаётся в контейнер как переменная окружения.
  • Данные: Экспортер использует официальное API Gismeteo v4 с лимитом 1000 запросов/месяц. Интервал обновления — 5 дней (с учётом лимита для 90 городов).
  • Мониторинг: Все 7 метрик для 90 городов отображаются в Grafana.
  • Метрики экспортера (с координатами и иконками):
    • Температура воздуха (weather_temp_celsius)
    • Относительная влажность (weather_humidity_percent)
    • Атмосферное давление (weather_pressure_mmhg)
    • Скорость ветра (weather_wind_speed_ms)
    • Ощущаемая температура (weather_feels_like_celsius)
    • Код иконки погоды (weather_icon_info)
    • Описание погоды (weather_description_info)
    • Географические координаты (lat, lon) для интерактивной карты.
    • Иконки погоды – официальный набор Gismeteo с маппингом кодов.
  • Дашборд в Grafana: Создан многофункциональный дашборд «Russia Weather Full»:
    • Общая статистика: количество городов, мин/макс/средняя температура, средняя влажность.
    • Таблицы: все метрики для 90 городов с цветовой индикацией и иконками погоды.
    • 🗺️ Карта температуры: интерактивная карта России с маркерами, цвет которых меняется в зависимости от температуры.
    • 🖼️ Детальная панель города: кастомная HTML-панель, отображающая всю информацию по выбранному городу (температура, ощущение, иконка, описание, влажность, ветер, давление).

🗺️ Распределение 90 городов по федеральным округам

  • Центральный: 17 городов (Москва, Воронеж, Курск...)
  • Северо-Западный: 9 городов (СПб, Калининград, Мурманск...)
  • Южный: 10 городов (Краснодар, Ростов-на-Дону, Волгоград...)
  • Северо-Кавказский: 7 городов (Ставрополь, Махачкала, Грозный...)
  • Приволжский: 16 городов (Казань, Самара, Уфа, Пермь...)
  • Уральский: 8 городов (Екатеринбург, Челябинск, Тюмень...)
  • Сибирский: 12 городов (Новосибирск, Красноярск, Омск...)
  • Дальневосточный: 11 городов (Владивосток, Хабаровск, Якутск...)
  • ВСЕГО: 90 городов

📊 Ключевые показатели

Параметр Значение
Количество городов 90
Интервал обновления данных 5 дней
Метрики на город 7
Общее число временных рядов > 600

📥 Импорт дашборда

Готовый JSON-файл дашборда находится в папке grafana/dashboards/russia-weather-full.json. Для импорта:

  1. Откройте Grafana → CreateImport
  2. Загрузите JSON-файл или вставьте его содержимое
  3. Выберите источник данных Prometheus
  4. Нажмите Import

🚀 Быстрый старт

  1. Клонировать репозиторий:
    git clone https://github.com/Egorich88/russia-weather.git
    cd russia-weather
  2. Запустить инфраструктуру:
    vagrant up
  3. Настроить Jenkins:
    • Открыть http://<jenkins-vm-ip>:8080, ввести пароль из консоли, установить плагины, создать пользователя.
    • Добавить в Jenkins SSH-ключ (jenkins-github-ssh) для доступа к репозиторию.
    • Добавить токен Gismeteo как секретный текст (gismeteo-token) в Jenkins Credentials.
  4. Запустить деплой:
    • В Jenkins создать задачу weather-exporter-deploy с Pipeline из SCM (указав репозиторий и ветку main). Jenkinsfile уже есть в репозитории.
    • Убедиться, что включён триггер Poll SCM (например, H/5 * * * *).
  5. Запустить деплой Prometheus и Grafana:
    • В Jenkins создать отдельную задачу (или выполнить вручную) с помощью Ansible-плейбуков для настройки Prometheus и Grafana.
  6. Проверить работу:
    • Открыть Grafana по адресу https://<grafana-vm-ip>:3000 (логин admin, пароль admin).
    • Убедиться, что дашборд отображает данные для 90 городов, карта работает, и в таблицах видны иконки погоды.

📊 Доступ к сервисам

Сервис Адрес Логин Пароль Примечание
Jenkins http://<jenkins-vm-ip>:8080 admin ваш пароль HTTPS
Prometheus https://<prometheus-vm-ip>:9090 - - HTTPS
Grafana https://<grafana-vm-ip>:3000 admin admin HTTPS
Exporter http://<jenkins-vm-ip>:8000/metrics - - Отдаёт метрики

🔒 Безопасность

  • Jenkins: Настроен на работу по HTTPS через Nginx reverse proxy (самоподписанный сертификат с SAN). HTTP-трафик перенаправляется на HTTPS.
  • Prometheus: Доступен по HTTPS с самоподписанным сертификатом (добавлен SAN для IP).
  • Grafana: Настроена по HTTPS с валидным (самоподписанным) сертификатом.
  • Секреты: Токен Gismeteo хранится в Jenkins Credentials и не попадает в код или логи.

🛠️ Технологический стек (кратко)

  • Виртуализация: VirtualBox, Vagrant
  • CI/CD: Jenkins (в Docker)
  • Автоматизация: Ansible
  • Контейнеризация: Docker
  • Мониторинг: Prometheus (с HTTPS)
  • Визуализация: Grafana (с HTTPS)
  • Экспортер: Python 3.9, Prometheus Client, Requests
  • ОС: Ubuntu 22.04 LTS
  • Контроль версий: Git, GitHub

🔮 Планы по развитию

  • Официальное API Gismeteo v4.
  • Настройка HTTPS для Jenkins.
  • Автоматический деплой экспортера при изменениях в Git (CI/CD).
  • Добавление карты России в дашборд Grafana (Geomap) с цветовой индикацией температуры.
  • Расширение списка городов до 90.
  • Добавление иконок погоды из официального набора Gismeteo.
  • Создание HTML-панели с детальной информацией о погоде.
  • Экспорт дашборда в JSON для версионирования.
  • Добавление уведомлений в Telegram при аномалиях (Alertmanager).
  • Интеграция с Kubernetes.

🤝 Как помочь проекту

  • Поставьте звезду на GitHub.
  • Предложите улучшения через Issues или Pull Requests.
  • Сообщите об ошибках.

© 2026 | DevOps-проект Egorich88 🇷🇺

About

Погода в городах России

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors