290 lines
8.4 KiB
Python
290 lines
8.4 KiB
Python
import re
|
|
import sys
|
|
import metricbeat
|
|
import unittest
|
|
|
|
|
|
@unittest.skipUnless(re.match("(?i)win|linux|darwin|freebsd", sys.platform), "os")
|
|
class Test(metricbeat.BaseTest):
|
|
|
|
def test_drop_fields(self):
|
|
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["cpu"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"drop_fields": {
|
|
"when": "range.system.cpu.system.pct.lt: 0.1",
|
|
"fields": ["system.cpu.load"],
|
|
},
|
|
}]
|
|
)
|
|
proc = self.start_beat()
|
|
self.wait_until(lambda: self.output_lines() > 0)
|
|
proc.check_kill_and_wait()
|
|
|
|
output = self.read_output_json()
|
|
self.assertEqual(len(output), 1)
|
|
evt = output[0]
|
|
self.assert_fields_are_documented(evt)
|
|
|
|
print(evt)
|
|
print(evt.keys())
|
|
self.assertItemsEqual(self.de_dot([
|
|
'beat', '@timestamp', 'system', 'metricset.module',
|
|
'metricset.rtt', 'metricset.name', 'host'
|
|
]), evt.keys())
|
|
cpu = evt["system"]["cpu"]
|
|
print(cpu.keys())
|
|
self.assertItemsEqual(self.de_dot([
|
|
"system", "cores", "user", "softirq", "iowait",
|
|
"idle", "irq", "steal", "nice", "total"
|
|
]), cpu.keys())
|
|
|
|
def test_dropfields_with_condition(self):
|
|
"""
|
|
Check drop_fields action works when a condition is associated.
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"drop_fields": {
|
|
"fields": ["system.process.memory"],
|
|
"when": "range.system.process.cpu.total.pct.lt: 0.5",
|
|
},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)
|
|
|
|
for event in output:
|
|
if float(event["system.process.cpu.total.pct"]) < 0.5:
|
|
assert "system.process.memory.size" not in event
|
|
else:
|
|
assert "system.process.memory.size" in event
|
|
|
|
def test_dropevent_with_condition(self):
|
|
"""
|
|
Check drop_event action works when a condition is associated.
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"drop_event": {
|
|
"when": "range.system.process.cpu.total.pct.lt: 0.001",
|
|
},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)
|
|
for event in output:
|
|
assert float(event["system.process.cpu.total.pct"]) >= 0.001
|
|
|
|
def test_dropevent_with_complex_condition(self):
|
|
"""
|
|
Check drop_event action works when a complex condition is associated.
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"drop_event": {
|
|
"when.not": "contains.system.process.cmdline: metricbeat.test",
|
|
},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)
|
|
assert len(output) >= 1
|
|
|
|
def test_include_fields(self):
|
|
"""
|
|
Check include_fields filtering action
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"include_fields": {"fields": ["system.process.cpu", "system.process.memory"]},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)[0]
|
|
print(output)
|
|
|
|
for key in [
|
|
"system.process.cpu.start_time",
|
|
"system.process.cpu.total.pct",
|
|
"system.process.memory.size",
|
|
"system.process.memory.rss.bytes",
|
|
"system.process.memory.rss.pct"
|
|
]:
|
|
assert key in output
|
|
|
|
for key in [
|
|
"system.process.name",
|
|
"system.process.pid",
|
|
]:
|
|
assert key not in output
|
|
|
|
def test_multiple_actions(self):
|
|
"""
|
|
Check the result when configuring two actions: include_fields
|
|
and drop_fields.
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"include_fields": {"fields": ["system.process"]},
|
|
}, {
|
|
"drop_fields": {"fields": ["system.process.memory"]},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)[0]
|
|
|
|
for key in [
|
|
"system.process.cpu.start_time",
|
|
"system.process.cpu.total.pct",
|
|
"system.process.name",
|
|
"system.process.pid",
|
|
]:
|
|
assert key in output
|
|
|
|
for key in [
|
|
"system.process.memory.size",
|
|
"system.process.memory.rss.bytes",
|
|
"system.process.memory.rss.pct"
|
|
]:
|
|
assert key not in output
|
|
|
|
def test_contradictory_multiple_actions(self):
|
|
"""
|
|
Check the behaviour of a contradictory multiple actions
|
|
"""
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["process"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"include_fields": {
|
|
"fields": ["system.process.memory.size", "proc.memory.rss.pct"],
|
|
},
|
|
}, {
|
|
"drop_fields": {
|
|
"fields": ["system.process.memory.size", "proc.memory.rss.pct"],
|
|
},
|
|
}]
|
|
)
|
|
metricbeat = self.start_beat()
|
|
self.wait_until(
|
|
lambda: self.output_count(lambda x: x >= 1),
|
|
max_timeout=15)
|
|
metricbeat.kill_and_wait()
|
|
|
|
output = self.read_output(
|
|
required_fields=["@timestamp"],
|
|
)[0]
|
|
|
|
for key in [
|
|
"system.process.memory.size",
|
|
"system.process.memory.rss",
|
|
"system.process.cpu.start_time",
|
|
"system.process.cpu.total.pct",
|
|
"system.process.name",
|
|
"system.process.pid",
|
|
"system.process.memory.rss.pct"
|
|
]:
|
|
assert key not in output
|
|
|
|
def test_rename_field(self):
|
|
|
|
self.render_config_template(
|
|
modules=[{
|
|
"name": "system",
|
|
"metricsets": ["cpu"],
|
|
"period": "1s"
|
|
}],
|
|
processors=[{
|
|
"rename": {
|
|
"fields": [{"from": "metricset.name", "to": "hello.world"}],
|
|
},
|
|
}]
|
|
)
|
|
proc = self.start_beat()
|
|
self.wait_until(lambda: self.output_lines() > 0)
|
|
proc.check_kill_and_wait()
|
|
|
|
output = self.read_output_json()
|
|
self.assertEqual(len(output), 1)
|
|
evt = output[0]
|
|
|
|
print(evt)
|
|
print(evt.keys())
|
|
|
|
assert "name" not in output[0]["metricset"]
|
|
assert "cpu" in output[0]["hello"]["world"]
|