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

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: мониторинг, логирование, трейсинг» под руководством экспертов области.

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


  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 и отлично живут в гите со всеми вытекающими плюшками.


      1. vadav13
        23.07.2024 17:46
        +1

        Есть самописный костылек на гошке, cronjob которого следит за изменением дашбордов в графане и при изменении сам пушит в гит


  1. Bagration
    23.07.2024 17:46
    +1

    Есть либа https://github.com/grafana/grafonnet, которая позволяет генерировать json для дашбордов графаны. Не все возможности поддерживаются (год назад не хватало разных источников данных), но, тем не менее, если вам хватит ее возможностей, можно сделать честный IaC. Даже алерты и прочий мониторинг добавили, вроде