|
7 | 7 | import ddtrace |
8 | 8 | from ddtrace.internal import atexit |
9 | 9 | from ddtrace.internal import forksafe |
| 10 | +from ddtrace.internal.constants import EXPERIMENTAL_FEATURES |
10 | 11 | from ddtrace.vendor.dogstatsd import DogStatsd |
11 | 12 |
|
12 | 13 | from .. import periodic |
|
16 | 17 | from .metric_collectors import GCRuntimeMetricCollector |
17 | 18 | from .metric_collectors import PSUtilRuntimeMetricCollector |
18 | 19 | from .tag_collectors import PlatformTagCollector |
| 20 | +from .tag_collectors import PlatformTagCollectorV2 |
19 | 21 | from .tag_collectors import TracerTagCollector |
20 | 22 |
|
21 | 23 |
|
@@ -45,6 +47,12 @@ class PlatformTags(RuntimeCollectorsIterable): |
45 | 47 | COLLECTORS = [PlatformTagCollector] |
46 | 48 |
|
47 | 49 |
|
| 50 | +class PlatformTagsV2(RuntimeCollectorsIterable): |
| 51 | + # DEV: `None` means to allow all tags generated by PlatformTagCollector and TracerTagCollector |
| 52 | + ENABLED = None |
| 53 | + COLLECTORS = [PlatformTagCollectorV2] |
| 54 | + |
| 55 | + |
48 | 56 | class TracerTags(RuntimeCollectorsIterable): |
49 | 57 | # DEV: `None` means to allow all tags generated by PlatformTagCollector and TracerTagCollector |
50 | 58 | ENABLED = None |
@@ -80,7 +88,17 @@ def __init__(self, interval=_get_interval_or_default(), tracer=None, dogstatsd_u |
80 | 88 | ) |
81 | 89 | self.tracer: ddtrace.trace.Tracer = tracer or ddtrace.tracer |
82 | 90 | self._runtime_metrics: RuntimeMetrics = RuntimeMetrics() |
83 | | - self._platform_tags: List[str] = self._format_tags(PlatformTags()) |
| 91 | + if EXPERIMENTAL_FEATURES.RUNTIME_METRICS in ddtrace.config._experimental_features_enabled: |
| 92 | + # Enables sending runtime metrics as gauges (instead of distributions with a new metric name) |
| 93 | + self.send_metric = self._dogstatsd_client.gauge |
| 94 | + else: |
| 95 | + self.send_metric = self._dogstatsd_client.distribution |
| 96 | + |
| 97 | + if ddtrace.config._runtime_metrics_runtim_id_enabled: |
| 98 | + # Enables tagging runtime metrics with runtime-id (as well as all the v1 tags) |
| 99 | + self._platform_tags = self._format_tags(PlatformTagsV2()) |
| 100 | + else: |
| 101 | + self._platform_tags = self._format_tags(PlatformTags()) |
84 | 102 |
|
85 | 103 | @classmethod |
86 | 104 | def disable(cls): |
@@ -130,13 +148,13 @@ def flush(self): |
130 | 148 | # type: () -> None |
131 | 149 | # Ensure runtime metrics have up-to-date tags (ex: service, env, version) |
132 | 150 | rumtime_tags = self._format_tags(TracerTags()) + self._platform_tags |
133 | | - log.debug("Updating constant tags %s", rumtime_tags) |
| 151 | + log.debug("Sending runtime metrics with the following tags: %s", rumtime_tags) |
134 | 152 | self._dogstatsd_client.constant_tags = rumtime_tags |
135 | 153 |
|
136 | 154 | with self._dogstatsd_client: |
137 | 155 | for key, value in self._runtime_metrics: |
138 | | - log.debug("Writing metric %s:%s", key, value) |
139 | | - self._dogstatsd_client.distribution(key, value) |
| 156 | + log.debug("Sending ddtrace runtime metric %s:%s", key, value) |
| 157 | + self.send_metric(key, value) |
140 | 158 |
|
141 | 159 | def _stop_service(self): |
142 | 160 | # type: (...) -> None |
|
0 commit comments