Этот проект представляет собой полностью автоматизированную систему мониторинга погоды. Она разворачивает три виртуальные машины, устанавливает и настраивает на них необходимые сервисы, а также предоставляет готовый дашборд для визуализации температуры в 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-панель, отображающая всю информацию по выбранному городу (температура, ощущение, иконка, описание, влажность, ветер, давление).
- Центральный: 17 городов (Москва, Воронеж, Курск...)
- Северо-Западный: 9 городов (СПб, Калининград, Мурманск...)
- Южный: 10 городов (Краснодар, Ростов-на-Дону, Волгоград...)
- Северо-Кавказский: 7 городов (Ставрополь, Махачкала, Грозный...)
- Приволжский: 16 городов (Казань, Самара, Уфа, Пермь...)
- Уральский: 8 городов (Екатеринбург, Челябинск, Тюмень...)
- Сибирский: 12 городов (Новосибирск, Красноярск, Омск...)
- Дальневосточный: 11 городов (Владивосток, Хабаровск, Якутск...)
- ВСЕГО: 90 городов
| Параметр | Значение |
|---|---|
| Количество городов | 90 |
| Интервал обновления данных | 5 дней |
| Метрики на город | 7 |
| Общее число временных рядов | > 600 |
Готовый JSON-файл дашборда находится в папке grafana/dashboards/russia-weather-full.json. Для импорта:
- Откройте Grafana → Create → Import
- Загрузите JSON-файл или вставьте его содержимое
- Выберите источник данных Prometheus
- Нажмите Import
- Клонировать репозиторий:
git clone https://github.com/Egorich88/russia-weather.git cd russia-weather - Запустить инфраструктуру:
vagrant up
- Настроить Jenkins:
- Открыть
http://<jenkins-vm-ip>:8080, ввести пароль из консоли, установить плагины, создать пользователя. - Добавить в Jenkins SSH-ключ (
jenkins-github-ssh) для доступа к репозиторию. - Добавить токен Gismeteo как секретный текст (
gismeteo-token) в Jenkins Credentials.
- Открыть
- Запустить деплой:
- В Jenkins создать задачу
weather-exporter-deployс Pipeline из SCM (указав репозиторий и веткуmain). Jenkinsfile уже есть в репозитории. - Убедиться, что включён триггер Poll SCM (например,
H/5 * * * *).
- В Jenkins создать задачу
- Запустить деплой Prometheus и Grafana:
- В Jenkins создать отдельную задачу (или выполнить вручную) с помощью Ansible-плейбуков для настройки Prometheus и Grafana.
- Проверить работу:
- Открыть Grafana по адресу
https://<grafana-vm-ip>:3000(логинadmin, парольadmin). - Убедиться, что дашборд отображает данные для 90 городов, карта работает, и в таблицах видны иконки погоды.
- Открыть Grafana по адресу
| Сервис | Адрес | Логин | Пароль | Примечание |
|---|---|---|---|---|
| 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 🇷🇺

