我很难弄清楚如何使用for
遍历字典来为rsyslog配置构建模板文件(Jinja2)。方案是我有一个集中的rsyslog服务器,该服务器接受来自各种rsyslog客户端的日志。
我以这种方式构建了一个默认的dicts文件:
rsyslog_client_groups:
caprica: [ '"10.5.10.111"' , '"10.5.10.112"', '"10.5.10.11"', '"10.5.10.12"', '"10.5.12.21"' ]
apache: [ '"10.5.13.24"' , '"10.5.13.25"' , '"10.5.13.26"' ]
rsyslog_client_destinations:
apache:
- var: '$syslogtag'
contains: 'apache-access:'
destination: '/logs/web/access.log'
- var: '$syslogtag'
contains: 'apache-error:'
destination: '/logs/web/error.log'
caprica:
- destination: '/logs/mail/mail.log'
我需要编写一个模板文件(使用for
),将字典rsyslog_client_groups
和rsyslog_client_destinations
组合在一起,以便最终在集中式日志服务器上以这种方式创建rsyslog配置文件:
if $fromhost-ip == [ "10.5.10.111", "10.5.10.112", "10.5.10.11", "10.5.10.12", "10.5.12.21" ] then /logs/mail/mail.log
& stop
if $fromhost-ip == [ "10.5.13.24", "10.5.13.25", "10.5.13.26" ] then {
if $syslogtag contains 'apache-access:' then /logs/web/access.log
& stop
else if $syslogtag contains 'apache-error:' then /logs/web/error.log
& stop
else /logs/web/other.log
& stop
}
UPDATE:
以下代码最接近我完成的任务:
{% for k, v in syslog_clients.iteritems() %}
if $fromhost-ip == {{ v }} then /logs/{{ k }}/{{ k }}.log
& stop
{% endfor %}
由于无法根据需要匹配的rsyslog_client_groups
字符串({{1}中的)来设置contains
中日志的正确目的地,因此无法达到最终结果})