측정항목 구성은 원격 분석 서비스가 실행하는 원격 분석 캠페인을 정의합니다. 측정항목 구성은 MetricsConfig 프로토콜 버퍼 (protobuf) 메시지의 인스턴스입니다. 측정항목 구성은 데이터를 수집, 처리, 보고하는 방법을 지정합니다. OEM은 원격 분석 서비스의 API를 통해 측정항목 구성을 활성화할 수 있습니다. 여러 구성을 동시에 실행할 수 있습니다.
시작하기 전에 서비스를 protobuf 메시지로 데이터를 게시하는 서비스 지향 아키텍처인 SDV 아키텍처를 숙지하세요. 이러한 메시지는 RPC 또는 게시-구독을 통해 SDV 통신 스택을 사용하여 통신합니다.
핵심 용어
측정항목 구성 은 데이터 소스, 처리 규칙, 보고 메커니즘을 정의하여 데이터 수집을 오케스트레이션합니다. 이 에지 처리의 주요 이점 중 하나는 모바일 데이터 사용량을 줄이는 것입니다. 기기에서 고주파 데이터를 처리하고 집계 또는 통계만 업로드하면 클라우드로 전송되는 데이터의 양이 크게 줄어듭니다.
측정항목 구성의 정의는 구성에 사용할 데이터 소스 를 나열하는 것으로 시작됩니다. 이러한 서비스는 SDV 통신 스택을 통해 데이터를 제공합니다. 구성을 활성화하면 원격 분석 서비스가 이러한 소스에 연결하여 필요에 따라 데이터를 스트리밍하거나 가져옵니다.
구성의 핵심은 상태 저장 데이터 집계기 를 통해 관리되는 에지 데이터 처리 기능입니다. 각 집계기는 상태 저장 프로토 메시지 인스턴스를 유지하는 메시지 빌더 를 사용합니다. 이 메시지의 각 필드는 표현식을 평가하여 채워지며, 다른 데이터 소스 또는 집계기에서 읽을 데이터와 데이터에 적용할 수학, 논리 또는 집계 작업을 정의합니다. 표현식의 결과에 추가 집계를 적용할 수 있습니다.
트리거 는 이 프로세스를 제어하는 데 핵심적인 역할을 합니다. 새 데이터에 응답하거나 데이터 기반 조건이 충족될 때 주기적으로 실행될 수 있습니다. 트리거는 집계기가 메시지 빌더를 평가하는 시점, 측정항목 보고서가 생성되는 시점을 지시하며 데이터 수집을 시작하거나 중지하는 등 구성 수명 주기에 영향을 미칠 수 있습니다.
측정항목 보고서 는 최종 출력입니다. 각 보고서에는 타임스탬프 및 보고서 ID와 같은 메타데이터와 함께 메시지 빌더에서 정의한 데이터 페이로드가 포함됩니다. 구성이 활성화 또는 비활성화될 때와 같이 특정 구성 수명 주기 시점에 보고서를 생성할 수 있습니다. 생성된 보고서는 메모리에 저장되며 클라이언트는 보고서 상태 알림 채널을 통해 검색 알림을 받습니다.
다음 그림은 구성요소가 측정항목 구성 내에서 상호작용할 수 있는 방법을 보여주는 개념적 예시입니다.
그림 1. 측정항목 구성 내의 데이터 소스, 처리, 보고
측정항목 구성요소
측정항목 구성을 사용하여 데이터 수집 작업과 복잡한 기기 내 처리 파이프라인을 정의할 수 있습니다. 이 섹션에서는 측정항목 캠페인을 정의하는 데 사용되는 핵심 구성요소를 자세히 설명합니다. 구성요소는 입력에서 출력까지 시스템을 통해 데이터가 흐르는 순서대로 표시됩니다. 이러한 구성요소는 순서에 관계없이 정의할 수 있습니다. 집계기를 사용한 데이터 처리 및 수명 주기 관리는 선택사항입니다.
- 데이터 소스 정의
- 집계기를 사용한 데이터 처리
- 트리거를 사용한 실행 흐름 제어
- 측정항목 보고서 생성
- 데이터 수집 수명 주기 관리
데이터 소스 정의
모든 측정항목 캠페인의 기반은 데이터입니다. 측정항목 구성에서 데이터 수신 메커니즘은 추상화되며 데이터 소스를 식별할 수 있는 이름과 연결 모드(구독 또는 주문형)만 지정하면 됩니다. 데이터 소스는 SDV 통신 스택을 통해 데이터를 제공하거나 구성 가능한 게시자 레지스트리에 자체 등록하는 모든 서비스일 수 있으며, 이를 통해 SDV 미들웨어를 사용할 수 없는 앱에서 데이터를 수집할 수 있습니다. 각 데이터 소스는 트리거 또는 집계기와 같은 다른 측정항목 구성요소에서 참조할 수 있도록 구성 내에서 고유한 이름을 가져야 합니다. 연결 방법, 데이터 수신 빈도를 구성하고 서비스별 구성 객체를 제공할 수 있습니다.
데이터 소스 구성
원격 분석 서비스는 다음과 같은 두 가지 방법으로 데이터 소스에 연결할 수 있습니다.
- Getter: 이 메서드는 측정항목 구성에 정의된 표현식이 이 소스에서 데이터를 읽어야 할 때마다 주문형으로 데이터를 가져옵니다. 연속 스트림을 제공하지 않는 데이터 소스 또는 데이터의 스냅샷이 가끔 필요한 경우에 유용합니다.
- 구독: 기본 메서드입니다. 소스에서 연속 데이터 스트림을 설정합니다. 이 소스에서 새 메시지가 도착할 때 트리거되는 데이터 트리거를 사용하려는 경우 이 연결 유형이 필요합니다.
구독을 사용하는 경우 다음을 구성할 수 있습니다.
- 하위 샘플링: 데이터를 너무 자주 수집하지 않으려면 동일한 소스의 연속 메시지 간에 최소 시간 간격을 정의할 수 있습니다. 소스가 이 간격보다 빠르게 데이터를 게시하면 원격 분석 서비스가 알림을 제한하고 데이터 트리거는 제한 후 수신된 메시지에 대해서만 활성화됩니다. 이렇게 하면 데이터가 효과적으로 하위 샘플링됩니다.
- 초기 메시지 검색: 구독을 설정할 때 소스에서 가장 최근 메시지를 검색하도록 서비스를 구성할 수 있습니다. 따라서 첫 번째 새 메시지가 게시될 때까지 기다리는 대신 사용 가능한 값이 있으면 데이터 소스가 즉시 채워집니다. 초기 상태가 필요한 조건부 트리거 또는 집계기 또는 데이터 소스가 자주 게시되지 않는 경우에 유용합니다.
유형에 관계없이 메시지는 내부적으로 캐시됩니다. 단일 평가 주기 동안 여러 표현식 또는 집계기에 동일한 소스의 데이터가 필요한 경우 시스템은 구독을 사용하여 새 메시지가 도착한 경우 캐시에서 또는 단일 주문형 호출을 사용하여 데이터를 한 번만 가져옵니다.
집계기를 사용한 데이터 처리
데이터 소스는 원시 데이터를 제공하지만 집계기는 상태 저장 에지 데이터 처리를 실행합니다. 데이터 소스 또는 다른 집계기에서 데이터를 사용하고 변환하여 측정항목 보고서에서 읽거나 다른 집계기에서 추가로 처리할 수 있도록 결과를 제공합니다. 이를 통해 다단계 처리 파이프라인을 빌드할 수 있습니다. 예를 들어 한 집계기에서 속도 통계를 계산하고 운전 행동 패턴을 감지하는 다른 구성요소에서 해당 통계를 사용할 수 있습니다.
집계기는 하나 이상의 트리거에 의해 계산을 실행하도록 트리거됩니다. 트리거 중 하나가 실행될 때마다 집계기는 규칙을 평가하고 내부 상태를 업데이트합니다.
다른 구성요소에서 값을 읽은 후 상태를 재설정하도록 집계기를 구성할 수 있습니다. 이는 겹치지 않는 시간 창에서 통계를 계산하는 데 유용합니다.
메시지 빌더는 집계기의 구조와 로직을 정의합니다. 메시지 빌더는 각 필드의 데이터를 생성하는 방법을 설명하여 프로토 메시지의 인스턴스를 구성하는 방법을 지정합니다. 각 필드에 대해 표현식은 데이터 소스 및 집계기에서 데이터를 읽고 이 데이터에 작업을 적용하는 방법을 정의합니다. 또한 시간에 따라 표현식의 결과에 적용되는 계산 또는 수집 작업인 집계를 적용할 수 있습니다.
다음 집계 유형이 지원됩니다.
- 수학: 각 트리거의 표현식에서 반환된 값에 대한 통계 (평균, 최솟값, 최댓값, 합계, 표준편차, 델타)를 계산합니다. 델타는 표현식에서 반환된 현재 숫자 값과 이전 숫자 값의 차이입니다.
- 목록: 표현식에서 반환된 값을 목록으로 수집합니다. 목록 크기를 제한하여 최근 값의 롤링 창 (링 버퍼)을 만들 수 있습니다.
- 개수: 표현식이 지정되지 않은 특수한 경우입니다. 필드가 평가되는 횟수 (즉, 집계기 또는 보고서가 트리거되는 횟수)를 계산합니다.
- 통과: 집계를 적용하지 않고 표현식의 결과를 직접 사용합니다. 집계기에서 최종 값에 액세스하기 위한 보고서 구성에 유용합니다.
다음 그림은 집계기 평가를 보여주는 개념적 다이어그램입니다.
그림 2. 집계기 평가
표현식을 사용하여 계산 실행 또는 조건 정의
표현식은 계산을 실행하거나 조건을 정의하기 위해 메시지 빌더 및 조건부 트리거 내에서 사용됩니다. 측정항목 구성 생성기 (MCG)를 사용하여 측정항목 구성 JSON 객체를 작성할 때 표현식은 점 표기법을 사용하여 데이터 소스의 필드에 액세스하고 (예: vehicle_speed.speed_value) 광범위한 작업을 적용하는 사람이 읽을 수 있는 문자열로 작성됩니다. MCG는 이러한 문자열을 추상 구문 트리 (AST)와 유사한 최적화된 트리 구조로 변환하여 최종 MetricsConfig protobuf 메시지에서 효율적인 기기 내 평가를 실행합니다.
연산자 및 함수
표현식은 다음 연산자 및 함수 집합을 지원합니다.
- 산술: 덧셈, 뺄셈 (이항 및 단항), 곱셈, 나눗셈, 모듈로, 거듭제곱을 지원합니다.
- 논리: AND, OR, NOT, XOR을 지원합니다.
- 관계형: 같음 확인, 보다 큼, 보다 작음 비교를 지원합니다.
- 목록: 목록에 특정 값이 포함되어 있는지 확인합니다.
- 타임스탬프: 평가 시점의 타임스탬프를 마이크로초 단위로 반환합니다. 시계 유형은 실시간 시계, 부팅 후 단조 시간 (일시중단 시간 포함), 부팅 후 단조 시간 또는 마지막 재개일 수 있습니다.
- 절댓값: 숫자의 절댓값을 반환합니다.
- 반올림: 가장 가까운 정수로 반올림 (
round), 숫자보다 작거나 같은 가장 큰 정수를 반환 (floor), 숫자보다 크거나 같은 가장 작은 정수를 반환 (ceil)합니다.
다음은 두 데이터 소스에서 읽고 차량 속도가 시속 100km를 초과하고 타이어 공기압 경고가 없는 경우 true로 평가되는 표현식의 예입니다.
(vehicle_speed.speed_value * 3.6) > 100 && tire_pressure.warning == false
트리거를 사용한 실행 흐름 제어
트리거는 측정항목 구성의 오케스트레이터입니다. 데이터가 처리되는 시점과 보고서가 생성되는 시점을 제어합니다. 각 트리거에는 고유한 이름이 있어야 합니다.
트리거에는 세 가지 유형이 있습니다.
- 데이터 트리거: 구독 연결이 있는 데이터 소스가 새 메시지를 게시할 때 실행됩니다 (구성된 경우 서브 샘플링 후).
- 주기적 트리거: 고정된 시간 간격으로 실행됩니다.
- 조건부 트리거: 지정된 논리적 조건이 충족될 때 실행됩니다.
조건부 트리거
조건부 트리거는 다른 트리거 (데이터, 주기적 또는 기타 조건부 트리거)를 수신 대기하고 이러한 트리거 중 하나가 실행되면 표현식을 평가합니다. 조건부 트리거는 표현식의 결과가 특정 조건을 충족하는 경우에만 실행됩니다.
여러 조건 유형에 따라 실행되도록 조건부 트리거를 구성할 수 있습니다.
- 값: 표현식이
true(또는 0이 아닌 값) 또는false(또는 0)로 평가되는 경우. - 상승 에지: 불리언 표현식이
false에서true로 변경되거나 숫자 값이 증가하는 경우. - 하강 에지: 불리언 표현식이
true에서false로 변경되거나 숫자 값이 감소하는 경우. - 변경 시: 표현식의 결과가 이전 값과 다를 때마다.
노이즈가 많은 상태 변경 필터링
에지 기반 또는 변경 시 트리거의 경우 트리거가 실행되기 전에 조건이 최소 기간 동안 새 상태로 유지되도록 요구하여 짧거나 노이즈가 많은 상태 변경 (글리치)을 필터링할 수 있습니다.
예를 들어 vehicle_speed > 100
이 true가 되고 5초 이상 true로 유지되는 경우에만 트리거가 실행되도록 구성할 수 있습니다. 이렇게 하면 속도 판독값의 순간적인 급증으로 인해 트리거가 실행되지 않습니다. 이 유지 기간 동안 표시되는 모든 값이 정확히 동일하도록 요구할 수도 있습니다.
측정항목 보고서 생성
데이터가 처리된 후 보고서에 패키징되는 방법과 시점을 정의합니다.
보고서는 메시지 빌더를 사용하여 출력의 구조와 콘텐츠를 정의하는 측정항목 보고서 구성을 사용하여 정의됩니다. 보고서의 트리거 중 하나가 실행되면 메시지 빌더는 필드 할당을 평가하여 보고서의 데이터 페이로드를 구성합니다.
생성된 각 보고서는 MetricsReport Protobuf 메시지의 인스턴스로, 메시지 빌더의 출력을 payload 필드에 래핑하고 메타데이터를 추가합니다. 원격 분석 서비스는 각 MetricsReport에 다음 메타데이터를 자동으로 추가합니다.
- 보고서의 범용 고유 식별자 (UUID)
- 이 보고서 구성으로 생성된 각 보고서에 대해 증가하는 순차 보고서 번호
- 보고서가 생성된 때의 타임스탬프
- 생성 이유 (예: 규칙에 의해 트리거됨 또는 종료 시 생성됨)
- 보고서를 생성한 측정항목 구성의 UUID 및 버전
- 측정항목 보고서 구성의 이름
보고서 생성 제어
보고서는 일반적으로 트리거에 응답하여 생성되지만 측정항목 구성의 특정 수명 주기 시점에 생성되도록 구성할 수도 있습니다.
- 활성화 시 보고서: 사용 설정된 경우 측정항목 구성이 활성화될 때 시스템에서 초기 보고서를 즉시 생성합니다.
- 최종 보고서: 사용 설정된 경우 데이터 수집이 일시중지되거나 중지되거나 원격 분석 서비스가 종료될 때 시스템에서 최종 보고서를 생성합니다. 이 보고서에는 해당 시점까지 집계된 데이터가 포함되어 세션 종료 시 데이터가 손실되지 않도록 합니다.
데이터 수집 수명 주기 관리
기본적으로 측정항목 구성은 클라이언트에 의해 활성화되는 즉시 데이터 수집 및 처리를 시작하고 클라이언트에 의해 비활성화될 때까지 계속됩니다. 하지만 데이터 수집 또는 측정항목 구성을 시작하거나 중지하는 트리거를 정의하여 이 수명 주기를 더 세부적으로 제어할 수 있습니다.
- 시작 트리거: 정의된 경우 이 트리거가 실행될 때만 데이터 수집이 시작됩니다. 중지 트리거에 의해 수집이 일시중지된 경우 시작 트리거가 수집을 재개합니다.
- 중지 트리거: 정의된 경우 이 트리거는 데이터 수집을 일시중지합니다. 집계 및 보고서 생성이 시작 트리거가 다시 실행될 때까지 중지됩니다.
- 비활성화 트리거: 이 트리거는 클라이언트의
deactivate_metrics_config호출과 동일한 방식으로 측정항목 구성을 비활성화합니다.
예를 들어 vehicle_state가 DRIVING으로 변경될 때 실행되는 조건부 트리거를 시작 트리거로 정의하고 vehicle_state가 PARKED로 변경될 때 실행되는 다른 트리거를 중지 트리거로 정의할 수 있습니다. 이렇게 하면 차량이 이동하는 동안에만 데이터가 수집됩니다.