Aller au contenu

VictoriaLogs & Intégration dans Grafana

Présentation de VictoriaLogs

VictoriaLogs est la base de données de logs open source de l'équipe VictoriaMetrics. Elle stocke tes logs avec très peu de ressources, se requête avec son langage LogsQL, et ingère les logs via de nombreux protocoles (Elasticsearch bulk, Loki push, OpenTelemetry, syslog...). Côté collecte, tu peux par exemple lui envoyer tes logs avec Vector. Je te montre aussi 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 VictoriaLogs 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_logs" {
  metadata {
    name      = "victoria-logs"
    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-logs-single"
      target_revision = "0.13.10"

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

Ajouter VictoriaLogs à Grafana

On va devoir pour cela ajouter le plugin victorialogs-datasource dans Grafana afin de créer une data source propre à VictoriaLogs. Son identifiant de plugin est victoriametrics-logs-datasource : installe-le par exemple via la variable d'environnement GF_INSTALL_PLUGINS=victoriametrics-logs-datasource de ton Grafana.

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 VictoriaLogs.

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

Nous pouvons désormais avoir accès à nos logs stockés dans VictoriaLogs depuis Grafana !