目前主要涉及采集日志主要有2种,
input {
beats {
port=>5044
client_inactivity_timeout=>1800
}
}
filter {
# 如果 log_type 是 nginx,则给它添加 nginx 标签
if [fields][log_type] =="nginx" {
mutate {
add_field=> { "log_type"=>"nginx" }
}
} else {
mutate {
add_field=> { "log_type"=>"k8s-app-log" }
}
}
}
output {
# 判断 log_type 是否是 nginx,并根据条件发送到不同的索引
if [log_type] =="nginx" {
elasticsearch {
hosts=> ["localhost"]
index=>"nginx-log-%{+YYYY.MM.dd}"
# user => "elastic" # 如果需要认证可以取消注释并填充
# password => "changeme" # 如果需要认证可以取消注释并填充
}
} else {
elasticsearch {
hosts=> ["localhost"]
index=>"k8s-app-log-%{+YYYY.MM.dd}"
# user => "elastic" # 如果需要认证可以取消注释并填充
# password => "changeme" # 如果需要认证可以取消注释并填充
}
}
}
beats
插件从 Filebeat 接收日志。client_inactivity_timeout => 1800
来确保在 30 分钟内没有活动的客户端会被断开。if [fields][log_type] == "nginx"
来检查日志是否来自 Nginx。如果是 Nginx 日志,添加一个字段 log_type => "nginx"
,否则设置为 log_type => "k8s-app-log"
,这样可以区分不同来源的日志。log_type
字段的值,将日志输出到不同的 Elasticsearch 索引。nginx-log-%{+YYYY.MM.dd}
索引。k8s-app-log-%{+YYYY.MM.dd}
索引。• 日志监控:使用 stdout
输出来调试和查看处理后的日志,确保 log_type 字段正确传递:
output {
stdout { codec => rubydebug }
}
这会让您查看在 Logstash 处理后的日志数据,以便进行调试。
您需要确保在 Filebeat 配置中正确设置 log_type
字段,以便在 Logstash 中能够根据该字段进行区分。以下是 Filebeat 配置的一个示例:
filebeat.inputs:
-type:log
enabled:true
paths:
-/data/logs/nginx/*.log
fields:
log_type:nginx
output.logstash:
hosts: ["10.160.29.3:5044"]
在这个配置中,Nginx 日志将会带有 log_type: nginx
字段。您可以根据需要为其他日志源设置不同的 log_type
字段,从而在 Logstash 中区分它们并处理。
# ============================== Filebeat inputs ===============================
filebeat.inputs:
-type:log
enabled:true
paths:
-/data/logs/*/*.log
multiline.type:pattern
multiline.pattern:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate:true
multiline.match:after
-type:log
enabled:true
paths:
-/opt/t-manager/logs/catalina.out
multiline.pattern:'^[[:space:]]'
multiline.negate:false
multiline.match:after
tags: ["t-manager"]
# ------------------------------ Logstash Output -------------------------------
output.logstash:
hosts: ["192.168.40.224:5044"]
/data/logs/*/*.log
- type:log
enabled:true
paths:
-/data/logs/*/*.log
multiline.type:pattern
multiline.pattern:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate:true
multiline.match: after
type: log
:指定 Filebeat 收集的是日志文件。enabled: true
:启用此日志输入,意味着 Filebeat 会收集这些文件的日志。paths
:/data/logs/*/*.log
:匹配 /data/logs/
目录下的所有子目录中的 .log
文件。*
是通配符,表示该目录下的所有子目录和文件都将被收集。multiline
)配置:multiline.type: pattern
:指定多行日志的类型为正则表达式匹配。multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
:定义了匹配多行日志的正则表达式。这个模式匹配的是以日期(YYYY-MM-DD
格式)开头的行。例如,日志文件中每一行的开始部分是类似 2025-01-21
的日期。multiline.negate: true
:表示匹配的行 不 应该是多行日志的开始。意思是,如果一行的开始没有匹配到日期模式,那么这行是当前多行日志的一部分。multiline.match: after
:此设置意味着如果一行没有匹配到正则表达式,它会被视为前一行的继续,直到下一行符合正则表达式为止。因此,所有不以日期开头的行会被合并到前一行。/opt/t-manager/logs/catalina.out
- type:log
enabled:true
paths:
-/opt/t-manager/logs/catalina.out
multiline.pattern:'^[[:space:]]'
multiline.negate:false
multiline.match:after
tags: ["t-manager"]
type: log
:指定 Filebeat 收集的是日志文件。enabled: true
:启用此日志输入。paths
:/opt/t-manager/logs/catalina.out
:这是指定的日志路径,Filebeat 会收集此路径下的 catalina.out
日志文件。multiline
)配置:multiline.pattern: '^[[:space:]]'
:定义了匹配多行日志的正则表达式。这里使用的是 POSIX 字符类 [:space:]
来匹配任何空格字符(包括空格、制表符等),即匹配以空白字符开头的行。multiline.negate: false
:表示匹配的行是多行日志的开始,而不是继续。即以空白字符开头的行会被视为当前日志行的延续。multiline.match: after
:如果当前行符合 multiline.pattern
的匹配(即行以空白字符开头),则这行被认为是前一行的继续。tags: ["t-manager"]
:给这个日志输入加上 t-manager
标签。这个标签会被自动附加到每一条来自 catalina.out
的日志上,可以在后续的处理或输出中进行筛选。