Încerc să folosesc ansible pentru a implementa fișiere de configurare pe sute de mașini în care diferite mașini vor avea mai multe iterații ale fragmentelor de configurare specifice. În mod specific, folosesc analizatorul de jurnal promtail și diferite mașini vor avea locații diferite ale fișierelor de jurnal pentru a le analiza cu etichete diferite. În mod ideal, vreau să păstrez configurația ansible destul de simplu, astfel încât să pot folosi cererile de extragere pentru a face modificări diferitelor secțiuni.
Inițial, urma să folosesc group_vars și să definesc fiecare locație a fișierului jurnal în group_var. Ceea ce funcționează bine atâta timp cât construiesc doar o singură locație de jurnal. Odată ce am nevoie de mai multe locații de jurnal, se întrerupe deoarece voi avea o singură valoare returnată de la group_vars.
Pentru a ilustra.
gazde:
LOGFILE1:
gazde:
aplicație[15:16].qa2.example.com
LOGFILE2:
gazde
aplicație[16:17].qa2.example.com
GROUP_VARS/LOGFILE1
GROUP_VARS/LOGFILE2
Aș putea să caut să iterez prin fiecare grup și apoi să atașez rezultatul la fișierul de configurare, dar nu văd o modalitate de a face asta cu funcția șablon. În mod ideal, aș putea să repet prin toate locațiile fișierelor jurnal, dar nu sunt sigur cum să fac asta.
Sau poate aș putea folosi un fișier variabil extern și apoi să folosesc un anumit fel de condițional pentru a determina care gazde primesc ce configurație?
Aceleași date în grupul_vars...
fișier: /opt/tomcat/fxcts/logs/gxxss.log
comp: TX_Tomcat
aplicație: TX
modul: GXX
pipeline_regex: Nici unul
pipeline_vars:
- Nici unul
drop_expression: Niciuna
Multilinie: niciuna
Iată șablonul jinja
scrape_configs:
- job_name: {{ module }}
pipeline_stages:
- regex:
expresie: {{ pipeline_regex }}
- etichete:
{% pentru etichete în pipeline_vars -%}
{{ etichete }}:
{% endfor %}
{# Acesta este un test #}
- timestamp-ul:
sursa: data
format: 2006-01-01 15:00:00.000000
- cădere brusca:
expresie: {{ drop_expression }}
- multilinie:
prima linie: ""
max_wait_time: 3s
static_configs:
static_configs:
- tinte:
- gazdă locală
etichete:
aplicație: {{ aplicație }}
gazdă: {{ ansible_hostname }}
componentă: {{ comp }}
__path__: {{ fișier }}
Iată o mostră de configurație reală yaml. După cum am spus, diferitele locații ale jurnalului pot varia în funcție de gazdă.
Server:
http_listen_port: 9080
grpc_listen_port: 0
pozitii:
nume de fișier: /tmp/positions.yaml
clienti:
- url: http://host:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- tinte:
- gazdă locală
etichete:
job: varlogs
gazdă: ${HOSTNAME}
__cale__: /var/log/*log
- job_name: apps_ssi
static_configs:
-tinte:
- gazdă locală
etichete:
job: ssi
gazdă: ${HOSTNAME}
__path__: /opt/tomcat/ssi/logs/*log
- job_name: apps_fxcts
static_configs:
- tinte:
- gazdă locală
etichete:
job: fxcts
gazdă: ${HOSTNAME}
__path__: /opt/tomcat/fxcts/logs/*log
- job_name: journal
jurnal:
json: fals
varsta maxima: 12 ore
etichete:
job: systemd-journal
gazdă: ${HOSTNAME}
relabel_configs:
- etichete_sursă: ['__journal__systemd_unit']
target_label: „unitate”