Tôi đang cố gắng sử dụng ansible để triển khai các tệp cấu hình cho hàng trăm máy trong đó các máy khác nhau sẽ có nhiều lần lặp lại các đoạn cấu hình cụ thể. Cụ thể là tôi đang sử dụng trình phân tích cú pháp nhật ký promtail và các máy khác nhau sẽ có các vị trí tệp nhật ký khác nhau để phân tích cú pháp với các nhãn khác nhau. Lý tưởng nhất là tôi muốn giữ cấu hình ansible khá đơn giản để tôi chỉ có thể sử dụng các yêu cầu kéo để thay đổi các phần khác nhau.
Ban đầu, tôi sẽ sử dụng group_vars và xác định từng vị trí tệp nhật ký trong group_var. Điều này hoạt động tốt miễn là tôi chỉ xây dựng một vị trí nhật ký duy nhất. Khi tôi cần nhiều vị trí nhật ký, nó sẽ bị hỏng vì tôi sẽ chỉ có một giá trị được trả về từ group_vars.
Để minh họa.
máy chủ:
ĐĂNG NHẬP1:
máy chủ:
ứng dụng[15:16].qa2.example.com
ĐĂNG NHẬP2:
máy chủ
ứng dụng[16:17].qa2.example.com
GROUP_VARS/LOGFILE1
GROUP_VARS/LOGFILE2
Tôi chỉ có thể tìm cách lặp qua từng nhóm và sau đó nối đầu ra vào tệp cấu hình nhưng tôi không thấy cách nào để thực hiện điều đó với chức năng mẫu. Lý tưởng nhất là tôi chỉ có thể lặp qua tất cả các vị trí tệp nhật ký nhưng tôi không chắc cách thực hiện.
Hoặc có lẽ tôi có thể sử dụng một tệp biến bên ngoài và sau đó sử dụng một loại điều kiện nào đó để xác định máy chủ nào có cấu hình nào?
Cùng một dữ liệu trong nhóm_vars...
tập tin: /opt/tomcat/fxcts/logs/gxxss.log
biên dịch: TX_Tomcat
ứng dụng: TX
mô-đun: GXX
đường ống_regex: Không có
đường ống_vars:
- Không có
drop_expression: Không có
Đa tuyến: Không có
Đây là mẫu jinja
cạo_configs:
- tên_công việc: {{ mô-đun }}
đường ống_giai đoạn:
- biểu thức chính quy:
biểu thức: {{pipeline_regex}}
- nhãn:
{% cho các nhãn trong pipe_vars -%}
{{ nhãn }}:
{% endfor %}
{# Đây là một bài kiểm tra #}
- dấu thời gian:
nguồn: ngày
định dạng: 2006-01-01 15:00:00.000000
- rơi vãi:
biểu thức: {{ drop_expression }}
- đa tuyến:
dòng đầu tiên: ""
max_wait_time: 3s
tĩnh_config:
tĩnh_config:
- chỉ tiêu:
- máy chủ cục bộ
nhãn:
ứng dụng: {{ ứng dụng }}
máy chủ lưu trữ: {{ ansible_hostname }}
thành phần: {{ comp }}
__path__: {{ tập tin }}
Đây là một ví dụ về cấu hình yaml thực tế. Như tôi đã nói, các vị trí nhật ký khác nhau có thể khác nhau tùy theo máy chủ.
người phục vụ:
http_listen_port: 9080
grpc_listen_port: 0
vị trí:
tên tệp: /tmp/positions.yaml
khách hàng:
- url: http://host:3100/loki/api/v1/push
cạo_configs:
- job_name: hệ thống
tĩnh_config:
- chỉ tiêu:
- máy chủ cục bộ
nhãn:
công việc: varlog
máy chủ: ${HOSTNAME}
__path__: /var/log/*log
- job_name: apps_ssi
tĩnh_config:
- chỉ tiêu:
- máy chủ cục bộ
nhãn:
công việc: chị
máy chủ: ${HOSTNAME}
__path__: /opt/tomcat/ssi/logs/*log
- job_name: apps_fxcts
tĩnh_config:
- chỉ tiêu:
- máy chủ cục bộ
nhãn:
công việc: fxcts
máy chủ: ${HOSTNAME}
__path__: /opt/tomcat/fxcts/logs/*log
- job_name: tạp chí
tạp chí:
json: sai
max_age: 12h
nhãn:
công việc: systemd-journal
máy chủ: ${HOSTNAME}
nhãn lại_configs:
- source_labels: ['__journal__systemd_unit']
target_label: 'đơn vị'