Loki

Loki est ingester programme permettant de pouvoir indexer des logs et en collecter au format JSON. Loki ne conserve que les données d’indexation et les extraits de logs ce qui réduit la consommation en ressource du programme. Loki fait partie de l’éco système Grafana donc il s’intègre très bien à cet environnement. Ce qui donne une solution complete pour grafana pour fair de la surveillance de log centralisé.

Schema de fonctionnement Loki

Schema de fonctionnement loki

Installation Loki

Il faut créer une configmap pour y écrire la configuration de loki et qu’elle puisse être chargée ensuite

configmap-loki.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: loki-server-conf
  namespace: monitoring
data:
  local-config.yaml: |
    auth_enabled: false 
    server:
      grpc_listen_port: 9096
      http_listen_port: 3100

    common:
      instance_addr: 127.0.0.1
      path_prefix: /tmp/loki
      storage:
        filesystem:
          chunks_directory: /tmp/loki/chunks
          rules_directory: /tmp/loki/rules
      replication_factor: 1
      ring:
        kvstore:
          store: inmemory

    query_range:
      results_cache:
        cache:
          embedded_cache:
            enabled: true
            max_size_mb: 100

    schema_config:
      configs:
        - from: 2020-10-24
          store: tsdb
          object_store: filesystem
          schema: v13
          index:
            prefix: index_
            period: 24h

Dans la configuration de loki nous précison les port ou il faut écouter donc dans notre cas le 3100 pour faire des requête en http. Ensuite nous avons définis la taille du cache. Et les autres parametres sont les parameters par défaut fournis par Grafana.

Il faut faire un deployment afin de déployer le service

deployment-loki.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loki
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: loki-server
  template:
    metadata:
      labels:
        app: loki-server
    spec:
      containers:
        - name: loki
          image: grafana/loki:2.9.2
          ports:
            - containerPort: 3100
              name: http-loki
              protocol: TCP
          volumeMounts:
            - name: config-volume
              mountPath: /etc/loki
      volumes:
        - name: config-volume
          configMap:
            name: loki-server-conf
            defaultMode: 420

Dans notre deployment pour loki nous avons défini l’image de loki le port d’écoute du conteneur. puis nous avons aussi défini le répertoire ou monter la configmap pour loki.

Maintenant, il faut créer un service réseau pour loki.

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: loki
  namespace: monitoring
spec:
  ports:
    - port: 3100
      protocol: TCP
      targetPort: http-loki
  selector:
    app: loki-server
  sessionAffinity: None
  type: LoadBalancer

Nous précisons au service de router sur le port 3100 du conteneur loki

Configuration de loki

Il faut ajouter la datasource loki dans grafana pour pouvoir faire des requêtes sur les logs.

Datasource Loki

Dans l’url il faut mettre le nom du service de loki et le port d’écoute du service.

Une fois la datasource ajoutée, il est possible de visualisé les logs avec le menu Explore de grafana.

explore-grafana.png