{{tag>sysadmin linux logs grafana promtail todo}}
====== 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
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 =====
* https://grafana.com/docs/loki/latest/clients/promtail/
* https://hub.docker.com/r/grafana/promtail
* https://grafana.com/docs/loki/latest/clients/promtail/configuration/
* https://grafana.com/docs/loki/latest/clients/promtail/stages/regex/