def test_docker_observer_labels(): """ Test that docker observer picks up a fully configured endpoint from container labels """ with run_agent( dedent(""" observers: - type: docker """)) as [backend, _, _]: with run_service( "nginx", name="nginx-disco-full", labels={ "agent.signalfx.com.monitorType.80": "collectd/nginx", "agent.signalfx.com.config.80.intervalSeconds": "1", }, ): assert wait_for( p(has_datapoint_with_dim, backend, "plugin", "nginx")), "Didn't get nginx datapoints" # Let nginx be removed by docker observer and collectd restart time.sleep(5) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "container_name", "nginx-disco-full"), 10)
def test_docker_observer_labels_partial(): """ Test that docker observer picks up a partially configured endpoint from container labels """ with run_agent( dedent(""" observers: - type: docker monitors: - type: collectd/nginx discoveryRule: container_name =~ "nginx-disco-partial" && port == 80 """)) as [backend, _, _]: with run_service( "nginx", name="nginx-disco-partial", labels={ "agent.signalfx.com.config.80.extraDimensions": "{mydim: myvalue}" }, ): assert wait_for( p(has_datapoint_with_dim, backend, "plugin", "nginx")), "Didn't get nginx datapoints" assert wait_for( p(has_datapoint_with_dim, backend, "mydim", "myvalue")), "Didn't get extra dimension" # Let nginx be removed by docker observer and collectd restart time.sleep(5) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "container_name", "nginx-disco-partial"), 10)
def test_basic_service_discovery(): with run_agent(CONFIG) as [backend, get_output, _]: with run_service("nginx", name="nginx-discovery"): assert wait_for( p(has_datapoint_with_dim, backend, "plugin", "nginx")), "Didn't get nginx datapoints" # Let nginx be removed by docker observer and collectd restart time.sleep(5) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "plugin", "nginx"), 10) assert not has_log_message(get_output(), "error")
def test_docker_image_filtering(): with run_service("nginx") as nginx_container: with run_agent( """ monitors: - type: docker-container-stats excludedImages: - "%s" """ % nginx_container.attrs["Image"] ) as [backend, _, _]: assert ensure_always(lambda: not has_datapoint_with_dim(backend, "container_id", nginx_container.id))
def test_does_not_set_hostname_if_not_host_specific(): with run_agent(""" hostname: acmeinc.com disableHostDimensions: true monitors: - type: collectd/signalfx-metadata persistencePath: /dev/null - type: collectd/cpu - type: collectd/uptime """) as [backend, _, _]: assert ensure_always( lambda: not has_datapoint_with_dim(backend, "host", "acmeinc.com") ), "Got overridden hostname in datapoint" assert ensure_always( lambda: not has_event_with_dim(backend, "host", "acmeinc.com") ), "Got overridden hostname in event"
def test_docker_stops_watching_paused_containers(): with run_service("nginx") as nginx_container: with run_agent( """ monitors: - type: docker-container-stats """ ) as [backend, _, _]: assert wait_for( p(has_datapoint_with_dim, backend, "container_id", nginx_container.id) ), "Didn't get nginx datapoints" nginx_container.pause() time.sleep(5) backend.datapoints.clear() assert ensure_always(lambda: not has_datapoint_with_dim(backend, "container_id", nginx_container.id))
def test_docker_observer(): with run_agent(CONFIG) as [backend, _, _]: with run_service("nginx", name="nginx-discovery", labels={"mylabel": "abc"}): assert wait_for( p(has_datapoint_with_dim, backend, "plugin", "nginx")), "Didn't get nginx datapoints" assert wait_for(p(has_datapoint_with_dim, backend, "mydim", "abc")), "Didn't get custom label dimension" # Let nginx be removed by docker observer and collectd restart time.sleep(5) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "container_name", "nginx-discovery"), 10)
def test_does_not_set_hostname_on_monitor_if_not_host_specific(): with run_agent(""" hostname: acmeinc.com monitors: - type: collectd/signalfx-metadata persistencePath: /dev/null - type: collectd/cpu - type: collectd/uptime disableHostDimensions: true """) as [backend, _, _]: assert wait_for( p(has_datapoint_with_all_dims, backend, dict(host="acmeinc.com", plugin="signalfx-metadata")) ), "Didn't get overridden hostname in datapoint" assert ensure_always(lambda: not has_datapoint_with_dim( backend, "uptime", "acmeinc.com") ), "Got overridden hostname in datapoint"
def test_custom_collectd_shutdown(): with run_agent( dedent(""" monitors: - type: collectd/df - type: collectd/custom template: | LoadPlugin "ping" <Plugin ping> Host "google.com" </Plugin> """)) as [backend, _, configure]: assert wait_for(p(has_datapoint_with_dim, backend, "plugin", "ping")), "Didn't get ping datapoints" assert wait_for(p(has_datapoint_with_dim, backend, "plugin", "df")), "Didn't get df datapoints" configure( dedent(""" monitors: - type: collectd/df """)) time.sleep(3) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "plugin", "ping") ), "Got ping datapoint when we shouldn't have" configure( dedent(""" monitors: - type: collectd/df - type: collectd/custom template: | LoadPlugin "ping" <Plugin ping> Host "google.com" </Plugin> """)) assert wait_for(p(has_datapoint_with_dim, backend, "plugin", "ping")), "Didn't get ping datapoints"
def test_docker_observer_labels_multiple_monitors_per_port(): """ Test that we can configure multiple monitors per port using labels """ with run_agent( dedent(""" observers: - type: docker """)) as [backend, _, _]: with run_service( "nginx", name="nginx-multi-monitors", labels={ "agent.signalfx.com.monitorType.80": "collectd/nginx", "agent.signalfx.com.config.80.intervalSeconds": "1", "agent.signalfx.com.config.80.extraDimensions": "{app: nginx}", "agent.signalfx.com.monitorType.80-nginx2": "collectd/nginx", "agent.signalfx.com.config.80-nginx2.intervalSeconds": "1", "agent.signalfx.com.config.80-nginx2.extraDimensions": "{app: other}", }, ): assert wait_for( p(has_datapoint_with_dim, backend, "plugin", "nginx")), "Didn't get nginx datapoints" assert wait_for(p(has_datapoint_with_dim, backend, "app", "nginx")), "Didn't get extra dims" assert wait_for(p(has_datapoint_with_dim, backend, "app", "other")), "Didn't get extra dims" # Let nginx be removed by docker observer and collectd restart time.sleep(5) backend.datapoints.clear() assert ensure_always( lambda: not has_datapoint_with_dim(backend, "container_name", "nginx-multi-monitors"), 10)