hadret.rsyslog

Ansible角色:Rsyslog

CI

在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.logsyslog.logrsyslog.logkern.logmail.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"

tcpudp目前仅允许指定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_optionsrsyslog_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年组装。

关于项目

Rsyslog installation and configuration for Ubuntu/Debian.

安装
ansible-galaxy install hadret.rsyslog
许可证
mit
下载
12.4k
拥有者
Vegetarian, skeptic & Linux SysAdmin (: