logstash/qa/integration/specs/beats_input_spec.rb
João Duarte d3093e4b44
integration tests: switch log input to filestream in filebeat (#16983)
Log input has been deprecated in filebeat 9.0.0 and throws an error if it's present in the configuration.
This commit switches the configuration to the "filestream" input.
2025-01-29 13:51:09 +00:00

165 lines
5.2 KiB
Ruby

# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require_relative '../framework/fixture'
require_relative '../framework/settings'
require "stud/temporary"
require "stud/try"
require "rspec/wait"
require "yaml"
require "fileutils"
describe "Beat Input" do
before(:all) do
@fixture = Fixture.new(__FILE__)
end
after :each do
logstash_service.teardown
filebeat_service.stop
end
before :each do
FileUtils.mkdir_p(File.dirname(registry_file))
end
let(:max_retry) { 120 }
let(:registry_file) { File.join(Stud::Temporary.pathname, "registry") }
let(:logstash_service) { @fixture.get_service("logstash") }
let(:filebeat_service) { @fixture.get_service("filebeat") }
let(:log_path) do
tmp_path = Stud::Temporary.file.path #get around ignore older completely
source = File.expand_path(@fixture.input)
FileUtils.cp(source, tmp_path)
tmp_path
end
let(:number_of_events) do
File.open(log_path, "r").readlines.size
end
shared_examples "send events" do
let(:filebeat_config_path) do
file = Stud::Temporary.file
file.write(YAML.dump(filebeat_config))
file.close
file.path
end
it "successfully send events" do
logstash_service.start_background(logstash_config)
process = filebeat_service.run(filebeat_config_path)
# It can take some delay for filebeat to connect to logstash and start sending data.
# Its possible that logstash isn't completely initialized here, we can get "Connection Refused"
begin
sleep(1) while (result = logstash_service.monitoring_api.event_stats).nil?
rescue
sleep(1)
retry
end
Stud.try(max_retry.times, RSpec::Expectations::ExpectationNotMetError) do
result = logstash_service.monitoring_api.event_stats
expect(result["in"]).to eq(number_of_events)
end
end
end
context "Without TLS" do
let(:logstash_config) { @fixture.config("without_tls") }
let(:filebeat_config) do
{
"filebeat" => {
"inputs" => [{ "paths" => [log_path], "type" => "filestream" }],
"registry.path" => registry_file,
"scan_frequency" => "1s"
},
"output" => {
"logstash" => { "hosts" => ["localhost:5044"] }
},
"logging" => { "level" => "debug" }
}
end
include_examples "send events"
end
context "With TLS" do
let(:certificate_directory) { File.expand_path(File.join(File.dirname(__FILE__), "..", "fixtures", "certificates")) }
let(:certificate) { File.join(certificate_directory, "certificate.crt") }
let(:ssl_key) { File.join(certificate_directory, "certificate.key") }
let(:certificate_authorities) { [certificate] }
context "Server auth" do
let(:logstash_config) { @fixture.config("tls_server_auth", { :ssl_certificate => certificate, :ssl_key => ssl_key}) }
let(:filebeat_config) do
{
"filebeat" => {
"inputs" => [{ "paths" => [log_path], "type" => "filestream" }],
"registry.path" => registry_file,
"scan_frequency" => "1s"
},
"output" => {
"logstash" => {
"hosts" => ["localhost:5044"],
"tls" => {
"certificate_authorities" => certificate_authorities
},
"ssl" => {
"certificate_authorities" => certificate_authorities
}
}
},
"logging" => { "level" => "debug" }
}
end
include_examples "send events"
end
context "Mutual auth" do
let(:logstash_config) { @fixture.config("tls_mutual_auth", { :ssl_certificate => certificate, :ssl_key => ssl_key}) }
let(:filebeat_config) do
{
"filebeat" => {
"inputs" => [{ "paths" => [log_path], "type" => "filestream" }],
"registry.path" => registry_file,
"scan_frequency" => "1s"
},
"output" => {
"logstash" => {
"hosts" => ["localhost:5044"],
"tls" => {
"certificate_authorities" => certificate_authorities,
"certificate" => certificate,
"certificate_key" => ssl_key
},
"ssl" => {
"certificate_authorities" => certificate_authorities,
"certificate" => certificate,
"key" => ssl_key
}
}
},
"logging" => { "level" => "debug" }
}
end
include_examples "send events"
end
end
end