Автор статьи: Рустем Галиев

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 я не могу показывать сами конфиги и скриншоты, я расскажу без данных деталей как я это сделал

Начнем со схемы

Создание репозитория

  • Я создал или выбрал Git-репозиторий, в котором будут храниться конфигурации. Обычно это отдельный репозиторий для управления конфигурацией или уже существующий репозиторий для инфраструктуры.

  1. Добавление JSON-файла в репозиторий

    • Я сохранил JSON-код дашборда в файл, например пусть измененное название будет просто, grafana-dashboard.json, и добавил его в мой Git-репозиторий. Это сделано для того, чтобы все изменения можно было отслеживать и версионировать.

Создание YAML-манифеста для ConfigMap в Kubernetes

  1. Создание манифеста 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": { ... } }
  1. Проверка синтаксиса

    • Я проверил YAML-файл на синтаксические ошибки и убедился, что JSON-код корректен и соответствует структуре, необходимой Grafana.

  2. Почему так: ConfigMap в Kubernetes позволяет хранить конфигурационные данные, такие как JSON-код дашборда, отдельно от самих приложений. Это упрощает управление конфигурацией и обновлениями.

Добавление манифеста в Git-репозиторий

  1. Добавление манифеста в репозиторий

    • Я добавил YAML-файл с ConfigMap в Git-репозиторий, в отдельную папку, kubernetes/configs/. Это позволяет ArgoCD отслеживать и управлять развертыванием этого ресурса.

  2. Коммит и пуш изменений

    • Я сделал коммит изменений и запушил их в удалённый Git-репозиторий. Это обеспечивало актуальность и доступность манифеста для ArgoCD.

Настройка ArgoCD для отслеживания и синхронизации изменений

  1. Создание приложения в ArgoCD

    • Я создал новое приложение в ArgoCD. В интерфейсе ArgoCD я указал Git-репозиторий, ветку и путь к манифестам. Это позволяет ArgoCD отслеживать изменения и автоматически синхронизировать их с Kubernetes-кластером.

  2. Настройка политики синхронизации

    • Я выбрал "Automatic" (Автоматическая) синхронизация, чтобы ArgoCD автоматически применял изменения из Git-репозитория без необходимости ручного вмешательства.

ArgoCD автоматически развертывает ConfigMap и создает дашборды в Grafana

  1. Автоматическое развертывание

    • После настройки ArgoCD, он автоматически развертывал ConfigMap, содержащий JSON-код дашборда, в Kubernetes-кластер. Grafana обнаруживает этот ConfigMap и использует его для создания или обновления дашборда.

  2. Мониторинг развертывания

    • Я проверил в интерфейсе ArgoCD, что развертывание прошло успешно и ConfigMap был применён. Я также проверил логи Grafana, чтобы убедиться, что дашборды были созданы без ошибок.

Проверка и мониторинг дашбордов в Grafana

  1. Проверка дашбордов

    • Я открыл Grafana и проверил, что дашборды отображаются корректно. Убедился, что все панели и визуализации работают как ожидалось.

 
Достаточно просто, а главное — упростило операции мониторинга в нашем проекте.

Best Practice по мониторингу инфраструктуры и отдельных её компонентов: приложения, баз данных, и прочего можно изучить в рамках онлайн-курса «Observability: мониторинг, логирование, трейсинг» под руководством экспертов области.

Комментарии (2)


  1. ktotomskru
    23.07.2024 17:46

    было бы интересно так же узнать, как происходит изменение dashboard. например, один из пользователей решил что-то изменить или добавить (через UI графаны, само собой). как это должно попасть в git и раскататься по инсталляциям? неужели вручную копировать json в git, попутно вычищая привязки к data source? :)


    1. crackpot
      23.07.2024 17:46
      +1

      Не хранить json дашборды внутри ямлов, но как самостоятельный файл в репе, и да, копипаста руками из графаны в файл и потом коммит.

      Data sources аналогично живут в своих json'ах - вообще все настройки графаны делаются через json + env vars и отлично живут в гите со всеми вытекающими плюшками.