sansible.rsyslog

Rsyslog

主分支: 构建状态 开发分支: 构建状态

此角色用于安装 rsyslog v8 进行日志传输。

有关 rsyslog 的更多信息,请访问 rsyslog 文档

安装与依赖

要安装,请运行 ansible-galaxy install sansible.rsyslog 或将以下内容添加到您的 roles.yml

- name: sansible.rsyslog
  version: v3.0

然后运行 ansible-galaxy install -p ./roles -r roles.yml

标签

此角色使用两个标签:buildconfigure

  • build - 安装 Rsyslog 及其所有依赖项。

内置日志配置

包含多个内置配置,用于将日志文件发送到 Logstash,这些内置配置针对特定日志文件格式设计,始终以 JSON 格式输出,您可以在 defaults/main.yml 文件中的 builtin_configs 下查看每个内置处理程序的示例设置。

Syslog 文件

默认情况下,syslog 消息以 JSON 格式发送,不需要额外配置。

Syslog 消息以以下格式发送:

  • type - 始终为 syslog
  • host - 来源机器的主机名
  • timestamp - RFC-3339 格式的日期
  • version - 对于 JSON 日志始终为 2
  • role - 这是 rsyslog 角色配置中的 app_name 字段
  • message - 日志行本身
  • priority - syslog 严重性编号
  • program - 生成消息的服务名称
  • facility - syslog facility
  • severity - syslog 严重性名称
{
  "type": "syslog",
  "host": "192.168.1.1",
  "timestamp": "2017-10-21T14:29:30.739200+00:00",
  "@version": "2",
  "role": "some_application",
  "message": "发生了某事",
  "priority": "3",
  "program": "some-local-service",
  "facility": "daemon",
  "severity": "错误"
}

认证日志文件

sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true

发送认证和 authpriv 器消息,使用与 Syslog 消息相同的模板,type 字段设置为 authlog:

{
  "type": "authlog",
  "host": "192.168.1.1",
  "timestamp": "2018-01-09T10:45:01.117615+00:00",
  "@version": "2",
  "role": "some_application",
  "message": " pam_unix(cron:session): 用户 some_user 的会话已关闭",
  "priority": "6",
  "program": "CRON",
  "facility": "authpriv",
  "severity": "信息"
}

纯文本日志文件

sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
  - path: "/var/log/some_log.log"
    # 如果未指定,类型默认为 application_log
    options:
      type: some_application_log

application_logs 内置配置用于处理纯文本格式的日志文件,这些日志文件中的行将按原样发送到 Logstash,格式为 JSON:

  • type - 日志文件配置中的类型字段,对 Logstash 过滤器有用
  • host - 来源机器的主机名
  • timestamp - RFC-3339 格式的日期
  • version - 对于纯文本日志始终为 1
  • role - 这是 rsyslog 角色配置中的 app_name 字段
  • sourcefile - 日志行来源的文件位置
  • message - 日志行本身

例如:

{
  "type": "application_log",
  "host": "192.168.1.1",
  "timestamp": "2017-10-21T13:58:40.098660+00:00",
  "@version": "1",
  "role": "some_application_log",
  "sourcefile": "/var/log/some_log.log",
  "message": "一条纯文本日志行"
}

JSON 日志文件

sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
  - path: "/var/log/some_log.log"
    options:
      type: some_application_log

json_logs 内置配置用于处理 JSON 格式的日志文件,所有字段将作为 JSON 发送,并添加了一些额外内容:

  • type - 日志文件配置中的类型字段,对 Logstash 过滤器有用
  • host - 来源机器的主机名
  • version - 对于 JSON 日志始终为 2
  • role - 这是 rsyslog 角色配置中的 app_name 字段
  • sourcefile - 日志行来源的文件位置

例如,给定的日志行:

{ "message": "某个日志消息", "datetime": "2017-01-01 00:00:00", "level": "info" }

将被发送为:

{
  "type": "some_application_log",
  "host": "192.168.1.1",
  "@version": "2",
  "role": "some_application",
  "sourcefile": "/var/log/some_log.log",
  "message": "某个日志消息",
  "datetime": "2017-01-01 00:00:00",
  "level": "info"
}

Nginx 访问日志文件

nginx_access_logs 内置配置与 json_logs 内置配置基本相同,唯一的区别是 type 字段固定为 nginx-access-logs。

要以 JSON 形式输出 Nginx 访问日志,您可以在 nginx.conf 中使用以下配置:

log_format main '{ '
    '"http_host": "$http_host", '
    '"clientip": "$remote_addr", '
    '"datetime": "$time_iso8601", '
    '"verb": "$request_method", '
    '"request_full": "$request", '
    '"response": "$status", '
    '"response_length": "$body_bytes_sent", '
    '"request_length": "$request_length", '
    '"referrer": "$http_referer", '
    '"agent": "$http_user_agent", '
    '"request_time": "$request_time", '
    '"upstream_time": "$upstream_response_time", '
    '"user_id": "$http_x_user", '
    '"request_id": "$http_x_request_id" '
'}';

access_log  /var/log/nginx/access.log main;

Docker 容器日志

Docker 容器日志配置旨在添加到 ECS 容器实例中。该配置在主机上创建 Unix 套接字文件,Docker 将生成的日志转发到这些文件。

纯文本日志

sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true

此配置在 /var/run/rsyslog/text.sock 创建一个套接字 应用程序的任务定义中的日志配置应如下所示:

"LogConfiguration": {
    "LogDriver": "syslog",
    "Options": {
        "tag": { "Ref": "ServiceName" },
        "syslog-address": "unixgram:///var/run/docker/text.sock"
    },
}

JSON 日志

sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true

此配置在 /var/run/rsyslog/json.sock 创建一个套接字 应用程序的任务定义中的日志配置应如下所示:

"LogConfiguration": {
    "LogDriver": "syslog",
    "Options": {
        "tag": { "Ref": "ServiceName" },
        "syslog-address": "unixgram:///var/run/docker/json.sock"
    },
}

通过 Journald 输出文本或 JSON 日志

sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false

该配置连接并侦听 journald 服务。 它只处理容器的日志文件,忽略 journald 中的所有其他日志条目。 可以处理来自容器的 JSON 和文本输出。 对于基本日志记录,应用程序的任务定义中的日志配置应如下所示:

"LogConfiguration": {
    "LogDriver": "journald"
}

对于 ECS 部署,可以通过启用以下选项扩展日志条目的元数据:

sansible_rsyslog_custom_ecs_properties: yes

如果启用,您在应用程序任务定义中的日志配置应如下所示:

"LogConfiguration": {
    "LogDriver": "journald",
  "Log-Opts" : {
    "labels": "role,ecs_task_container,app_version"
  }
}

示例

要安装:

- name: 某个应用
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_app_name: default_app
      sansible_rsyslog_builtin_configs_application_logs_enabled: true
      sansible_rsyslog_builtin_configs_application_logs_logs:
        - path: "/home/application_user/app_log.log"
      sansible_rsyslog_builtin_configs_json_logs_enabled: true
      sansible_rsyslog_builtin_configs_json_logs_logs:
        - path: "/home/application_user/app_log_json.log"
          options:
            type_tag: "application_log"
      sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
      sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
        - path: "/var/log/nginx/application_access.log"

有一些全局默认设置会应用于配置文件, 可以在 vars/main.yml 中查看,您可以使用 sansible_rsyslog_config_global、sansible_rsyslog_config_imfile、sansible_rsyslog_config_main_queue 和 sansible_rsyslog_config_omfwd 变量来覆盖或添加其他设置:

- name: 某个应用
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_app_name: default_app
      sansible_rsyslog_builtin_configs_application_logs_enabled: true
      sansible_rsyslog_builtin_configs_application_logs_logs:
        - path: "/home/application_user/app_log.log"
      sansible_rsyslog_builtin_configs_json_logs_enabled: true
      sansible_rsyslog_builtin_configs_json_logs_logs:
        - path: "/home/application_user/app_log_json.log"
          options:
            type_tag: "application_log"
      sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
      sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
        - path: "/var/log/nginx/application_access.log"
      sansible_rsyslog_config_global:
        maxMessageSize: 32K
        oversizemsg.input.mode: accept
      sansible_rsyslog_config_imfile:
        reopenOnTruncate: "on"
      sansible_rsyslog_config_main_queue:
        queue.size: 100000
      sansible_rsyslog_config_omfwd:
        action.resumeRetryCount: 10

要安装时不使用默认配置:

- name: 某个应用
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_app_name: default_app
      sansible_rsyslog_default_config: no

要安装特定的软件包版本:

- name: 某个应用
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_version: "8.30*"
      sansible_rsyslog_version_libfastjson4: "0.99.*"
      sansible_rsyslog_version_mmjsonparse: "8.30.*"
安装
ansible-galaxy install sansible.rsyslog
许可证
mit
下载
13.1k
拥有者
See https://github.com/sansible/sansible for more information