Skip to content

Commit 154ef43

Browse files
committed
feat(inbound): include srv_port label in server metrics
We include a group/version/kind for inbound server resources, but we do not indicate which specific port the server is applied to. This is important context to understand the inbound proxy's behavior. This change adds a `srv_port` label to inbound server metrics.
1 parent bf002ed commit 154ef43

File tree

7 files changed

+73
-47
lines changed

7 files changed

+73
-47
lines changed

linkerd/app/core/src/metrics.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ pub struct InboundEndpointLabels {
7373

7474
/// A label referencing an inbound `Server` (i.e. for policy).
7575
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
76-
pub struct ServerLabel(pub Arc<policy::Meta>);
76+
pub struct ServerLabel(pub Arc<policy::Meta>, pub u16);
7777

7878
/// Labels referencing an inbound server and authorization.
7979
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
@@ -331,10 +331,11 @@ impl FmtLabels for ServerLabel {
331331
fn fmt_labels(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
332332
write!(
333333
f,
334-
"srv_group=\"{}\",srv_kind=\"{}\",srv_name=\"{}\"",
334+
"srv_group=\"{}\",srv_kind=\"{}\",srv_name=\"{}\",srv_port=\"{}\"",
335335
self.0.group(),
336336
self.0.kind(),
337-
self.0.name()
337+
self.0.name(),
338+
self.1
338339
)
339340
}
340341
}
@@ -351,6 +352,7 @@ impl EncodeLabelSetMut for ServerLabel {
351352
("srv_group", self.0.group()).encode(enc.encode_label())?;
352353
("srv_kind", self.0.kind()).encode(enc.encode_label())?;
353354
("srv_name", self.0.name()).encode(enc.encode_label())?;
355+
("srv_port", self.1).encode(enc.encode_label())?;
354356
Ok(())
355357
}
356358
}

linkerd/app/core/src/transport/labels.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,18 +199,21 @@ mod tests {
199199
negotiated_protocol: None,
200200
}),
201201
([192, 0, 2, 4], 40000).into(),
202-
PolicyServerLabel(Arc::new(Meta::Resource {
203-
group: "policy.linkerd.io".into(),
204-
kind: "server".into(),
205-
name: "testserver".into(),
206-
})),
202+
PolicyServerLabel(
203+
Arc::new(Meta::Resource {
204+
group: "policy.linkerd.io".into(),
205+
kind: "server".into(),
206+
name: "testserver".into(),
207+
}),
208+
40000,
209+
),
207210
);
208211
assert_eq!(
209212
labels.to_string(),
210213
"direction=\"inbound\",peer=\"src\",\
211214
target_addr=\"192.0.2.4:40000\",target_ip=\"192.0.2.4\",target_port=\"40000\",\
212215
tls=\"true\",client_id=\"foo.id.example.com\",\
213-
srv_group=\"policy.linkerd.io\",srv_kind=\"server\",srv_name=\"testserver\""
216+
srv_group=\"policy.linkerd.io\",srv_kind=\"server\",srv_name=\"testserver\",srv_port=\"40000\""
214217
);
215218
}
216219
}

linkerd/app/gateway/src/http/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async fn upgraded_request_remains_relative_form() {
6262

6363
impl svc::Param<ServerLabel> for Target {
6464
fn param(&self) -> ServerLabel {
65-
ServerLabel(policy::Meta::new_default("test"))
65+
ServerLabel(policy::Meta::new_default("test"), 4143)
6666
}
6767
}
6868

linkerd/app/inbound/src/http.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,14 @@ pub mod fuzz {
238238

239239
impl svc::Param<policy::ServerLabel> for Target {
240240
fn param(&self) -> policy::ServerLabel {
241-
policy::ServerLabel(Arc::new(policy::Meta::Resource {
242-
group: "policy.linkerd.io".into(),
243-
kind: "server".into(),
244-
name: "testsrv".into(),
245-
}))
241+
policy::ServerLabel(
242+
Arc::new(policy::Meta::Resource {
243+
group: "policy.linkerd.io".into(),
244+
kind: "server".into(),
245+
name: "testsrv".into(),
246+
}),
247+
1000,
248+
)
246249
}
247250
}
248251

linkerd/app/inbound/src/http/tests.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -655,11 +655,14 @@ async fn grpc_response_class() {
655655
target_addr: "127.0.0.1:80".parse().unwrap(),
656656
policy: metrics::RouteAuthzLabels {
657657
route: metrics::RouteLabels {
658-
server: metrics::ServerLabel(Arc::new(policy::Meta::Resource {
659-
group: "policy.linkerd.io".into(),
660-
kind: "server".into(),
661-
name: "testsrv".into(),
662-
})),
658+
server: metrics::ServerLabel(
659+
Arc::new(policy::Meta::Resource {
660+
group: "policy.linkerd.io".into(),
661+
kind: "server".into(),
662+
name: "testsrv".into(),
663+
}),
664+
80,
665+
),
663666
route: policy::Meta::new_default("default"),
664667
},
665668
authz: Arc::new(policy::Meta::Resource {
@@ -889,11 +892,14 @@ impl svc::Param<policy::AllowPolicy> for Target {
889892

890893
impl svc::Param<policy::ServerLabel> for Target {
891894
fn param(&self) -> policy::ServerLabel {
892-
policy::ServerLabel(Arc::new(policy::Meta::Resource {
893-
group: "policy.linkerd.io".into(),
894-
kind: "server".into(),
895-
name: "testsrv".into(),
896-
}))
895+
policy::ServerLabel(
896+
Arc::new(policy::Meta::Resource {
897+
group: "policy.linkerd.io".into(),
898+
kind: "server".into(),
899+
name: "testsrv".into(),
900+
}),
901+
80,
902+
)
897903
}
898904
}
899905

linkerd/app/inbound/src/policy.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ impl AllowPolicy {
133133

134134
#[inline]
135135
pub fn server_label(&self) -> ServerLabel {
136-
ServerLabel(self.server.borrow().meta.clone())
136+
ServerLabel(self.server.borrow().meta.clone(), self.dst.port())
137137
}
138138

139139
pub fn ratelimit_label(&self, error: &RateLimitError) -> HTTPLocalRateLimitLabels {
@@ -220,7 +220,7 @@ impl ServerPermit {
220220
protocol: server.protocol.clone(),
221221
labels: ServerAuthzLabels {
222222
authz: authz.meta.clone(),
223-
server: ServerLabel(server.meta.clone()),
223+
server: ServerLabel(server.meta.clone(), dst.port()),
224224
},
225225
}
226226
}

linkerd/app/inbound/src/policy/tcp/tests.rs

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ async fn unauthenticated_allowed() {
4343
kind: "serverauthorization".into(),
4444
name: "unauth".into()
4545
}),
46-
server: ServerLabel(Arc::new(Meta::Resource {
47-
group: "policy.linkerd.io".into(),
48-
kind: "server".into(),
49-
name: "test".into()
50-
}))
46+
server: ServerLabel(
47+
Arc::new(Meta::Resource {
48+
group: "policy.linkerd.io".into(),
49+
kind: "server".into(),
50+
name: "test".into()
51+
}),
52+
1000
53+
)
5154
},
5255
}
5356
);
@@ -96,11 +99,14 @@ async fn authenticated_identity() {
9699
kind: "serverauthorization".into(),
97100
name: "tls-auth".into()
98101
}),
99-
server: ServerLabel(Arc::new(Meta::Resource {
100-
group: "policy.linkerd.io".into(),
101-
kind: "server".into(),
102-
name: "test".into()
103-
}))
102+
server: ServerLabel(
103+
Arc::new(Meta::Resource {
104+
group: "policy.linkerd.io".into(),
105+
kind: "server".into(),
106+
name: "test".into()
107+
}),
108+
1000
109+
)
104110
}
105111
}
106112
);
@@ -159,11 +165,14 @@ async fn authenticated_suffix() {
159165
kind: "serverauthorization".into(),
160166
name: "tls-auth".into()
161167
}),
162-
server: ServerLabel(Arc::new(Meta::Resource {
163-
group: "policy.linkerd.io".into(),
164-
kind: "server".into(),
165-
name: "test".into()
166-
})),
168+
server: ServerLabel(
169+
Arc::new(Meta::Resource {
170+
group: "policy.linkerd.io".into(),
171+
kind: "server".into(),
172+
name: "test".into()
173+
}),
174+
1000
175+
),
167176
}
168177
}
169178
);
@@ -219,11 +228,14 @@ async fn tls_unauthenticated() {
219228
kind: "serverauthorization".into(),
220229
name: "tls-unauth".into()
221230
}),
222-
server: ServerLabel(Arc::new(Meta::Resource {
223-
group: "policy.linkerd.io".into(),
224-
kind: "server".into(),
225-
name: "test".into()
226-
})),
231+
server: ServerLabel(
232+
Arc::new(Meta::Resource {
233+
group: "policy.linkerd.io".into(),
234+
kind: "server".into(),
235+
name: "test".into()
236+
}),
237+
1000
238+
),
227239
}
228240
}
229241
);

0 commit comments

Comments
 (0)