슬래시, 연간 매출 1억 5천만 달러 돌파

더 알아보기

타입 챌린지: Datadog 로그 미리보기

Datadog용 필터가 적용된 로그 링크 생성 (TypeScript 타입 포함)

슬래시에서는 타입스크립트의 타입 시스템을 활용해 코드의 타입 안전성과 유지보수성을 높일 수 있는 방법을 탐구하는 것을 좋아합니다. 타입 안전성의 모든 활용이 실제로 유용한 것은 아니지만, 우리는 이를 흥미롭고 재미있게 여기며 유지보수성에 영향을 미치지 않는 경우 가끔씩 코드베이스에 "이스터 에그"로 남겨두기도 합니다.

해결책이 있다면 저희에게 보내주시기 바랍니다. engineering@slash.com.

개요

우리는 코드에서 "구조화된" 로그를 정의하고, 해당 로그 위에 대시보드를 구축하고 자동화된 경보를 설정할 수 있게 해주는 대응하는 메트릭을 정의합니다. Datadog에서는 로그 위에 메트릭을 정의하는 것을 로그 메트릭로그 메트릭은 로그에서 메트릭을 도출하는 방법을 결정하기 위해 필터와 집계 규칙과 함께 생성됩니다.

우리 코드베이스에는 새로운 로그와 해당 메트릭을 정의하기 쉽게 해주는 강력한 타입의 헬퍼 세트가 있습니다(오른쪽에 보이는 코드입니다). 또한 DX(개발자 경험)를 위해 "미리보기" 헬퍼도 제공합니다. 개발자가 메트릭에 대한 필터를 구성할 때, 실시간으로 Typescript가 계산하는 URL을 미리 보고 브라우저에서 결과를 확인하여 올바른 필터가 적용되는지 확인할 수 있습니다.

도전

타입 구현 GetDatadogLogPreviewResponse 따라서 우리가 호출할 때 올바른 Datadog URL이 타입을 통해 생성되도록 메트릭 미리보기기존 코드의 URL은 올바르므로 타입 오류를 "수정"해야 합니다.

다음은 Datadog의 문서 로그 검색 구문 작동 방식에 관한 내용입니다. 검색 가능한 모든 로그는 URL로 인코딩 가능하며, 해당 URL은 노출됩니다. 로그용 URL 인코딩 필터의 일반적인 작동 방식은 다음과 같습니다:

  1. 기본 URL은 https://app.datadoghq.com/logs
  2. 단일 쿼리 매개변수가 있습니다 질의 전체 검색 쿼리의 URL 인코딩된 문자열을 지원하는.

아래는 입력 -> 출력이 어떻게 보이는지에 대한 예시 목록입니다. 이 모든 예시는 필터를 URI 인코딩되지 않은 문자열로 나열합니다:

  1. 대상: "apply duration equals 100" -> 출력: 쿼리=@duration:100
  2. 대상: "100보다 큰 지속 시간 적용" -> 출력: 쿼리=@duration:>100
  3. 대상: "apply http.status_code is not 200" -> 출력: query=-@http.status_code:200
  4. 대상: "apply http.status_code는 200 또는 400" -> 출력: 쿼리=(@http.status_code:200 OR @http.status_code:400)
  5. 대상: "apply http.route는 /api/v1/_과 같습니다" -> 출력: query=@http.route:/api/v1/_

Read more from us