vector/internal_events/
expansion.rs

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