Aller au contenu

VictoriaMetrics & Intégration dans Grafana

Présentation de VictoriaMetrics

VictoriaMetrics est une base de données time series open source, compatible avec l'écosystème Prometheus : elle reçoit les métriques en remote_write, se requête en PromQL (et son extension MetricsQL), avec une consommation CPU/RAM et disque réduite. Pour lui envoyer tes métriques, vois Vector ou Prometheus en mode Agent, et une stack complète dans cet article.

Pré-requis

Provider Terraform

Pour la suite du cours je vais te donner l'ensemble du code réaliser avec Terraform. Cela va nous permettre d'amener résilience et robustesse. On sera heureux d'un seul call terraform on puisse retrouver notre cluster en bonne santé :)

Utilisant déjà ArgoCD comme outils pour déploiyer nos helm charts, on va devoir utiliser un provider sous terraform. Je te montre ma configuration que j'utilise, sachant que j'utilise minikube avec un ArgoCD non exposé au net, donc juste appellable en local.

Ici tu peux utiliser soit le traditionnel username:password ou un auth_token généré par ArgoCD avec ton compte admin. On mentionne en context le nom de notre cluster, ainsi que le namespace ou est installé notre argocd-server.

terraform {
  required_providers {
    argocd = {
      source  = "argoproj-labs/argocd"
      version = "7.17.2"
    }
  }
}

variable "argocd_admin_password" {
  type      = string
  sensitive = true
}

provider "argocd" {
  #auth_token                  = ".bjphcGlLZXkiLCJuYmYiOjE3MTQ"
  username                    = "admin"
  password                    = var.argocd_admin_password # ne jamais commiter de mot de passe en clair
  port_forward_with_namespace = "argocd"
  kubernetes {
    config_context = "minikube"
  }
}

Note

Renseigne la variable argocd_admin_password (par exemple via TF_VAR_argocd_admin_password) avec ton mot de passe, qui est dans le secret de ton cluster sous le nom de argocd-initial-admin-secret

Installation

On va installer notre VictoriaMetrics en mode single, c'est une version plus light que la version cluster, qui elle est vraiment dédiée pour des installations qui nécéssite une scalabilité hors-norme.

resource "argocd_application" "victoria_metrics" {
  metadata {
    name      = "victoria-metrics"
    namespace = "argocd"
  }

  spec {

    destination {
      server    = "https://kubernetes.default.svc"
      namespace = "argocd"
    }

    sync_policy {
      automated {
        prune       = false
        self_heal   = true
        allow_empty = true
      }

      sync_options = ["Validate=true"]
      retry {
        limit = "5"
        backoff {
          duration     = "30s"
          max_duration = "2m"
          factor       = "2"
        }
      }
    }

    source {
      repo_url        = "https://victoriametrics.github.io/helm-charts"
      chart           = "victoria-metrics-single"
      target_revision = "0.49.0"

      helm {
        release_name = "victoria-metrics"
        values = yamlencode({
            # CUSTOM VALUES A AJOUTER
        })
      }
    }
  }
}

Ajouter VictoriaMetrics à Grafana

On va devoir pour cela ajouter le plugin victoriametrics-datasource dans Grafana afin de créer une data source propre à VictoriaMetrics. Son identifiant de plugin est victoriametrics-metrics-datasource : installe-le par exemple via GF_INSTALL_PLUGINS=victoriametrics-metrics-datasource.

Tip

VictoriaMetrics étant compatible PromQL, tu peux aussi te passer du plugin et utiliser la data source Prometheus native de Grafana (type = "prometheus"). Le plugin dédié reste utile pour profiter de MetricsQL.

Pré-requis

On va installer le provider grafana afin de faire notre data source as code avec Terraform

Ici on fait simple, notre Grafana n'étant pas exposé, on va simplement faire un port-forward sur le pod de ce service. Je l'expose sur http://localhost:3000/

terraform {
  required_providers {
    grafana = {
      source  = "grafana/grafana"
      version = "4.50.0"
    }
  }
}

provider "grafana" {
  auth = "admin:admin"
  url  = "http://localhost:3000/"
}

Note

Pense à adapter le password que je renseigne avec le tiens, qui est dans le secret de ton cluster sous le nom de grafana

Création de la data source

Nous avons plus qu'a créer notre data source basé sur ce plugin custom. Pensez à mettre votre endpooint vers votre propre cluster VictoriaMetrics.

1
2
3
4
5
resource "grafana_data_source" "vm" {
  type = "victoriametrics-metrics-datasource"
  name = "vm-datasource"
  url  = "http://victoria-metrics-victoria-metrics-single-server.argocd.svc.cluster.local:8428"
}

Nous pouvons désormais avoir accès à nos métriques stocké sur Victoria depuis Grafana !