![](https://habrastorage.org/getpro/habr/upload_files/7f2/e9b/b59/7f2e9bb595a7258e40c4312b35564de8.jpg)
Автор статьи: Рустем Галиев
IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM
Привет, Хабр!
В современном мире DevOps автоматизация и контроль версий играют ключевую роль в управлении инфраструктурой. Одной из важнейших задач является эффективное развёртывание мониторинговых решений, таких как Grafana. В этой статье мы рассмотрим, как использовать ArgoCD для автоматизации деплоя дашбордов Grafana.
В эпоху DevOps автоматизация и контроль версий становятся ключевыми элементами управления инфраструктурой. Эффективное развёртывание мониторинговых решений, таких как Grafana и Prometheus, жизненно важно для своевременного реагирования на изменения в системе. В этой статье мы подробно рассмотрим подход Monitoring as Code (MaC), который позволяет управлять мониторингом с помощью конфигурационных файлов, обеспечивая гибкость и надёжность.
Как работает Monitoring as Code с Grafana
JSON-файлы дашбордов: В Grafana дашборды можно экспортировать в формате JSON. Этот JSON-код описывает структуру дашборда, панели, метрики, источники данных и другие настройки. В MaC этот JSON-код хранится в репозитории Git.
Конфигурационные файлы: Помимо дашбордов, вы также можете описывать конфигурации источников данных, алерты и другие аспекты мониторинга как код. Это может быть выполнено с помощью YAML или JSON файлов, которые описывают, как Grafana и другие инструменты мониторинга должны быть настроены.
GitOps Workflow: GitOps — это метод управления инфраструктурой и приложениями с помощью Git как источника истины. В GitOps вы храните все конфигурации и манифесты в Git-репозитории и используете автоматизированные инструменты (например, ArgoCD) для синхронизации изменений в кластере или окружении.
Деплой через GitOps: Когда вы добавляете или обновляете файлы конфигурации дашбордов и мониторинга в вашем Git-репозитории, ArgoCD или другой GitOps инструмент автоматически применяет эти изменения в вашей среде. Это может включать обновление ConfigMap в Kubernetes, развертывание новых дашбордов в Grafana, настройку источников данных и так далее.
Почему лучше всего деплоить дашборды через GitOps
Источники истины: Храня конфигурации мониторинга в Git, вы создаете единый источник истины. Это позволяет отслеживать изменения, видеть историю изменений и понимать, как и почему конфигурации изменялись.
Версионирование: Git автоматически версионирует все изменения в конфигурациях. Это упрощает откат к предыдущим версиям в случае проблем или необходимости анализа изменений.
Автоматическое развертывание: С GitOps инструменты, такие как ArgoCD, вы можете автоматизировать процесс развертывания и обновления дашбордов. Это снижает вероятность человеческой ошибки и ускоряет процесс применения изменений.
Консистентность: GitOps гарантирует, что изменения, внесенные в конфигурацию, автоматически применяются ко всем средам, будь то тестовая, staging или продакшн. Это помогает поддерживать консистентность в различных окружениях.
Обратная связь: Интеграция с системами CI/CD позволяет интегрировать тестирование и проверку конфигураций мониторинга. Это обеспечивает обратную связь о том, как изменения влияют на мониторинг и дашборды до их применения.
Контроль доступа: Git предоставляет механизмы управления доступом и аудит. Вы можете использовать права доступа Git для контроля, кто может изменять конфигурации, а также отслеживать, кто и когда сделал изменения.
Управление конфигурацией: Управление мониторингом как кодом упрощает управление сложными конфигурациями. Это позволяет централизованно управлять и поддерживать мониторинг на больших масштабах.
Масштабируемость: Когда ваша инфраструктура растет, вы можете легко масштабировать свои конфигурации мониторинга, используя те же GitOps принципы. Обновления могут быть автоматически применены ко всем новым компонентам или сервисам.
Давайте я расскажу, как я это делал, т.к. в рамках NDA я не могу показывать сами конфиги и скриншоты, я расскажу без данных деталей как я это сделал
Начнем со схемы
![](https://habrastorage.org/getpro/habr/upload_files/e81/617/253/e81617253a83c8af678464017a06a609.png)
Создание репозитория
Я создал или выбрал Git-репозиторий, в котором будут храниться конфигурации. Обычно это отдельный репозиторий для управления конфигурацией или уже существующий репозиторий для инфраструктуры.
Добавление JSON-файла в репозиторий
Я сохранил JSON-код дашборда в файл, например пусть измененное название будет просто, grafana-dashboard.json, и добавил его в мой Git-репозиторий. Это сделано для того, чтобы все изменения можно было отслеживать и версионировать.
Создание YAML-манифеста для ConfigMap в Kubernetes
Создание манифеста ConfigMap
Я создал YAML-файл для ConfigMap, который будет содержать JSON-код дашборда. В этом файле я описал ConfigMap, указав имя и содержимое JSON. Вот пример манифеста:
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-dashboard
namespace: <YOUR-NAMESPACE>
labels:
grafana_dashboard: "1"
data:
dashboard.json: |
{ "dashboard": { ... } }
Проверка синтаксиса
Я проверил YAML-файл на синтаксические ошибки и убедился, что JSON-код корректен и соответствует структуре, необходимой Grafana.
Почему так: ConfigMap в Kubernetes позволяет хранить конфигурационные данные, такие как JSON-код дашборда, отдельно от самих приложений. Это упрощает управление конфигурацией и обновлениями.
Добавление манифеста в Git-репозиторий
Добавление манифеста в репозиторий
Я добавил YAML-файл с ConfigMap в Git-репозиторий, в отдельную папку, kubernetes/configs/. Это позволяет ArgoCD отслеживать и управлять развертыванием этого ресурса.
Коммит и пуш изменений
Я сделал коммит изменений и запушил их в удалённый Git-репозиторий. Это обеспечивало актуальность и доступность манифеста для ArgoCD.
Настройка ArgoCD для отслеживания и синхронизации изменений
Создание приложения в ArgoCD
Я создал новое приложение в ArgoCD. В интерфейсе ArgoCD я указал Git-репозиторий, ветку и путь к манифестам. Это позволяет ArgoCD отслеживать изменения и автоматически синхронизировать их с Kubernetes-кластером.
Настройка политики синхронизации
Я выбрал "Automatic" (Автоматическая) синхронизация, чтобы ArgoCD автоматически применял изменения из Git-репозитория без необходимости ручного вмешательства.
ArgoCD автоматически развертывает ConfigMap и создает дашборды в Grafana
Автоматическое развертывание
После настройки ArgoCD, он автоматически развертывал ConfigMap, содержащий JSON-код дашборда, в Kubernetes-кластер. Grafana обнаруживает этот ConfigMap и использует его для создания или обновления дашборда.
Мониторинг развертывания
Я проверил в интерфейсе ArgoCD, что развертывание прошло успешно и ConfigMap был применён. Я также проверил логи Grafana, чтобы убедиться, что дашборды были созданы без ошибок.
Проверка и мониторинг дашбордов в Grafana
Проверка дашбордов
Я открыл Grafana и проверил, что дашборды отображаются корректно. Убедился, что все панели и визуализации работают как ожидалось.
Достаточно просто, а главное — упростило операции мониторинга в нашем проекте.
Best Practice по мониторингу инфраструктуры и отдельных её компонентов: приложения, баз данных, и прочего можно изучить в рамках онлайн-курса «Observability: мониторинг, логирование, трейсинг» под руководством экспертов области.