hadret.rsyslog
Ansible角色:Rsyslog
在Debian/Ubuntu服务器上安装和配置rsyslog。
此角色从官方APT仓库(在Debian上)或官方PPA(在Ubuntu上)安装和配置最新版本的rsyslog。默认情况下,它将覆盖/etc/rsyslog.conf
和/etc/rsyslog.d/50-default.conf
的内容。
需求
无。
角色变量
以下是可用变量及其默认值(如在defaults/main.yml中所示):
rsyslog_rules: []
一个rsyslog规则的数组。每个条目将创建一个名为$priority-$rule_name.conf
的单独配置文件。请确保查看defaults/main.yml
中的注释示例,了解所有可用选项。
rsyslog_rules:
- rule_name: "remote-udp"
priority: 99
ruleset: |
module(load="omfwd")
action(type="omfwd" target="central.server.local" port="514" protocol="udp")
state: "present"
这是一个完整的rsyslog_rules
条目的示例。请注意ruleset
的块声明使用了|
。从这里开始是裸rsyslog配置语法。
另一种定义rsyslog_rules
的方法是使用rsyslog_extra_conf_options
。这将在主的/etc/rsyslog.conf
配置文件中添加额外选项,而不是在/etc/rsyslog.d
中创建新的文件。
rsyslog_extra_conf_options: |
module(load="imudp")
input(type="imudp" port="514")
同样,这里也使用了|
作为块声明,代码本身是裸rsyslog配置语法。它还可以与rsyslog_remove_default_rules: true
结合使用,确保/etc/rsyslog.d/
为空。
此外,目前有三个预配置的rsyslog规则。它们都有特殊的专用模板(templates/*.conf.j2
)。其中只有一个是默认启用的,称为“default”。它覆盖/etc/rsyslog.d/50-default.conf
文件的定义。通过指定state: "absent"
可以轻松禁用它。
rsyslog_rule_default:
rule_name: "default"
priority: 50
template: "default.conf.j2"
第二个是docker
,用于处理在给定主机上运行的Docker容器的日志。它在/etc/rsyslog.d/20-docker.conf
文件中定义。
rsyslog_rule_docker:
rule_name: "docker"
priority: 20
template: "docker.conf.j2"
rsyslog_rule_docker_tag_all: true
它将在/var/log/docker
中创建日志文件,并按$CONTAINER_NAME.log
的命名规则放入其中。它预期$syslogtag
的名称中将包含docker/
(请查看下面的示例),否则会将所有日志推送到/var/log/docker/no_tag.log
。此外,rsyslog_rule_docker_tag_all
可以在给定主机上运行多个容器时启用,以允许在/var/log/docker/all.log
中聚合来自所有容器的日志(注意:这将加倍容器日志所需的空间)。您可以查看我的hadret.containers角色,以获取启用syslog支持的容器定义示例。
containers:
- name: cadvisor
image: "google/cadvisor:latest"
state: started
log_driver: journald
log_options:
tag: docker/cadvisor
如今,journald
会自动由rsyslog接收。
最后但同样重要的是处理remote
。我想创建一个开箱即用的解决方案,用于处理客户端和服务器部分。远程日志记录目前非常原始和基础,但它可以通过最小配置开箱即用。
rsyslog_rule_remote:
rule_name: "remote"
role: server
priority: 99
template: "remote.conf.j2"
ruleset_name: "remote"
必须指定至少一种远程协议(relp
/tcp
/udp
)(注意:没有默认值,仅指定rsyslog_rule_remote
会失败)。服务器端的处理方式需要定义ruleset_name
,因为它是执行实际日志写入(通过omfile
)和应用预定义模板的ruleset
。这些配置尽可能与“普通”规则相似,预定义的输出有:auth.log
、syslog.log
、rsyslog.log
、kern.log
和mail.log
。
rsyslog_rule_remote_relp:
port: 514
当前只有relp
支持TLS设置。
rsyslog_rule_remote_relp:
address: 0.0.0.0
port: 514
tls: true
tls_cacert: "/tls-certs/ca.pem"
tls_mycert: "/tls-certs/cert.pem"
tls_myprivkey: "/tls-certs/key.pem"
tls_authmode: "fingerprint"
tcp
和udp
目前仅允许指定address
(在服务器模式下可选)、target
(在客户端模式下必需)和port
(在两种模式下均必需)。
rsyslog_rule_remote_tcp:
address: 0.0.0.0
port: 514
rsyslog_rule_remote_udp:
address: 0.0.0.0
port: 514
请注意,您可以定义三者,具有不同的地址和端口(但每个只需一次)。所有配置默认将放在/etc/rsyslog.d/99-remote.conf
中(服务器和客户端)。当前不可能仅使用rsyslog_rule_remote_relp
使单台机器同时充当服务器和客户端,但可以通过rsyslog_extra_conf_options
或rsyslog_rules
指定额外的规则。
rsyslog_rule_remote:
rule_name: "server"
role: server
priority: 99
template: "remote.conf.j2"
ruleset_name: "server"
rsyslog_rule_remote_udp:
port: 514
rsyslog_rules:
- rule_name: "client"
priority: 99
ruleset: |
module(load="omfwd")
action(type="omfwd" target="central.server.local" port="514" protocol="tcp")
注意:这三个额外的预配置rsyslog规则是字典,而不是数组。只有rsyslog_rules
允许多个规则定义。
扩展和替换模板
我知道并非所有内容都通过变量覆盖,并且有大量不同的配置选项。这就是为何我对所有规则使用模板的原因,这使得扩展、块替换(通过Jinja2模板继承)或完全模板交换变得简单,以满足我未考虑到的需求。
rsyslog_conf_template: "rsyslog.conf.j2"
rsyslog_rules_template: "rules.conf.j2"
它也可以在每个规则的基础上进行更改。
rsyslog_rule_default:
rule_name: "default"
priority: 50
template: "{{ playbook_dir }}/templates/custom-default.conf.j2"
rsyslog_rule_docker:
rule_name: "docker"
priority: 20
template: "{{ playbook_dir }}/templates/custom-docker.conf.j2"
rsyslog_rules:
- rule_name: "remote-udp"
priority: 90
template: "{{ playbook_dir }}/templates/custom-udp.conf.j2"
- rule_name: "remote-tcp"
priority: 91
template: "{{ playbook_dir }}/templates/custom-tcp.conf.j2"
示例:扩展主配置文件中的模块块
rsyslog_conf_template
必须设置为指向您的剧本目录中的新文件。
rsyslog_conf_template: "{{ playbook_dir }}/templates/custom-rsyslog.conf.j2"
自定义模板文件必须相对于您的playbook.yml
放置。
{% extends 'roles/external/hadret.rsyslog/templates/rsyslog.conf.j2' %}
{% block modules %}
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
{% endblock %}
上述示例替换/扩展了主rsyslog配置文件中的modules
块。
依赖关系
无。
示例剧本
hosts: all
roles:
- hadret.rsyslog
许可
MIT。
作者
该角色由Filip Chabik于2019年组装。