Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion blazemeter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CHANGELOG - BlazeMeter

## 1.0.0 / 2024-12-03
## 1.0.0 / 2025-07-18

***Added***:

Expand Down
2 changes: 1 addition & 1 deletion blazemeter/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": "2.0.0",
"app_uuid": "8c52001a-e57a-4979-a50b-cda6252050e4",
"app_id": "blazemeter",
"display_on_public_website": false,
"display_on_public_website": true,
"tile": {
"overview": "README.md#Overview",
"configuration": "README.md#Setup",
Expand Down
1 change: 1 addition & 0 deletions envoy/changelog.d/20778.added
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added ext_proc metrics to the Envoy integration
135 changes: 135 additions & 0 deletions envoy/datadog_checks/envoy/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,21 @@
'envoy_http_downstream_rq_tx_reset': 'http.downstream_rq_tx_reset',
'envoy_http_downstream_rq_ws_on_non_ws_route': 'http.downstream_rq_ws_on_non_ws_route',
'envoy_http_downstream_rq_xx': 'http.downstream_rq_xx',
'envoy_http_ext_proc_streams_started': 'http.ext_proc.streams_started',
'envoy_http_ext_proc_stream_msgs_sent': 'http.ext_proc.stream_msgs_sent',
'envoy_http_ext_proc_stream_msgs_received': 'http.ext_proc.stream_msgs_received',
'envoy_http_ext_proc_spurious_msgs_received': 'http.ext_proc.spurious_msgs_received',
'envoy_http_ext_proc_streams_closed': 'http.ext_proc.streams_closed',
'envoy_http_ext_proc_streams_failed': 'http.ext_proc.streams_failed',
'envoy_http_ext_proc_failure_mode_allowed': 'http.ext_proc.failure_mode_allowed',
'envoy_http_ext_proc_message_timeouts': 'http.ext_proc.message_timeouts',
'envoy_http_ext_proc_rejected_header_mutations': 'http.ext_proc.rejected_header_mutations',
'envoy_http_ext_proc_override_message_timeout_received': 'http.ext_proc.override_message_timeout_received',
'envoy_http_ext_proc_override_message_timeout_ignored': 'http.ext_proc.override_message_timeout_ignored',
'envoy_http_ext_proc_clear_route_cache_ignored': 'http.ext_proc.clear_route_cache_ignored',
'envoy_http_ext_proc_clear_route_cache_disabled': 'http.ext_proc.clear_route_cache_disabled',
'envoy_http_ext_proc_clear_route_cache_upstream_ignored': 'http.ext_proc.clear_route_cache_upstream_ignored',
'envoy_http_ext_proc_send_immediate_resp_upstream_ignored': 'http.ext_proc.send_immediate_resp_upstream_ignored',
'envoy_http_no_cluster': 'http.no_cluster',
'envoy_http_no_route': 'http.no_route',
'envoy_http_passthrough_internal_redirect_bad_location': 'http.passthrough_internal_redirect_bad_location',
Expand Down Expand Up @@ -2308,6 +2323,126 @@
),
'method': 'histogram',
},
'http.ext_proc.streams_started': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.stream_msgs_sent': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.stream_msgs_received': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.spurious_msgs_received': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.streams_closed': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.streams_failed': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.failure_mode_allowed': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.message_timeouts': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.rejected_header_mutations': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.override_message_timeout_received': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.override_message_timeout_ignored': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.clear_route_cache_ignored': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.clear_route_cache_disabled': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.clear_route_cache_upstream_ignored': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.ext_proc.send_immediate_resp_upstream_ignored': {
'tags': (
('stat_prefix', ),
(),
(),
),
'method': 'monotonic_count',
},
'http.rs_too_large': {
'tags': (
('stat_prefix', ),
Expand Down
30 changes: 30 additions & 0 deletions envoy/metadata.csv
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,21 @@ envoy.http.downstream_rq_too_large.count,count,,,,[OpenMetrics V2] Total request
envoy.http.downstream_rq_tx_reset.count,count,,,,[OpenMetrics V2] Total request resets sent,0,envoy,,
envoy.http.downstream_rq_ws_on_non_ws_route.count,count,,,,[OpenMetrics V2] Total upgrade requests rejected by non upgrade routes. This now applies both to WebSocket and non-WebSocket upgrades,0,envoy,,
envoy.http.downstream_rq_xx.count,count,,,,"[OpenMetrics V2] Aggregate HTTP response codes (e.g., 2xx, 3xx, etc.)",0,envoy,,
envoy.http.ext_proc.streams_started.count,count,,,,[OpenMetrics V2] Total number of gRPC streams started to the external processing service,0,envoy,,
envoy.http.ext_proc.stream_msgs_sent.count,count,,message,,[OpenMetrics V2] Total number of messages sent on those streams,0,envoy,,
envoy.http.ext_proc.stream_msgs_received.count,count,,message,,[OpenMetrics V2] Total number of messages received on those streams,0,envoy,,
envoy.http.ext_proc.spurious_msgs_received.count,count,,message,,[OpenMetrics V2] Total number of unexpected messages received that violated the protocol,-1,envoy,,
envoy.http.ext_proc.streams_closed.count,count,,,,[OpenMetrics V2] Total number of streams successfully closed on either end,0,envoy,,
envoy.http.ext_proc.streams_failed.count,count,,,,[OpenMetrics V2] Total number of times a stream produced a gRPC error,-1,envoy,,
envoy.http.ext_proc.failure_mode_allowed.count,count,,response,,[OpenMetrics V2] Total number of times an error was ignored due to configuration,-1,envoy,,
envoy.http.ext_proc.message_timeouts.count,count,,message,,[OpenMetrics V2] Number of times a message failed to receive a response within the configured timeout,-1,envoy,,
envoy.http.ext_proc.rejected_header_mutations.count,count,,,,[OpenMetrics V2] Total number of rejected header mutations,-1,envoy,,
envoy.http.ext_proc.override_message_timeout_received.count,count,,message,,[OpenMetrics V2] Total number of override_message_timeout messages received,0,envoy,,
envoy.http.ext_proc.override_message_timeout_ignored.count,count,,message,,[OpenMetrics V2] Total number of override_message_timeout messages ignored,0,envoy,,
envoy.http.ext_proc.clear_route_cache_ignored.count,count,,request,,[OpenMetrics V2] Total number of clear cache requests ignored,0,envoy,,
envoy.http.ext_proc.clear_route_cache_disabled.count,count,,request,,[OpenMetrics V2] Total number of clear cache requests that were rejected from being disabled,0,envoy,,
envoy.http.ext_proc.clear_route_cache_upstream_ignored.count,count,,request,,[OpenMetrics V2] Total number of clear cache requests that were ignored because the filter was in upstream mode,0,envoy,,
envoy.http.ext_proc.send_immediate_resp_upstream_ignored.count,count,,request,,[OpenMetrics V2] Total number of send immediate response messages that were ignored because the filter was in upstream mode,0,envoy,,
envoy.http.no_cluster.count,count,,,,[OpenMetrics V2],0,envoy,,
envoy.http.no_route.count,count,,,,[OpenMetrics V2],0,envoy,,
envoy.http.passthrough_internal_redirect_bad_location.count,count,,,,[OpenMetrics V2],0,envoy,,
Expand Down Expand Up @@ -534,6 +549,21 @@ envoy.http.downstream_rq_3xx,count,,response,,[Legacy] Total 3xx responses,0,env
envoy.http.downstream_rq_4xx,count,,response,,[Legacy] Total 4xx responses,-1,envoy,,
envoy.http.downstream_rq_5xx,count,,response,,[Legacy] Total 5xx responses,-1,envoy,,
envoy.http.downstream_rq_ws_on_non_ws_route,count,,request,,[Legacy] Total WebSocket upgrade requests rejected by non WebSocket routes,0,envoy,,
envoy.http.ext_proc.streams_started,count,,,,[Legacy] Total number of gRPC streams started to the external processing service,0,envoy,,
envoy.http.ext_proc.stream_msgs_sent,count,,message,,[Legacy] Total number of messages sent on those streams,0,envoy,,
envoy.http.ext_proc.stream_msgs_received,count,,message,,[Legacy] Total number of messages received on those streams,0,envoy,,
envoy.http.ext_proc.spurious_msgs_received,count,,message,,[Legacy] Total number of unexpected messages received that violated the protocol,-1,envoy,,
envoy.http.ext_proc.streams_closed,count,,,,[Legacy] Total number of streams successfully closed on either end,0,envoy,,
envoy.http.ext_proc.streams_failed,count,,,,[Legacy] Total number of times a stream produced a gRPC error,-1,envoy,,
envoy.http.ext_proc.failure_mode_allowed,count,,response,,[Legacy] Total number of times an error was ignored due to configuration,-1,envoy,,
envoy.http.ext_proc.message_timeouts,count,,message,,[Legacy] Number of times a message failed to receive a response within the configured timeout,-1,envoy,,
envoy.http.ext_proc.rejected_header_mutations,count,,,,[Legacy] Total number of rejected header mutations,-1,envoy,,
envoy.http.ext_proc.override_message_timeout_received,count,,message,,[Legacy] Total number of override_message_timeout messages received,0,envoy,,
envoy.http.ext_proc.override_message_timeout_ignored,count,,message,,[Legacy] Total number of override_message_timeout messages ignored,0,envoy,,
envoy.http.ext_proc.clear_route_cache_ignored,count,,request,,[Legacy] Total number of clear cache requests ignored,0,envoy,,
envoy.http.ext_proc.clear_route_cache_disabled,count,,request,,[Legacy] Total number of clear cache requests that were rejected from being disabled,0,envoy,,
envoy.http.ext_proc.clear_route_cache_upstream_ignored,count,,request,,[Legacy] Total number of clear cache requests that were ignored because the filter was in upstream mode,0,envoy,,
envoy.http.ext_proc.send_immediate_resp_upstream_ignored,count,,request,,[Legacy] Total number of send immediate response messages that were ignored because the filter was in upstream mode,0,envoy,,
envoy.http.rbac_allowed.count,count,,request,,[OpenMetrics V2] Total requests that were allowed access,-1,envoy,,
envoy.http.rbac_denied.count,count,,request,,[OpenMetrics V2] Total requests that were denied access,-1,envoy,,
envoy.http.rbac_shadow_allowed.count,count,,request,,[OpenMetrics V2] Total requests that would be allowed access by the filter's shadow rules,-1,envoy,,
Expand Down
15 changes: 15 additions & 0 deletions envoy/tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,21 @@
"http.downstream_rq_tx_reset.count",
"http.downstream_rq_ws_on_non_ws_route.count",
"http.downstream_rq_xx.count",
"http.ext_proc.streams_started.count",
"http.ext_proc.stream_msgs_sent.count",
"http.ext_proc.stream_msgs_received.count",
"http.ext_proc.spurious_msgs_received.count",
"http.ext_proc.streams_closed.count",
"http.ext_proc.streams_failed.count",
"http.ext_proc.failure_mode_allowed.count",
"http.ext_proc.message_timeouts.count",
"http.ext_proc.rejected_header_mutations.count",
"http.ext_proc.override_message_timeout_received.count",
"http.ext_proc.override_message_timeout_ignored.count",
"http.ext_proc.clear_route_cache_ignored.count",
"http.ext_proc.clear_route_cache_disabled.count",
"http.ext_proc.clear_route_cache_upstream_ignored.count",
"http.ext_proc.send_immediate_resp_upstream_ignored.count",
"http.no_cluster.count",
"http.no_route.count",
"http.passthrough_internal_redirect_bad_location.count",
Expand Down
23 changes: 23 additions & 0 deletions envoy/tests/docker/api_v3/front-envoy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ static_resources:
envoy.filters.http.ext_authz:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute
disabled: true
envoy.filters.http.ext_proc:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExtProcPerRoute
disabled: true
- match:
prefix: "/ratelimit/service/1"
route:
Expand Down Expand Up @@ -122,6 +125,13 @@ static_resources:
grpc_service:
envoy_grpc:
cluster_name: ratelimiter
- name: envoy.filters.http.ext_proc
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor
failure_mode_allow: true
grpc_service:
envoy_grpc:
cluster_name: ext-proc
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
Expand Down Expand Up @@ -202,6 +212,19 @@ static_resources:
# This timeout controls the initial TCP handshake timeout - not the timeout for the
# entire request.
connect_timeout: 0.25s
- name: ext-proc
type: static
connect_timeout: 0.25s
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: ext-proc
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 10004
dynamic_resources:
cds_config:
resource_api_version: V3
Expand Down
15 changes: 15 additions & 0 deletions envoy/tests/fixtures/legacy/stat_prefix_ext_proc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
http.bar.ext_proc.streams_started: 0
http.bar.ext_proc.stream_msgs_sent: 1
http.bar.ext_proc.stream_msgs_received: 2
http.bar.ext_proc.spurious_msgs_received: 3
http.bar.ext_proc.streams_closed: 4
http.bar.ext_proc.streams_failed: 5
http.bar.ext_proc.failure_mode_allowed: 6
http.bar.ext_proc.message_timeouts: 7
http.bar.ext_proc.rejected_header_mutations: 8
http.bar.ext_proc.override_message_timeout_received: 9
http.bar.ext_proc.override_message_timeout_ignored: 10
http.bar.ext_proc.clear_route_cache_ignored: 11
http.bar.ext_proc.clear_route_cache_disabled: 12
http.bar.ext_proc.clear_route_cache_upstream_ignored: 13
http.bar.ext_proc.send_immediate_resp_upstream_ignored: 14
20 changes: 19 additions & 1 deletion envoy/tests/legacy/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,32 @@
}
ENVOY_VERSION = os.getenv('ENVOY_VERSION')

EXT_METRICS = [
EXT_AUTHZ_METRICS = [
"envoy.cluster.ext_authz.denied",
"envoy.cluster.ext_authz.disabled",
"envoy.cluster.ext_authz.error",
"envoy.cluster.ext_authz.failure_mode_allowed",
"envoy.cluster.ext_authz.ok",
]

EXT_PROC_METRICS = [
"envoy.http.ext_proc.streams_started",
"envoy.http.ext_proc.stream_msgs_sent",
"envoy.http.ext_proc.stream_msgs_received",
"envoy.http.ext_proc.spurious_msgs_received",
"envoy.http.ext_proc.streams_closed",
"envoy.http.ext_proc.streams_failed",
"envoy.http.ext_proc.failure_mode_allowed",
"envoy.http.ext_proc.message_timeouts",
"envoy.http.ext_proc.rejected_header_mutations",
"envoy.http.ext_proc.override_message_timeout_received",
"envoy.http.ext_proc.override_message_timeout_ignored",
"envoy.http.ext_proc.clear_route_cache_ignored",
"envoy.http.ext_proc.clear_route_cache_disabled",
"envoy.http.ext_proc.clear_route_cache_upstream_ignored",
"envoy.http.ext_proc.send_immediate_resp_upstream_ignored",
]

LOCAL_RATE_LIMIT_METRICS = [
"envoy.http_local_rate_limit.enabled",
"envoy.http_local_rate_limit.enforced",
Expand Down
4 changes: 2 additions & 2 deletions envoy/tests/legacy/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
from datadog_checks.dev.utils import get_metadata_metrics
from datadog_checks.envoy.metrics import METRIC_PREFIX, METRICS

from .common import ENVOY_VERSION, EXT_METRICS, INSTANCES, RBAC_METRICS
from .common import ENVOY_VERSION, EXT_AUTHZ_METRICS, INSTANCES, RBAC_METRICS

CHECK_NAME = 'envoy'
UNIQUE_METRICS = EXT_METRICS + RBAC_METRICS
UNIQUE_METRICS = EXT_AUTHZ_METRICS + RBAC_METRICS

pytestmark = [pytest.mark.integration, pytest.mark.usefixtures('dd_environment'), pytest.mark.flaky]

Expand Down
27 changes: 18 additions & 9 deletions envoy/tests/legacy/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
CONNECTION_LIMIT_METRICS,
CONNECTION_LIMIT_STAT_PREFIX_TAG,
ENVOY_VERSION,
EXT_METRICS,
EXT_AUTHZ_METRICS,
EXT_PROC_METRICS,
FLAVOR,
HOST,
INSTANCES,
Expand Down Expand Up @@ -261,11 +262,17 @@ def test_metadata_not_collected(datadog_agent, check):
('fixture_file', 'metrics', 'standard_tags', 'optional_tags'),
[
(
'./legacy/stat_prefix',
EXT_METRICS,
'./legacy/stat_prefix_ext_authz',
EXT_AUTHZ_METRICS,
['cluster_name:foo', 'envoy_cluster:foo'],
['stat_prefix:bar'],
),
(
'./legacy/stat_prefix_ext_proc',
EXT_PROC_METRICS,
['stat_prefix:bar'],
[],
),
(
'./legacy/rbac_enforce_metrics.txt',
RBAC_ENFORCE_METRICS,
Expand All @@ -280,7 +287,8 @@ def test_metadata_not_collected(datadog_agent, check):
),
],
ids=[
"stats_prefix_ext_auth",
"stats_prefix_ext_authz",
"stats_prefix_ext_proc",
"rbac_enforce_metrics",
"rbac_shadow_metrics",
],
Expand Down Expand Up @@ -309,11 +317,12 @@ def test_stats_prefix_optional_tags(
aggregator.assert_metric(metric, value=index, tags=standard_tags)

# With optional tags.
aggregator.assert_metric(
metric,
value=index + len(metrics),
tags=standard_tags + optional_tags,
)
if len(optional_tags) > 0:
aggregator.assert_metric(
metric,
value=index + len(metrics),
tags=standard_tags + optional_tags,
)


def test_local_rate_limit_metrics(aggregator, fixture_path, mock_http_response, check, dd_run_check):
Expand Down
Loading
Loading