Dans le billet précédent, je vous montrais comment remonter les logs de k3s
dans prometheus avec loki. Comme pour la
surveillance, j'aimerais aussi centraliser les logs des serveurs Linux où
tournent mes applications sur des machines virtuelles avec libvirt
.
Installation de promtail
Comme d'habitude j'ai pris la documentation du produit et j'ai écrit le playbook ansible en conséquence. J'ai géré le changement de version.
- hosts: libvirt
gather_facts: yes
become: true
vars:
promtail_version: 2.4.1
loki_url: https://loki.robert.local/loki/api/v1/push
tasks:
- name: Create group promtail
ansible.builtin.group:
name: promtail
state: present
- name: Create user promtail
ansible.builtin.user:
name: promtail
groups:
- promtail
- systemd-journal
state: present
- name: Get actual promtail version
command: /usr/local/bin/promtail-linux-amd64 --version
register: actual_promtail_version
ignore_errors: true
- name: stop promtail service
ansible.builtin.service:
name: promtail
state: stopped
when: promtail_version not in actual_promtail_version.stdout
ignore_errors: true
- name: Install Promtail
ansible.builtin.unarchive:
src: "https://github.com/grafana/loki/releases/download/v{{ promtail_version }}/promtail-linux-amd64.zip"
dest: /usr/local/bin/
mode: 0755
owner: root
group: root
remote_src: yes
when: promtail_version not in actual_promtail_version.stdout
- name: Create service
ansible.builtin.copy:
src: templates/promtail.service
dest: /etc/systemd/system/
owner: root
group: root
mode: 0644
- name: Create Promtail config
ansible.builtin.template:
src: templates/promtail-config.yml.j2
dest: /etc/promtail.yml
owner: root
group: root
mode: 0644
- name: set acl to /var/log
ansible.posix.acl:
path: /var/log
recursive: true
permissions: rX
entity: promtail
etype: user
state: present
- name: touch positions tmp file
ansible.builtin.file:
path: /tmp/positions.yaml
owner: promtail
group: promtail
mode: 0600
- name: Start promtail service
ansible.builtin.service:
name: promtail
state: restarted
enabled: true
Quelques explications :
la version à installer se trouve dans la variable
promtail_version
l'adresse du serveur loki qui se trouve dans k3s est indiqué dans la variable
loki_url
. Il faudra créer un ingress comme pour prometheus :apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/frontend-entry-points: http,https
traefik.ingress.kubernetes.io/redirect-entry-point: https
traefik.ingress.kubernetes.io/redirect-permanent: "true"
name: prometheus-ingress
namespace: prometheus
spec:
rules:
- host: loki.robert.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: loki
port:
number: 3100
tls:
- hosts:
- loki.robert.local
secretName: wildcard-tls-certOn créé le user/group promatail
On récupère la version installée (ou pas)
Si on a une nouvelle version alors on l'installe :
- stop du service
- téléchargement de la version
On créé le service
On créé la configuration
On change les droits sur le fichier temporaire positions.yml (le service avec le user promtail)
On rédemarre le service
Vérification des logs dans Grafana
Maintenant que tout est en place, il suffit de vérifier que dans loki nous retrouvions bien la trace des node_name devbox2 et devbox3 (les labels défini dans la configuration de promtail).
Explorer > Loki > Log Browser > Node_Name
On sélectionne devbox3
> Show Logs
Voilà toutes les logs de mon home lab devops sont consultables via loki.
J'ai déposé le code sur le projet infra as code du home lab. Pour lancer le playbook :
ansible-playbook -i inventory/hosts playbooks/install-promtail.yml