Skip to content

Commit 0269457

Browse files
author
Christoph Butz
committed
[aks-preview] Add OpenTelemetry gRPC ports for metrics and logs/traces
Adds --opentelemetry-metrics-port-grpc and --opentelemetry-logs-traces-port-grpc (preview) to 'az aks create/update', wiring the new grpc_port field on the appMonitoring OpenTelemetry profiles (API 2026-04-02-preview). - Validation: all four OTLP ports (metrics/logs x http/grpc) must be in 1..65535 and distinct; grpc ports follow the same enable/disable gating as the http ports. - Disable paths now clear both http_port and grpc_port, including when the parent Azure Monitor metrics/logs are disabled. - Adds unit, validator, and live integration coverage; bumps version to 21.0.0b8 and updates HISTORY.
1 parent af3ae21 commit 0269457

9 files changed

Lines changed: 382 additions & 42 deletions

File tree

src/aks-preview/HISTORY.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ To release a new version, please select a new version number (usually plus 1 to
1212
Pending
1313
+++++++
1414

15+
* `az aks create` and `az aks update`: Add `--opentelemetry-metrics-port-grpc` and `--opentelemetry-logs-traces-port-grpc` (preview) to configure the gRPC ports for OpenTelemetry metrics and logs/traces collection, in addition to the existing HTTP/protobuf ports.
16+
* `az aks create` and `az aks update`: Rename the OpenTelemetry parameters, keeping the previous names as deprecated aliases: `--opentelemetry-metrics-port` -> `--opentelemetry-metrics-port-http`, `--opentelemetry-logs-port` -> `--opentelemetry-logs-traces-port-http`, `--enable-opentelemetry-logs` -> `--enable-opentelemetry-logs-traces`, `--disable-opentelemetry-logs` -> `--disable-opentelemetry-logs-traces`.
17+
1518
21.0.0b9
1619
++++++++
1720
* Update the minimum required cli core version to `2.85.0` (actually required since `20.0.0b5`).

src/aks-preview/azext_aks_preview/_help.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,9 @@
633633
- name: --opentelemetry-metrics-port-http
634634
type: int
635635
short-summary: HTTP/protobuf port for OpenTelemetry metrics collection (default port will be used if not specified)
636+
- name: --opentelemetry-metrics-port-grpc
637+
type: int
638+
short-summary: gRPC port for OpenTelemetry metrics collection (default port will be used if not specified)
636639
- name: --disable-opentelemetry-metrics
637640
type: bool
638641
short-summary: Disable OpenTelemetry metrics collection
@@ -642,6 +645,9 @@
642645
- name: --opentelemetry-logs-traces-port-http
643646
type: int
644647
short-summary: HTTP/protobuf port for OpenTelemetry logs and traces collection (default port will be used if not specified)
648+
- name: --opentelemetry-logs-traces-port-grpc
649+
type: int
650+
short-summary: gRPC port for OpenTelemetry logs and traces collection (default port will be used if not specified)
645651
- name: --disable-opentelemetry-logs-traces
646652
type: bool
647653
short-summary: Disable OpenTelemetry logs and traces collection
@@ -831,6 +837,8 @@
831837
text: az aks create -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-metrics --opentelemetry-metrics-port-http 8888 --enable-azuremonitormetrics
832838
- name: Create a kubernetes cluster with OpenTelemetry logs and traces on custom port
833839
text: az aks create -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-logs-traces --opentelemetry-logs-traces-port-http 4317 --enable-azure-monitor-logs
840+
- name: Create a kubernetes cluster with OpenTelemetry metrics on custom HTTP and gRPC ports
841+
text: az aks create -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-metrics --opentelemetry-metrics-port-http 8888 --opentelemetry-metrics-port-grpc 8889 --enable-azuremonitormetrics
834842
- name: Create a kubernetes cluster with a nodepool having ip allocation mode set to "StaticBlock"
835843
text: az aks create -g MyResourceGroup -n MyManagedCluster --os-sku Ubuntu --max-pods MaxPodsPerNode --network-plugin azure --vnet-subnet-id /subscriptions/00000/resourceGroups/AnotherResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/NodeSubnet --pod-subnet-id /subscriptions/00000/resourceGroups/AnotherResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/PodSubnet --pod-ip-allocation-mode StaticBlock
836844
- name: Create a kubernetes cluster with a VirtualMachines nodepool
@@ -1376,6 +1384,9 @@
13761384
- name: --opentelemetry-metrics-port-http
13771385
type: int
13781386
short-summary: HTTP/protobuf port for OpenTelemetry metrics collection (default port will be used if not specified)
1387+
- name: --opentelemetry-metrics-port-grpc
1388+
type: int
1389+
short-summary: gRPC port for OpenTelemetry metrics collection (default port will be used if not specified)
13791390
- name: --disable-opentelemetry-metrics
13801391
type: bool
13811392
short-summary: Disable OpenTelemetry metrics collection
@@ -1385,6 +1396,9 @@
13851396
- name: --opentelemetry-logs-traces-port-http
13861397
type: int
13871398
short-summary: HTTP/protobuf port for OpenTelemetry logs and traces collection (default port will be used if not specified)
1399+
- name: --opentelemetry-logs-traces-port-grpc
1400+
type: int
1401+
short-summary: gRPC port for OpenTelemetry logs and traces collection (default port will be used if not specified)
13881402
- name: --disable-opentelemetry-logs-traces
13891403
type: bool
13901404
short-summary: Disable OpenTelemetry logs and traces collection
@@ -1635,6 +1649,8 @@
16351649
text: az aks update -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-metrics --opentelemetry-metrics-port-http 8888
16361650
- name: Configure OpenTelemetry logs and traces with custom port
16371651
text: az aks update -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-logs-traces --opentelemetry-logs-traces-port-http 4317
1652+
- name: Configure OpenTelemetry metrics with custom HTTP and gRPC ports
1653+
text: az aks update -g MyResourceGroup -n MyManagedCluster --enable-opentelemetry-metrics --opentelemetry-metrics-port-http 8888 --opentelemetry-metrics-port-grpc 8889
16381654
- name: Disable OpenTelemetry metrics collection on an existing cluster
16391655
text: az aks update -g MyResourceGroup -n MyManagedCluster --disable-opentelemetry-metrics
16401656
- name: Disable OpenTelemetry logs and traces collection on an existing cluster

src/aks-preview/azext_aks_preview/_params.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,12 @@ def load_arguments(self, _):
11731173
type=int,
11741174
help="HTTP/protobuf port for OpenTelemetry metrics collection"
11751175
)
1176-
1176+
c.argument("opentelemetry_metrics_port_grpc",
1177+
options_list=["--opentelemetry-metrics-port-grpc"],
1178+
is_preview=True,
1179+
type=int,
1180+
help="gRPC port for OpenTelemetry metrics collection"
1181+
)
11771182
c.argument("disable_opentelemetry_metrics",
11781183
is_preview=True,
11791184
action="store_true",
@@ -1209,7 +1214,12 @@ def load_arguments(self, _):
12091214
type=int,
12101215
help="HTTP/protobuf port for OpenTelemetry logs and traces collection"
12111216
)
1212-
1217+
c.argument("opentelemetry_logs_traces_port_grpc",
1218+
options_list=["--opentelemetry-logs-traces-port-grpc"],
1219+
is_preview=True,
1220+
type=int,
1221+
help="gRPC port for OpenTelemetry logs and traces collection"
1222+
)
12131223
c.argument("disable_opentelemetry_logs",
12141224
options_list=["--disable-opentelemetry-logs-traces"],
12151225
is_preview=True,
@@ -1807,7 +1817,12 @@ def load_arguments(self, _):
18071817
type=int,
18081818
help="HTTP/protobuf port for OpenTelemetry metrics collection"
18091819
)
1810-
1820+
c.argument("opentelemetry_metrics_port_grpc",
1821+
options_list=["--opentelemetry-metrics-port-grpc"],
1822+
is_preview=True,
1823+
type=int,
1824+
help="gRPC port for OpenTelemetry metrics collection"
1825+
)
18111826
c.argument("disable_opentelemetry_metrics",
18121827
is_preview=True,
18131828
action="store_true",
@@ -1843,7 +1858,12 @@ def load_arguments(self, _):
18431858
type=int,
18441859
help="HTTP/protobuf port for OpenTelemetry logs and traces collection"
18451860
)
1846-
1861+
c.argument("opentelemetry_logs_traces_port_grpc",
1862+
options_list=["--opentelemetry-logs-traces-port-grpc"],
1863+
is_preview=True,
1864+
type=int,
1865+
help="gRPC port for OpenTelemetry logs and traces collection"
1866+
)
18471867
c.argument("disable_opentelemetry_logs",
18481868
options_list=["--disable-opentelemetry-logs-traces"],
18491869
is_preview=True,

src/aks-preview/azext_aks_preview/_validators.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,24 +1077,31 @@ def validate_location_resource_group_cluster_parameters(namespace):
10771077

10781078

10791079
def validate_opentelemetry_ports(namespace):
1080-
"""Validate that OpenTelemetry metrics and logs ports don't conflict."""
1081-
metrics_port = getattr(namespace, 'opentelemetry_metrics_port', None)
1082-
logs_port = getattr(namespace, 'opentelemetry_logs_port', None)
1083-
1084-
# Check if both ports are specified and are the same
1085-
if metrics_port is not None and logs_port is not None and metrics_port == logs_port:
1086-
raise ArgumentUsageError(
1087-
"OpenTelemetry metrics port and logs port cannot be the same. "
1088-
"Please specify different ports for --opentelemetry-metrics-port-http and --opentelemetry-logs-traces-port-http."
1089-
)
1080+
"""Validate that the OpenTelemetry HTTP and gRPC ports are in range and all distinct."""
1081+
ports = [
1082+
("--opentelemetry-metrics-port-http", getattr(namespace, 'opentelemetry_metrics_port', None)),
1083+
("--opentelemetry-metrics-port-grpc", getattr(namespace, 'opentelemetry_metrics_port_grpc', None)),
1084+
("--opentelemetry-logs-traces-port-http", getattr(namespace, 'opentelemetry_logs_port', None)),
1085+
("--opentelemetry-logs-traces-port-grpc", getattr(namespace, 'opentelemetry_logs_traces_port_grpc', None)),
1086+
]
10901087

10911088
# Validate port ranges
1092-
for port, port_name in [(metrics_port, 'metrics'), (logs_port, 'logs')]:
1089+
for flag, port in ports:
10931090
if port is not None and not (1 <= port <= 65535):
10941091
raise ArgumentUsageError(
1095-
f"OpenTelemetry {port_name} port must be between 1 and 65535, got {port}."
1092+
f"OpenTelemetry port {flag} must be between 1 and 65535, got {port}."
10961093
)
10971094

1095+
# All specified OpenTelemetry ports (HTTP and gRPC, metrics and logs/traces) must be distinct
1096+
specified = [(flag, port) for flag, port in ports if port is not None]
1097+
for i in range(len(specified)):
1098+
for j in range(i + 1, len(specified)):
1099+
if specified[i][1] == specified[j][1]:
1100+
raise ArgumentUsageError(
1101+
"OpenTelemetry ports must all be different. "
1102+
f"{specified[i][0]} and {specified[j][0]} cannot both be set to {specified[i][1]}."
1103+
)
1104+
10981105

10991106
def validate_opentelemetry_metrics_dependencies(namespace):
11001107
"""Validate OpenTelemetry metrics dependencies for create operations."""

src/aks-preview/azext_aks_preview/custom.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,9 +1395,11 @@ def aks_create(
13951395
# opentelemetry parameters
13961396
enable_opentelemetry_metrics=False,
13971397
opentelemetry_metrics_port=None,
1398+
opentelemetry_metrics_port_grpc=None,
13981399
disable_opentelemetry_metrics=False,
13991400
enable_opentelemetry_logs=False,
14001401
opentelemetry_logs_port=None,
1402+
opentelemetry_logs_traces_port_grpc=None,
14011403
disable_opentelemetry_logs=False,
14021404
# opentelemetry deprecated aliases (merged into the parameters above by the validator)
14031405
opentelemetry_metrics_port_deprecated=None,
@@ -1641,9 +1643,11 @@ def aks_update(
16411643
# opentelemetry parameters
16421644
enable_opentelemetry_metrics=False,
16431645
opentelemetry_metrics_port=None,
1646+
opentelemetry_metrics_port_grpc=None,
16441647
disable_opentelemetry_metrics=False,
16451648
enable_opentelemetry_logs=False,
16461649
opentelemetry_logs_port=None,
1650+
opentelemetry_logs_traces_port_grpc=None,
16471651
disable_opentelemetry_logs=False,
16481652
# opentelemetry deprecated aliases (merged into the parameters above by the validator)
16491653
opentelemetry_metrics_port_deprecated=None,

0 commit comments

Comments
 (0)