vector/internal_events/
tag_cardinality_limit.rs1use vector_lib::{
2 NamedInternalEvent, counter, gauge,
3 internal_event::{ComponentEventsDropped, CounterName, GaugeName, INTENTIONAL, InternalEvent},
4};
5
6#[derive(NamedInternalEvent)]
7pub struct TagCardinalityLimitRejectingEvent<'a> {
8 pub metric_name: &'a str,
9 pub tag_key: &'a str,
10 pub tag_value: &'a str,
11 pub include_extended_tags: bool,
12}
13
14impl InternalEvent for TagCardinalityLimitRejectingEvent<'_> {
15 fn emit(self) {
16 debug!(
17 message = "Event containing tag with new value after hitting configured 'value_limit'; discarding event.",
18 metric_name = self.metric_name,
19 tag_key = self.tag_key,
20 tag_value = self.tag_value,
21 );
22 if self.include_extended_tags {
23 counter!(
24 CounterName::TagValueLimitExceededTotal,
25 "metric_name" => self.metric_name.to_string(),
26 "tag_key" => self.tag_key.to_string(),
27 )
28 .increment(1);
29 } else {
30 counter!(CounterName::TagValueLimitExceededTotal).increment(1);
31 }
32
33 emit!(ComponentEventsDropped::<INTENTIONAL> {
34 count: 1,
35 reason: "Tag value limit exceeded."
36 })
37 }
38}
39
40#[derive(NamedInternalEvent)]
41pub struct TagCardinalityLimitRejectingTag<'a> {
42 pub metric_name: &'a str,
43 pub tag_key: &'a str,
44 pub tag_value: &'a str,
45 pub include_extended_tags: bool,
46}
47
48impl InternalEvent for TagCardinalityLimitRejectingTag<'_> {
49 fn emit(self) {
50 debug!(
51 message = "Rejecting tag after hitting configured 'value_limit'.",
52 metric_name = self.metric_name,
53 tag_key = self.tag_key,
54 tag_value = self.tag_value,
55 );
56 if self.include_extended_tags {
57 counter!(
58 CounterName::TagValueLimitExceededTotal,
59 "metric_name" => self.metric_name.to_string(),
60 "tag_key" => self.tag_key.to_string(),
61 )
62 .increment(1);
63 } else {
64 counter!(CounterName::TagValueLimitExceededTotal).increment(1);
65 }
66 }
67}
68
69#[derive(NamedInternalEvent)]
70pub struct TagCardinalityValueLimitReached<'a> {
71 pub key: &'a str,
72}
73
74impl InternalEvent for TagCardinalityValueLimitReached<'_> {
75 fn emit(self) {
76 debug!(
77 message = "Value_limit reached for key. New values for this key will be rejected.",
78 key = %self.key,
79 );
80 counter!(CounterName::ValueLimitReachedTotal).increment(1);
81 }
82}
83
84#[derive(NamedInternalEvent)]
85pub struct TagCardinalityLimitUntracked;
86
87impl InternalEvent for TagCardinalityLimitUntracked {
88 fn emit(self) {
89 debug!(
90 message = "Max tracked keys limit reached; forwarding one or more metric tags without cardinality checks."
91 );
92 counter!(CounterName::TagCardinalityUntrackedEventsTotal).increment(1);
93 }
94}
95
96#[derive(NamedInternalEvent)]
97pub struct TagCardinalityTrackedKeys {
98 pub count: usize,
99}
100
101impl InternalEvent for TagCardinalityTrackedKeys {
102 fn emit(self) {
103 gauge!(GaugeName::TagCardinalityTrackedKeys).set(self.count as f64);
104 }
105}