CI/CD 및 테스트 모니터
CI/CD 및 테스트 모니터 (CI/CD & Test Monitor)
{% callout %}
다음 Datadog 사이트 사용자를 위한 중요 참고 사항: app.ddog-gov.com, us2.ddog-gov.com
{% alert level="danger" %} 이 제품은 선택한 Datadog 사이트 (Datadog site)에서 지원되지 않아요. ({% placeholder "user-datadog-site-name" /%}). {% /alert %}
{% /callout %}
CI 파이프라인, CI 테스트, 또는 CD 배포용 모니터를 만들려면 먼저 조직에 관련 제품을 활성화해야 해요:
| 모니터 유형 (Monitor type) | 필수 제품 (Required product) |
|---|---|
| CI Pipeline | CI Visibility |
| CI Test | Test Optimization |
| CD Deployments | CD Visibility |
CI/CD 및 테스트 모니터를 사용하면 CI/CD 데이터를 시각화하고 이에 대한 경보를 설정할 수 있어요. 예를 들어 CI Pipeline 모니터를 만들어 실패한 파이프라인이나 작업(job)에 대한 경보를 받을 수 있어요. CI Test 모니터를 만들어 실패했거나 느린 테스트에 대한 경보를 받을 수 있어요.
출처: 문서
본문
모니터 생성 (Monitor creation)
새 모니터를 만들려면 Monitors > New Monitor > CI/CD & Tests로 이동해요.
{% alert level="info" %} 계정당 CI/CD & Test 모니터의 기본 한도는 1000개예요. 이 한도를 해제하려면 지원팀에 문의 (Contact Support)하세요. {% /alert %}
다음 모니터 유형 중 하나를 선택해요:
{% tab title="Pipelines" %}
검색 쿼리 정의 (Define the search query)
- CI Pipeline 탐색기 검색과 같은 로직으로 검색 쿼리를 구성해요.
- CI Pipeline 이벤트 수준을 선택해요:
- Pipeline: 보통 하나 이상의 작업(job)으로 구성된 전체 파이프라인의 실행을 평가해요.
- Stage: 이를 지원하는 CI 공급자에서 하나 이상의 작업 그룹의 실행을 평가해요.
- Job: 명령 그룹의 실행을 평가해요.
- Command: 수동으로 계측된 커스텀 명령 (custom command) 이벤트를 평가해요. 이는 작업에서 실행되는 개별 명령이에요.
- All: 모든 유형의 이벤트를 평가해요.
- CI Pipeline 이벤트 수(count), facet, 또는 measure 중 무엇을 모니터링할지 선택해요:
- CI Pipeline 이벤트 수: 검색 바를 사용하고(선택 사항) facet이나 measure를 선택하지 않아요. Datadog는 선택한 시간대에 걸친 CI Pipeline 이벤트 수를 평가한 다음 이를 임계값 조건과 비교해요.
- Dimension: facet의
Unique value count에 대해 경보를 발생시키려면 dimension(질적 facet)을 선택해요. - Measure: CI Pipeline measure의 숫자 값에 대해 경보를 발생시키려면 measure(정량적 facet)를 선택해요(메트릭 모니터와 유사). 집계(
min,avg,sum,median,pc75,pc90,pc95,pc98,pc99,max)를 선택해요.
- CI Pipeline 이벤트를 여러 차원으로 그룹화해요(선택 사항):
- 쿼리와 일치하는 모든 CI Pipeline 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 1 facet: 상위 1000개 값
- 2 facets: facet당 상위 30개 값(최대 900개 그룹)
- 3 facets: facet당 상위 10개 값(최대 1000개 그룹)
- 4 facets: facet당 상위 5개 값(최대 625개 그룹)
- 쿼리와 일치하는 모든 CI Pipeline 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 경보 그룹화 전략을 구성해요(선택 사항):
- 쿼리에
group by가 있다면 멀티 경보는 그룹 매개변수에 따라 각 소스에 경보를 적용해요. 설정된 조건을 충족하는 각 그룹에 대해 경보 이벤트가 생성돼요. 예를 들어 쿼리를@ci.pipeline.name으로 그룹화하면 오류 수가 많을 때 각 CI Pipeline 이름에 대해 별도의 경보를 받을 수 있어요.
- 쿼리에
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/define-the-search-query.12214d595fe8c6607833982037735145.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/define-the-search-query.12214d595fe8c6607833982037735145.png?auto=format&fit=max&w=850&dpr=2 2x" alt="A query for CI Status:Error that is being set to group by Test Name" /%}
수식과 함수 사용 (Using formulas and functions)
수식과 함수를 사용해 CI Pipeline 모니터를 만들 수 있어요. 예를 들어 이벤트 발생 비율(rate) 에 대한 모니터를 만들 수 있어요. 파이프라인 실패 비율(오류율) 같은 것에요.
다음 예시는 "실패한 파이프라인 이벤트 수"(ci.status=error)를 "전체 파이프라인 이벤트 수"(필터 없음)로 나눈 비율을 계산하는 수식을 사용하는 파이프라인 오류율 모니터예요. ci.pipeline.name으로 그룹화되어 파이프라인당 한 번 경보를 받아요. 자세한 내용은 함수 개요 (Functions Overview)를 참고하세요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/define-the-search-query-fnf.71a1fe114cc0607d86b9a46c70188f4a.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/define-the-search-query-fnf.71a1fe114cc0607d86b9a46c70188f4a.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Monitor being defined with steps a, b, and c, where steps a and b are queries and step c calculates the rate from them." /%}
{% alert level="info" %} 모니터당 평가 수식을 만드는 데는 최대 2개의 쿼리만 사용할 수 있어요. {% /alert %}
{% /tab %}
{% tab title="Tests" %}
검색 쿼리 정의 (Define the search query)
- 일반 모니터 유형: (선택 사항) New Flaky Test, Test Failures, Test Performance 공통 모니터 유형 각각에 대한 템플릿 쿼리를 제공하며, 이를 커스터마이징할 수 있어요. 이 기능에 대해 더 알아보려면 Track new flaky tests를 읽어보세요.
- CI Test 탐색기 검색과 같은 로직으로 검색 쿼리를 구성해요. 예를 들어
myapp테스트 서비스의main브랜치에서 실패한 테스트를 다음 쿼리로 검색할 수 있어요:@test.status:fail @git.branch:main @test.service:myapp. - CI Test 이벤트 수(count), facet, 또는 measure 중 무엇을 모니터링할지 선택해요:
- CI Test 이벤트 수: 검색 바를 사용하고(선택 사항) facet이나 measure를 선택하지 않아요. Datadog는 선택한 시간대에 걸친 CI Pipeline 테스트 이벤트 수를 평가한 다음 이를 임계값 조건과 비교해요.
- Dimension: facet의
Unique value count에 대해 경보를 발생시키려면 dimension(질적 facet)을 선택해요. - Measure: CI Pipeline facet의 숫자 값에 대해 경보를 발생시키려면 measure(정량적 facet)를 선택해요(메트릭 모니터와 유사). 집계(
min,avg,sum,median,pc75,pc90,pc95,pc98,pc99,max)를 선택해요.
- CI Test 이벤트를 여러 차원으로 그룹화해요(선택 사항):
- 쿼리와 일치하는 모든 CI Test 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 1 facet: 상위 1000개 값
- 2 facets: facet당 상위 30개 값(최대 900개 그룹)
- 3 facets: facet당 상위 10개 값(최대 1000개 그룹)
- 4 facets: facet당 상위 5개 값(최대 625개 그룹)
- 쿼리와 일치하는 모든 CI Test 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 경보 그룹화 전략을 구성해요(선택 사항):
- 쿼리에
group by가 있다면 그룹 매개변수에 따라 모든 소스에 대해 경보가 전송돼요. 설정된 조건을 충족하는 각 그룹에 대해 경보 이벤트가 생성돼요. 예를 들어 쿼리를@test.full_name으로 그룹화하면 오류 수가 많을 때 각 CI Test 전체 이름에 대해 별도의 경보를 받을 수 있어요. 테스트 전체 이름은 테스트 스위트와 테스트 이름의 조합이에요. 예:MySuite.myTest. Swift에서는 테스트 전체 이름이 테스트 번들, 스위트, 이름의 조합이에요. 예:MyBundle.MySuite.myTest.
- 쿼리에
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/define-the-search-query.c133262baa3e8253f3c1edb08a4f44bb.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/define-the-search-query.c133262baa3e8253f3c1edb08a4f44bb.png?auto=format&fit=max&w=850&dpr=2 2x" alt="A query for CI Status:Error that is being set to group by Pipeline Name" /%}
다른 매개변수 또는 구성을 가진 테스트 실행 (Test runs with different parameters or configurations)
같은 테스트 전체 이름을 가지지만 다른 테스트 매개변수나 구성을 가진 테스트가 있다면, 모니터 group by에서 @test.fingerprint를 사용해요. 이렇게 하면 특정 테스트 매개변수나 구성으로 테스트 실행에 대해 경보가 트리거돼요. @test.fingerprint를 사용하면 Commit Overview 페이지의 Test Stats, Failed, Flaky Tests 섹션과 같은 세분화 수준을 제공해요.
예를 들어 같은 전체 이름을 가진 테스트가 Chrome에서는 실패했지만 Firefox에서는 통과했다면, fingerprint를 사용하면 Chrome 테스트 실행에 대해서만 경보가 트리거돼요.
이 경우 @test.full_name을 사용하면 테스트가 Firefox에서 통과했더라도 경보가 트리거돼요.
수식과 함수 (Formulas and functions)
수식과 함수를 사용해 CI Test 모니터를 만들 수 있어요. 예를 들어 이벤트 발생 비율(rate) 에 대한 모니터를 만들 수 있어요. 테스트 실패 비율(오류율) 같은 것에요.
다음 예시는 "실패한 테스트 이벤트 수"(@test.status:fail)를 "전체 테스트 이벤트 수"(필터 없음)로 나눈 비율을 계산하는 수식을 사용하는 테스트 오류율 모니터예요. @test.full_name으로 그룹화되어 테스트당 한 번 경보를 받아요. 자세한 내용은 함수 개요 (Functions Overview)를 참고하세요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/define-the-search-query-fnf.18daa42532dfbc11f87b83f1be4bc58b.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/define-the-search-query-fnf.18daa42532dfbc11f87b83f1be4bc58b.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Monitor being defined with steps a, b, and c, where steps a and b are queries and step c calculates the rate from them." /%}
알림에 CODEOWNERS 사용 (Using CODEOWNERS for notifications)
테스트 이벤트에서 사용할 수 있는 CODEOWNERS 정보를 사용해 서로 다른 팀에 알림을 보낼 수 있어요.
아래 예시는 다음 로직으로 알림을 구성해요:
- 테스트 코드 소유자가
MyOrg/my-team이면my-team-channelSlack 채널로 알림을 보내요. - 테스트 코드 소유자가
MyOrg/my-other-team이면my-other-team-channelSlack 채널로 알림을 보내요.
{{#is_match "citest.attributes.test.codeowners" "MyOrg/my-team"}}
@slack-my-team-channel
{{/is_match}}
{{#is_match "citest.attributes.test.codeowners" "MyOrg/my-other-team"}}
@slack-my-other-team-channel
{{/is_match}}
모니터의 Notification message 섹션에서 위 코드 스니펫과 유사한 텍스트를 추가해 모니터 알림을 구성해요. 필요한 만큼 is_match 절을 추가할 수 있어요. Notification 변수에 대한 자세한 내용은 모니터 조건부 변수 (Monitors Conditional Variables)를 참고하세요.
{% /tab %}
{% tab title="Deployments" %}
검색 쿼리 정의 (Define the search query)
- CD Deployments 탐색기 검색과 같은 로직으로 검색 쿼리를 구성해요.
- CD Deployment 이벤트 수(count), facet, 또는 measure 중 무엇을 모니터링할지 선택해요:
- CD Deployment 이벤트 수: 검색 바를 사용하고(선택 사항) facet이나 measure를 선택하지 않아요. Datadog는 선택한 시간대에 걸친 CD Deployment 이벤트 수를 평가한 다음 이를 임계값 조건과 비교해요.
- Dimension: facet의
Unique value count에 대해 경보를 발생시키려면 dimension(질적 facet)을 선택해요. - Measure: CD Deployment measure의 숫자 값에 대해 경보를 발생시키려면 measure(정량적 facet)를 선택해요(메트릭 모니터와 유사). 집계(
min,avg,sum,median,pc75,pc90,pc95,pc98,pc99,max)를 선택해요.
- CD Deployment 이벤트를 여러 차원으로 그룹화해요(선택 사항):
- 쿼리와 일치하는 모든 CD Deployment 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 1 facet: 상위 1000개 값
- 2 facets: facet당 상위 30개 값(최대 900개 그룹)
- 3 facets: facet당 상위 10개 값(최대 1000개 그룹)
- 4 facets: facet당 상위 5개 값(최대 625개 그룹)
- 쿼리와 일치하는 모든 CD Deployment 이벤트는 최대 4개 facet의 값을 기반으로 그룹으로 집계돼요. 차원 한도는 총 차원 수에 따라 달라져요:
- 경보 그룹화 전략을 구성해요(선택 사항):
- 쿼리에
group by가 있다면 멀티 경보는 그룹 매개변수에 따라 각 소스에 경보를 적용해요. 설정된 조건을 충족하는 각 그룹에 대해 경보 이벤트가 생성돼요. 예를 들어 쿼리를@deployment.name으로 그룹화하면 오류 수가 많을 때 각 CD Deployment 이름에 대해 별도의 경보를 받을 수 있어요.
- 쿼리에
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/cd_deployments/define-the-search-query.8b22adff86d49c01c5c58eb4ce82f836.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/cd_deployments/define-the-search-query.8b22adff86d49c01c5c58eb4ce82f836.png?auto=format&fit=max&w=850&dpr=2 2x" alt="A query for Deployment Status:Error that is being set to group by Deployment Name" /%}
수식과 함수 사용 (Using formulas and functions)
수식과 함수를 사용해 CD Deployment 모니터를 만들 수 있어요. 예를 들어 이벤트 발생 비율(rate) 에 대한 모니터를 만들 수 있어요. 배포 실패 비율(오류율) 같은 것에요.
다음 예시는 배포 오류율 모니터를 보여줘요. "실패한 배포 이벤트"(deployment.status:error)를 "전체 배포 이벤트"(필터 없음)로 나눈 비율을 계산하는 수식을 사용하며, deployment.name으로 그룹화되어 각 배포에 대해 개별적으로 경보를 트리거해요. 자세한 내용은 함수 개요 (Functions Overview)를 참고하세요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/cd_deployments/define-the-search-query-fnf.eb8dd5d94ff450625a2e37ba6a94615a.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/cd_deployments/define-the-search-query-fnf.eb8dd5d94ff450625a2e37ba6a94615a.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Monitor being defined with steps a, b, and c, where steps a and b are queries and step c calculates the rate from them." /%}
{% alert level="info" %} 모니터당 평가 수식을 만드는 데는 최대 2개의 쿼리만 사용할 수 있어요. {% /alert %}
{% /tab %}
경보 조건 설정 (Set alert conditions)
- 메트릭이
above,above or equal to,below, 또는below or equal to일 때 트리거 - 지난
5 minutes,15 minutes,1 hour, 또는custom으로1 minute에서2 days사이의 값을 설정하는 동안의 임계값 - Alert threshold
<NUMBER> - Warning threshold
<NUMBER>
고급 경보 조건 (Advanced alert conditions)
고급 경보 옵션(예: evaluation delay)에 대한 자세한 지침은 모니터 구성 (Monitor configuration) 페이지를 참고하세요.
알림 (Notifications)
Configure notifications and automations 섹션에 대한 자세한 지침은 알림 (Notifications) 페이지를 참고하세요.
샘플과 임계값 위반 값 상위 목록 (Samples and breaching values top list)
CI Pipeline, CI Test, 또는 CD Deployments 모니터가 트리거되면 샘플(samples)이나 값(values)을 알림 메시지에 추가할 수 있어요.
| 모니터 설정 (Monitor Setup) | 알림 메시지에 추가 가능한 것 (Can be added to notification message) |
|---|---|
| Ungrouped Simple-Alert count | 최대 10개 샘플. |
| Grouped Simple-Alert count | 최대 10개의 facet 또는 measure 값. |
| Grouped Multi-Alert count | 최대 10개 샘플. |
| Ungrouped Simple-Alert measure | 최대 10개 샘플. |
| Grouped Simple-Alert measure | 최대 10개의 facet 또는 measure 값. |
| Grouped Multi-Alert measure | 최대 10개의 facet 또는 measure 값. |
이것들은 Slack, Jira, webhooks, Microsoft Teams, Pagerduty, 이메일로 전송되는 알림에서 사용할 수 있어요. 참고: 샘플은 복구 알림에는 표시되지 않아요.
샘플을 비활성화하려면 Say what's happening 섹션 하단의 체크박스를 해제해요. 체크박스 옆의 텍스트는 모니터의 그룹화에 기반해요(위에 설명한 대로).
샘플 예시 (Sample examples)
경보 알림에 CI Test 10개 샘플 테이블을 포함해요:
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/10_ci_tests_samples.b69c963248275bf006f0c307afbdd54c.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_tests/10_ci_tests_samples.b69c963248275bf006f0c307afbdd54c.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Top 10 CI Test samples" /%}
경보 알림에 CI Pipeline 10개 샘플 테이블을 포함해요:
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/10_ci_pipelines_samples.fc800283bbd320990116e989192673ac.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/ci_pipelines/10_ci_pipelines_samples.fc800283bbd320990116e989192673ac.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Top 10 CI Pipeline samples" /%}
데이터가 없을 때의 알림 동작 (Notifications behavior when there is no data)
평가 쿼리에 이벤트 수를 사용하는 모니터는 지정된 평가 기간 후 데이터가 없으면 해결되어 알림을 트리거해요. 예를 들어 5분 평가 창으로 파이프라인 오류 수에 대해 경보를 발생시키도록 구성된 모니터는 파이프라인 실행이 없으면 5분 후에 자동으로 해결돼요.
대안으로 Datadog는 비율(formula) 수식을 사용할 것을 권장해요. 예를 들어 파이프라인 실패 수(count)에 대한 모니터 대신, 파이프라인 실패 비율(formula)에 대한 모니터를 사용해요. 예: (파이프라인 실패 수)/(전체 파이프라인 실행 수). 이 경우 데이터가 없으면 분모 (전체 파이프라인 실행 수)가 0이 되어 나눗셈 x/0을 평가할 수 없게 돼요. 모니터는 이를 0으로 평가하는 대신 이전에 알려진 상태를 유지해요.
이렇게 하면 파이프라인 실패의 폭증으로 오류율이 모니터 임계값 위로 올라가 모니터가 트리거된다면, 오류율이 임계값 아래로 내려갈 때까지(그 시점 이후 언제든) 해제되지 않아요.
예시 모니터 (Example monitors)
일반적인 모니터 사용 사례를 아래에 정리해요. 모니터 쿼리는 특정 브랜치, 작성자, 또는 앱 내의 다른 facet을 필터링하도록 수정할 수 있어요.
성능 회귀에 대한 경보 트리거 (Trigger alerts for performance regressions)
duration 메트릭을 사용해 어느 브랜치에서든 파이프라인과 테스트 성능 회귀를 식별할 수 있어요. 이 메트릭에 대해 경보를 설정하면 성능 회귀가 코드베이스에 도입되는 것을 방지할 수 있어요.
{% image source="https://docs.dd-static.net/images/ci/regression_monitor.2db4396154414fefc98c2a1d7e537787.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/ci/regression_monitor.2db4396154414fefc98c2a1d7e537787.png?auto=format&fit=max&w=850&dpr=2 2x" alt="CI pipeline regression monitor" /%}
새 플레이키 테스트 추적 (Track new flaky tests)
테스트 모니터에는 간편한 모니터 설정을 위한 New Flaky Test, Test Failures, Test Performance 공통 모니터 유형이 있어요. 이 모니터는 코드베이스에 새 플레이키(flaky) 테스트가 추가되면 경보를 보내요. 쿼리는 Test Full Name으로 그룹화되므로 같은 새 플레이키 테스트에 대해 두 번 이상 경보를 받지 않아요.
테스트 실행은 같은 커밋 내에서 몇 번의 재시도 후에도 플레이키(flaky) 동작을 보이면 flaky로 표시돼요. 여러 번 플레이키 동작을 보이면(여러 재시도가 실행되었기 때문에), is_flaky 태그가 플레이키로 감지된 첫 번째 테스트 실행에 추가돼요.
테스트 실행은 해당 특정 테스트가 같은 브랜치나 기본 브랜치 내에서 플레이키로 감지된 적이 없으면 new flaky로 표시돼요. new flaky로 감지된 첫 번째 테스트 실행만 is_new_flaky 태그로 표시돼요(재시도 횟수와 무관).
{% image source="https://docs.dd-static.net/images/ci/flaky_test_monitor.d885ba8cb295e29c08e4c5b1bc68f12e.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/ci/flaky_test_monitor.d885ba8cb295e29c08e4c5b1bc68f12e.png?auto=format&fit=max&w=850&dpr=2 2x" alt="CI flaky test monitor" /%}
자세한 내용은 CI 테스트 검색 및 관리 (Search and Manage CI Tests)를 참고하세요.
코드 커버리지 비율 유지 (Maintain code coverage percentage)
커스텀 메트릭 (Custom metrics)(코드 커버리지 비율 같은)을 만들어 모니터 내에서 사용할 수 있어요. 아래 모니터는 코드 커버리지가 특정 비율 아래로 떨어지면 경보를 보내요. 이를 통해 시간이 지나도 테스트 성능을 유지하는 데 도움이 될 수 있어요.
{% image source="https://docs.dd-static.net/images/ci/codecoveragepct_monitor_light.32b301718307fdfd799d5140336c5000.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/ci/codecoveragepct_monitor_light.32b301718307fdfd799d5140336c5000.png?auto=format&fit=max&w=850&dpr=2 2x" alt="CI flaky test monitor" /%}
자세한 내용은 코드 커버리지 (Code Coverage)를 참고하세요.