Outils pour utilisateurs

Outils du site


sysadmin:linux:logs:promtail

Promtail

Promtail est un agent. Il scrute les fichiers de logs et communique les changements à la base Loki.

Installation via Docker

Télécharger l'image Docker:

docker image pull grafana/promtail:2.3.0

Fichier de configuration

promtail-config.yaml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log

Depuis les versions 1.6 les images sont configurées pour s'executer avec l'UID 1001. Si l'utilisateur a un UID différents il peut spécifier l'UID a utiliser via l'argument --user de la commande docker run.

docker run -v $(pwd):/mnt/config -v /var/log:/var/log grafana/promtail:2.3.0 -config.file=/mnt/config/promtail-config.yaml

Pipeline

Le pipeline est le processus permettant de transformer les données entrantes dans promtail avant leur injection dans Loki. Le pipeline peut agir sur l'enregistrement, les labels et le timestamp associé. Un pipeline se compose d'étapes successives (stages):

  • Les analyses (parsing stages) chargées d'extraire de la ligne les données ensuite disponibles pour les étapes suivantes.
  • Les transformations (transform stages) modifient les données extraites précédemment.
  • Les actions (action stages) peuvent comprendre:
    • Ajouter/modifier des labels existants à la ligne de log;
    • Modifier le timestamp;
    • Modifier le contenu de la ligne de log;
    • Créer une métrique basée sur les données extraites.
  • Les filtres (filtering stages) pour appliquer un sous ensembles d'étapes ou écarter des enregistrement sous certaines conditions.

D'ordinaire le pipeline commence avec une étape d'analyse basée sur une regex pour extraire les données de la ligne. Puis une série étapes de type action comme la création de labels

Exemple

On souhaite utiliser promtail pour injecter le journal d'événement produit par UFW. Les logs d'UFW sont de la forme:

Jan 22 18:56:24 localhost kernel: [29221.074606] [UFW BLOCK] IN= OUT=veth4db71c3 SRC=fe80:0000:0000:0000:c0dc:0eff:feee:01b7 DST=ff02:0000:0000:0000:0000:0000:0000:00fb LEN=93 TC=0 HOPLIMIT=255 FLOWLBL=922644 PROTO=UDP SPT=5353 DPT=5353 LEN=53
Jan 22 19:23:11 localhost kernel: [30828.656403] [UFW ALLOW] IN= OUT=br_webmon SRC=192.168.101.1 DST=192.168.101.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63526 DF PROTO=TCP SPT=35150 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0

On cherche ici à produire un label du type action=“ALLOW” à partir d'une ligne de log contenant le texte [UFW ALLOW] ou action=“BLOCK” à partir d'une ligne contenant [UFW BLOCK].

Troubleshooting

Après modification du fichier de configuration pour ajouter un pipeline, le redémarrage du service promtail échoue, le message d'erreur retourné:

romtail_1       | level=error ts=2022-01-22T20:25:00.288750107Z caller=main.go:115 msg="error creating promtail" error="failed to make file target manager: pipeline stage must contain only one key"
Attention à l'indentation dans le fichier de configuration: 4 espaces sous match

Références

sysadmin/linux/logs/promtail.txt · Dernière modification : 2022/12/08 22:02 de yoann