每个 Golang 容器实例里跑一个 Logstash,读本机的日志文件再推到 ES。为了省事,提前做了一份带 Logstash 的镜像,直接用就行:
docker pull jasonleemz/golang:231219
镜像标签页:https://hub.docker.com/r/jasonleemz/golang/tags
logstash-config.conf
关键在于把两个目录的日志分开索引:用 tags 区分来源,再在 filter 里给每条记录打上目标索引名,output 里用变量引用。
input {
file {
path => "/home/app/logs/log1/*.log" # 监听 log1 目录下的日志文件
start_position => "beginning"
sincedb_path => "/dev/null"
ignore_older => 0
tags => ["log1"] # 使用标签区分不同的日志文件
}
file {
path => "/home/app/logs/log2/*.log" # 监听 log2 目录下的日志文件
start_position => "beginning"
sincedb_path => "/dev/null"
ignore_older => 0
tags => ["log2"] # 使用标签区分不同的日志文件
}
}
filter {
if "log1" in [tags] {
mutate {
add_field => { "es_index" => "index_for_log1" } # 设置 log1 对应的 Elasticsearch 索引名
}
}
if "log2" in [tags] {
mutate {
add_field => { "es_index" => "index_for_log2" } # 设置 log2 对应的 Elasticsearch 索引名
}
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"] # 这里修改成真实的ES地址
index => "%{es_index}" # 使用动态设置的索引名
}
}
sincedb_path => "/dev/null" 加 ignore_older => 0 的组合,意思是每次重启都从头重读,不会因为记录过读取位置而漏掉旧文件。容器场景下日志目录是重建的,这个选择比较省心。
改配置并重启
镜像里的服务由 supervisor 托管,把示例配置改成自己的日志路径,再重载:
cd /etc/supervisor/conf.d/
mv logstash.ini.example logstash.ini
supervisorctl reload
在 Kibana 建索引模式
进 Kibana → Management → Stack Management → Index patterns:

回到 Analytics → Discover,能看到日志已经采集上来了:

评论
还没有人留言。