vector/internal_events/
expansion.rs

1use metrics::counter;
2use vector_lib::internal_event::{error_stage, error_type};
3use vector_lib::internal_event::{ComponentEventsDropped, InternalEvent, UNINTENTIONAL};
4
5pub struct PairExpansionError<'a> {
6    pub key: &'a str,
7    pub value: &'a str,
8    pub drop_event: bool,
9    pub error: serde_json::Error,
10}
11
12impl InternalEvent for PairExpansionError<'_> {
13    fn emit(self) {
14        let message = format!("Failed to expand key: `{}`:`{}`", self.key, self.value);
15
16        if self.drop_event {
17            error!(
18                message = %message,
19                error = %self.error,
20                error_type = error_type::PARSER_FAILED,
21                stage = error_stage::PROCESSING,
22                internal_log_rate_limit = true,
23            );
24
25            counter!(
26                "component_errors_total",
27                "error_type" => error_type::PARSER_FAILED,
28                "stage" => error_stage::PROCESSING,
29            )
30            .increment(1);
31
32            emit!(ComponentEventsDropped::<UNINTENTIONAL> {
33                count: 1,
34                reason: &message,
35            });
36        } else {
37            warn!(
38                message = %message,
39                error = %self.error,
40                error_type = error_type::PARSER_FAILED,
41                stage = error_stage::PROCESSING,
42                internal_log_rate_limit = true,
43            );
44        }
45    }
46}