Я пытаюсь использовать ansible для развертывания файлов конфигурации на сотнях машин, на которых разные машины будут иметь несколько итераций определенных фрагментов конфигурации. В частности, я использую анализатор журнала promtail, и разные машины будут иметь разные местоположения файлов журнала для анализа с разными метками. В идеале я хочу, чтобы конфигурация ansible была довольно простой, чтобы я мог просто использовать запросы на вытягивание для внесения изменений в различные разделы.
Первоначально я собирался использовать group_vars и определить местоположение каждого файла журнала в group_var. Что отлично работает, пока я создаю только одно местоположение журнала. Как только мне нужно несколько местоположений журнала, он ломается, так как у меня будет только одно значение, возвращаемое из group_vars.
Проиллюстрировать.
хосты:
LOGFILE1:
хосты:
приложение[15:16].qa2.example.com
LOGFILE2:
хозяева
приложение[16:17].qa2.example.com
GROUP_VARS/LOGFILE1
GROUP_VARS/LOGFILE2
Я мог бы просто просмотреть каждую группу, а затем добавить вывод в файл конфигурации, но я не вижу способа сделать это с помощью функции шаблона. В идеале я мог бы просто перебрать все местоположения файла журнала, но я не уверен, как это сделать.
Или, может быть, я мог бы использовать внешний файл переменных, а затем использовать какое-то условие, чтобы определить, какие хосты получают какую конфигурацию?
Те же данные в group_vars...
файл: /opt/tomcat/fxcts/logs/gxxss.log
Комп: TX_Tomcat
приложение: Техас
модуль: GXX
pipe_regex: нет
pipe_vars:
- Никто
drop_expression: Нет
Многострочный: Нет
Вот шаблон джиндзя
scrape_configs:
- job_name: {{ модуль }}
конвейер_этапы:
- регулярное выражение:
выражение: {{ pipe_regex }}
- этикетки:
{% для меток в pipe_vars -%}
{{ метки }}:
{% конец для %}
{# Это тест #}
- метка времени:
источник: дата
формат: 2006-01-01 15:00:00.000000
- уронить:
выражение: {{ drop_expression }}
- многострочный:
первая строка: ""
max_wait_time: 3 с
статические_конфигурации:
статические_конфигурации:
- цели:
- локальный хост
этикетки:
приложение: {{приложение}}
хост: {{ ansible_hostname }}
компонент: {{комп.}}
__path__: {{ файл }}
Вот пример реальной конфигурации yaml. Как я уже сказал, разные местоположения журналов могут различаться в зависимости от хоста.
сервер:
http_listen_port: 9080
grpc_listen_port: 0
позиции:
имя файла: /tmp/positions.yaml
клиенты:
- URL-адрес: http://хост:3100/loki/api/v1/push
scrape_configs:
- job_name: система
статические_конфигурации:
- цели:
- локальный хост
этикетки:
работа: варлоги
хост: ${HOSTNAME}
__path__: /var/журнал/*журнал
- job_name: apps_ssi
статические_конфигурации:
- цели:
- локальный хост
этикетки:
работа: сси
хост: ${HOSTNAME}
__path__: /opt/tomcat/ssi/logs/*log
- job_name: apps_fxcts
статические_конфигурации:
- цели:
- локальный хост
этикетки:
работа: fxcts
хост: ${HOSTNAME}
__path__: /opt/tomcat/fxcts/logs/*log
- job_name: журнал
журнал:
json: ложь
макс_возраст: 12 часов
этикетки:
работа: systemd-журнал
хост: ${HOSTNAME}
relabel_configs:
- source_labels: ['__journal__systemd_unit']
target_label: 'единица измерения'