Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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))
Beispiel #5
0
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))
Beispiel #7
0
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)
Beispiel #8
0
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"
Beispiel #9
0
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"
Beispiel #10
0
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)