elk日志采集系统 新增或修改多个日志采集配置文件
在Logstash的conf.d目录下新增或修改多个日志采集配置文件,并且不重启Logstash就能让这些配置生效,核心是利用Logstash的配置自动重载功能(就是你之前用到的-r参数),我会帮你梳理具体的实现方法和注意事项。
一、Logstash已开启配置自动重载
这是不重启生效的关键,你启动Logstash时需要带上**-r(或--config.reload.automatic)参数**,并且指定加载conf.d整个目录(而非单个文件)。
1. 正确的启动命令(加载conf.d目录+自动重载)
# 推荐:测试配置语法后启动
./logstash --path.settings /etc/logstash/ -t -f /etc/logstash/conf.d/
# 启动Logstash,-r开启自动重载,-f指定conf.d目录(会加载所有.conf文件)
./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/ &
-f /etc/logstash/conf.d/:表示加载该目录下所有.conf后缀的配置文件(多个配置文件会被合并执行)。
-r:开启配置自动重载,Logstash会默认每3秒检查conf.d目录下的配置文件是否有变化(新增、修改、删除),有变化则自动加载新配置,无需重启。
2. 调整自动重载的检查间隔(可选)
如果需要修改检查间隔(比如改为10秒),可以在启动命令中添加--config.reload.interval参数:
./logstash --path.settings /etc/logstash/ -r --config.reload.interval 10s -f /etc/logstash/conf.d/ &
二、在conf.d下管理多个采集配置文件的方法
你可以在conf.d目录下创建多个.conf文件,每个文件对应一个日志采集任务(比如采集Nginx日志、系统日志、Tomcat日志),Logstash会自动合并这些配置并执行。
示例:创建两个采集配置文件
配置文件1:采集Nginx日志(nginx.conf)
# /etc/logstash/conf.d/nginx.conf
input {
file {
path => "/var/log/nginx/access.log"
type => "nginx_access"
start_position => "end"
}
}
filter {
if [type] == "nginx_access" {
grok {
match => { "message" => '%{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:time_local}\] "%{METHOD:request_method} %{URIPATH:request_path} %{HTTPVERSION:http_version}" %{NUMBER:status:int} %{NUMBER:body_bytes_sent:int} "%{URI:http_referer}" "%{DATA:http_user_agent}"' }
remove_field => ["message"]
}
date {
match => [ "time_local", "dd/MMM/yyyy:HH:mm:ss Z" ]
target => "@timestamp"
}
}
}
output {
if [type] == "nginx_access" {
elasticsearch {
hosts => ["http://10.0.0.22:9200"]
index => "nginx-access-%{+YYYY.MM.dd}"
}
}
}
配置文件2:采集系统日志(syslog.conf)
# /etc/logstash/conf.d/syslog.conf
input {
file {
path => "/var/log/messages"
type => "syslog"
start_position => "end"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => '%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}' }
remove_field => ["message"]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
target => "@timestamp"
}
}
}
output {
if [type] == "syslog" {
elasticsearch {
hosts => ["http://10.0.0.22:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
}
}
3. 新增/修改配置文件后,无需重启的操作
新增配置文件:直接在conf.d下创建新的.conf文件并保存,Logstash会在3秒内自动加载。
修改配置文件:编辑已有的.conf文件并保存,Logstash会自动重载新配置。
删除配置文件:删除conf.d下的.conf文件,Logstash会自动停止对应的采集任务。
三、验证配置是否生效
查看Logstash日志
tail -f /var/log/logstash/logstash-plain.log
1.
如果配置重载成功,会看到类似以下日志:
[2025-12-22T10:00:00,000][INFO ][logstash.config.source.multilocal] Reloading config files from path: /etc/logstash/conf.d/*.conf
[2025-12-22T10:00:01,000][INFO ][logstash.javapipeline ][main] Pipeline has been reloaded {:pipeline_id=>"main"}
1.
2.
检查Elasticsearch索引
curl -X GET "http://10.0.0.22:9200/_cat/indices?v"
1.
如果能看到新增的索引(比如syslog-2025.12.22),说明配置已生效。
四、注意事项(避免配置重载失败)
配置文件语法必须正确:如果新增/修改的配置有语法错误,Logstash会在日志中输出错误,且不会重载配置(原有配置仍会继续运行)。建议修改后先执行以下命令测试语法:
./logstash --path.settings /etc/logstash/ -t -f /etc/logstash/conf.d/
1.
看到Configuration OK表示语法正确。
多个配置文件的逻辑冲突:多个配置文件的input/filter/output会被合并,建议用type或tags字段区分不同的日志采集任务(如示例中的type => "nginx_access"),避免过滤或输出时混淆。
大文件采集的重载影响:如果采集的是大日志文件,重载配置不会中断正在进行的采集,新配置会应用到后续的日志行。
五、总结
核心实现:启动Logstash时添加-r参数并指定加载conf.d目录,即可开启配置自动重载,无需重启就能生效新配置。
配置管理:在conf.d下创建多个.conf文件,每个文件对应一个采集任务,用type/tags区分不同日志流。
关键检查:修改配置后先测试语法,再通过Logstash日志或ES索引验证配置是否生效。
- 点赞
- 收藏
- 关注作者
评论(0)