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
标签
此角色使用两个标签:build 和 configure
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.*"