У меня есть Logsta sh 7.6.2 docker, который останавливается из-за утечки памяти. Похоже, что после каждого выполнения конвейера Logsta sh не освобождает память. Что я должен сделать, чтобы определить источник проблемы? Как я могу решить это?
Любая помощь - это welcom ^^.
Вот ошибка, которую я вижу в журналах. Это всего лишь 5 первых строк трассировки. Я загрузил остальные в файл в моем github туда .
logstash | [2020-04-08T18:15:42,960][INFO ][logstash.outputs.file ][rawweb] Closing file /output/web_data.json
logstash | [2020-04-08T18:15:43,353][ERROR][org.logstash.Logstash ] java.lang.OutOfMemoryError: Java heap space
logstash | [2020-04-08T18:15:43,367][ERROR][org.logstash.execution.WorkerLoop][rawclient] Exception in pipelineworker, the pipeline stopped processing new events, please check your filter configuration and restart Logstash.
logstash | org.jruby.exceptions.NoMethodError: (NoMethodError) undefined method `pop' for nil:NilClass
logstash | at usr.share.logstash.vendor.bundle.jruby.$2_dot_5_dot_0.gems.awesome_print_minus_1_dot_7_dot_0.lib.awesome_print.inspector.awesome(/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/inspector.rb:117) ~[?:?]
Здесь docker -compose.yml Я использовал для настройки моего Logsta sh Docker
version: '2.4'
services:
logstash:
image: docker.elastic.co/logstash/logstash:7.6.2
container_name: logstash
environment:
LS_JAVA_OPTS: "-Xmx7g -Xms4g"
REQUEST_FREQUENCY: 600 #seconds
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipelines.yml:/usr/share/logstash/config/pipelines.yml
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
- ./logstash/tests:/testscripts:ro
- /root/logstash_output/:/output/
ports:
- "9600:9600"
mem_limit: 7000M
mem_reservation: 100M
Мои pipelines.yml file
- pipeline.id: rawclient
path.config: "/usr/share/logstash/pipeline/logclient.conf"
pipeline.batch.size: 10000000
- pipeline.id: rawweb
path.config: "/usr/share/logstash/pipeline/logweb.conf"
pipeline.batch.size: 10000000
Один из моих .conf файлов. По сути, он выполняет сценарий . sh, содержащий запрос скручивания. Результатом этого запроса является ввод конвейера. Обработки сделаны. Затем результаты сохраняются в файле. Два конвейера делают то же самое, единственное отличие - это запрос curl.
input {
exec {
command => "bash /testscripts/logclient_1.sh"
codec => "json"
interval => "600"
}
}
filter {
mutate {
rename => ["connection/start_time", "start_time" ]
rename => ["connection/end_time", "end_time" ]
rename => ["connection/duration", "duration" ]
rename => ["connection/destination_ip_address", "destination_ip_address" ]
rename => ["connection/status", "status" ]
rename => ["device/last_ip_address", "last_ip_address" ]
rename => ["user/sid", "sid" ]
# rename => ["binary/application_category", "application_category" ]
rename => ["binary/application_name", "application_name" ]
rename => ["binary/executable_name", "executable_name" ]
remove_field => ["@timestamp"]
remove_field => ["@version"]
add_field => { "connection_type" => "client" }
}
}
output {
file {
path => "/output/client_data.json"
codec => "json"
}
stdout {
codec => rubydebug
}
}
My logsta sh .yml file
http.host: "0.0.0.0"
xpack.monitoring.enabled: false
Thanks for all the help :slightly_smiling_face: