Duo 워크플로
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed
요약
이 데이터 소스는 GitLab Duo Agent Platform 플로 분석 엔진에서 데이터를 읽으며, 이 엔진은 dap_impact_v1이라는 기능 플래그로 제어됩니다. 이 데이터 소스는 프로젝트 또는 그룹 전체에서 실행된 GitLab Duo Agent Platform 플로 (Duo 워크플로라고도 함)에 대한 집계 지표를 제공하며, 플로가 사용한 크레딧 수도 포함합니다.
히스토리
- GitLab 19.5에서 실험 기능으로 도입되었습니다.
model차원이 GitLab 19.5에서 도입되었습니다.status필터와 차원, 그리고flowTypesCount,returningUsersCount,joinedUsersCount,churnedUsersCount,previousPeriodUsersCount,createdMrCount,mergedMrCount,closedMrCount지표가 GitLab 19.5에서 도입되었습니다.userTier차원과flowTypesUsed,activeDays필터가 GitLab 19.5에서 도입되었습니다.totalCount의status매개변수가 GitLab 19.5에서 도입되었습니다.group차원이 GitLab 19.5에서 도입되었습니다.openMrCount지표가 GitLab 19.5에서 도입되었습니다.creditsPerMergedMrRatio지표가 GitLab 19.5에서 도입되었습니다.flowType,status,user필터의!=및not in연산자가 GitLab 19.5에서 도입되었습니다.model차원이 GitLab 19.5에서 모델 카탈로그 이름을 표시하도록 변경되었습니다.
이 데이터 소스는 GitLab Duo Agent Platform 플로 분석 엔진에서 데이터를 읽으며, 이 엔진은
dap_impact_v1이라는 기능 플래그로 제어됩니다.
이 플래그는 기본적으로 비활성화되어 있습니다. 관리자가 활성화하기 전까지 쿼리는 오류를 반환합니다.
이 데이터 소스는 프로젝트 또는 그룹 전체에서 실행된 GitLab Duo Agent Platform 플로 (Duo 워크플로라고도 함)에 대한 집계 지표를 제공하며, 플로가 사용한 크레딧 수도 포함합니다.
허용되는 모드#
허용되는 범위#
| 범위 | 설명 |
|---|---|
project |
특정 프로젝트의 GitLab Duo Agent Platform 플로를 쿼리합니다. |
group |
하위 그룹을 포함해 그룹 내 모든 프로젝트의 GitLab Duo Agent Platform 플로를 쿼리합니다. |
여러 그룹 또는 프로젝트에 걸쳐 GitLab Duo 워크플로를 집계하려면 in 연산자와 목록을 사용합니다.
자세한 내용은 여러 그룹 및 프로젝트를 참고합니다.
쿼리 필터#
결과를 필터링하려면 query 매개변수에서 다음 필드를 사용합니다.
| 필드 | 이름(및 별칭) | 연산자 |
|---|---|---|
| 활성 일수 | activeDays |
=, >, <, >=, <= |
| 생성일 | created (opened, openedAt, createdAt) |
=, >, <, >=, <= |
| 플로 유형 | flowType |
=, !=, in, not in |
| 사용한 플로 유형 수 | flowTypesUsed |
=, >, <, >=, <= |
| 상태 | status |
=, !=, in, not in |
| 사용자 | user |
=, !=, in, not in |
활성 일수#
설명: 선택한 기간 동안 사용자가 플로를 생성한 고유한 날짜의 수를 기준으로 플로를 필터링합니다.
activeDays = 1은 정확히 하루만 활동한 사용자와 일치합니다.
허용되는 값 유형: Number
참고:
- 이 수는 선택한 전체 기간을 대상으로 사용자별로 계산합니다.
- 두 개의 범위 연산자를 조합해 구간을 지정할 수 있습니다. 예를 들어
activeDays >= 2 and activeDays <= 5입니다. 단, 같은 필드에서=를 다른 비교와 함께 쓸 수는 없습니다.
생성일#
설명: 플로가 생성된 날짜를 기준으로 플로를 필터링합니다.
특정 기간을 지정하려면 created 조건을 여러 개 사용합니다.
허용되는 값 유형:
AbsoluteDate(YYYY-MM-DD형식)RelativeDate(<sign><digit><unit>형식이며, sign은+,-또는 생략, digit은 정수,unit은d(일),w(주),m(월),y(년) 중 하나)
참고:
=연산자의 경우 GLQL은 사용자의 시간대를 기준으로 00:00부터 23:59까지의 시간 범위를 사용합니다.
플로 유형#
설명: 유형을 기준으로 플로를 필터링합니다.
예: software_development 또는 code_review/v1.
허용되는 값 유형:
StringList(여러 값에는in또는not in연산자 사용)
사용한 플로 유형 수#
설명: 선택한 기간 동안 사용자가 실행한 고유한 플로 유형의 수를 기준으로 플로를 필터링합니다.
flowTypesUsed >= 2는 플로 유형을 두 개 이상 사용한 사용자와 일치합니다.
허용되는 값 유형: Number
참고:
- 이 수는 선택한 전체 기간을 대상으로 사용자별로 계산합니다.
- 같은 조합 규칙이 적용됩니다. 구간에는 두 개의 범위 연산자를 사용하며, 같은 필드에서
=를 다른 비교와 함께 쓸 수는 없습니다.
상태#
설명: 수명 주기 상태를 기준으로 플로를 필터링합니다.
허용되는 값 유형:
Enum, 값은created,running,paused,finished,failed,stopped,input_required,plan_approval_required,tool_call_approval_required중 하나List(여러 값에는in또는not in연산자 사용)
참고:
*_required로 끝나는 세 가지 상태는 사용자를 기다리는 플로이며,paused와는 구분됩니다.- 상태는 대소문자를 구분하지 않고 일치시킵니다.
completed,aborted같은 다른 표기는 허용되지 않습니다.
사용자#
설명: 플로를 실행한 사용자를 기준으로 필터링합니다.
허용되는 값 유형:
Number(사용자 ID)List(여러 사용자 ID에는in또는not in연산자 사용)
사용자 이름 필터링 지원은 이슈 599750에서 추적하고 있습니다.
차원#
| 차원 | 이름 | 설명 |
|---|---|---|
| Created | created |
날짜별로 그룹화합니다. daily, weekly, monthly 또는 30d처럼 일 수를 지정하는 granularity 매개변수(기본값: monthly)와 선택적 origin을 받습니다. 예: created(weekly) 또는 created(granularity=30d, origin=2026-07-16). |
| Flow type | flowType |
플로 유형별로 그룹화합니다. |
| Group | group |
그룹별로 그룹화합니다. 최상위 그룹부터 센 depth 매개변수를 1부터 99까지(기본값: 1) 받으므로, group은 최상위 그룹을 반환하고 group(depth=2)는 그 하위 그룹을 반환합니다. 해당 깊이보다 위에 있는 플로, 또는 하위 그룹이 아니라 그 깊이의 프로젝트에 있는 플로(예: depth=2일 때 최상위 그룹 바로 아래의 프로젝트)에는 그룹이 없으며, 그룹이 없는 행이 결과에 둘 이상 포함될 수 있습니다. |
| Model | model |
플로가 사용한 모델별로 그룹화합니다(모델 카탈로그 이름을 표시). 카탈로그에 없는 모델은 원래 식별자를 표시합니다. 모델 정보가 기록되지 않은 플로에는 이름이 없습니다. 행은 플로가 보고한 모델 식별자 기준으로 그룹화되므로, 하나의 카탈로그 이름이 둘 이상의 행이나 차트 막대에 나타날 수 있습니다. |
| Project | project |
프로젝트별로 그룹화합니다. 프로젝트 범위에 속하지 않는 플로는 프로젝트가 없는 하나의 행으로 묶입니다. |
| Status | status |
플로 상태별로 그룹화합니다. 행은 알파벳순이 아니라 수명 주기 순서로 정렬됩니다. |
| User | user |
사용자별로 그룹화합니다(아바타, 이름, 사용자 이름 표시). |
| User tier | userTier |
사용자가 선택한 전체 기간 동안 실행한 플로 수에 따라 사용자를 그룹화하며, created(weekly) 같은 다른 차원을 함께 선택해도 마찬가지입니다. thresholds 매개변수가 필요하며, 기본값은 없습니다. 이 매개변수는 1 이상의 엄격하게 오름차순인 정수 1개에서 9개로 이루어진 목록입니다. 예를 들어 userTier(thresholds=[4, 25, 100])는 tier_0(플로 4개 미만), tier_1(4개에서 24개), tier_2(25개에서 99개), tier_3(100개 이상)을 반환합니다. 임계값이 하나뿐이면 대괄호 없이 userTier(8)처럼 쓸 수 있습니다. |
지표#
| 지표 | 이름 | 설명 |
|---|---|---|
| Churned users count | churnedUsersCount |
이전 기간에는 플로를 실행했지만 이번 기간에는 실행하지 않은 고유 사용자 수입니다. |
| Closed MR count max | closedMrCountMax |
단일 플로가 생성한 닫힌 머지 리퀘스트의 최대 수입니다. |
| Closed MR count mean | closedMrCountMean |
플로당 생성된 닫힌 머지 리퀘스트의 평균 수입니다. |
| Closed MR count min | closedMrCountMin |
단일 플로가 생성한 닫힌 머지 리퀘스트의 최소 수입니다. |
| Closed MR count quantile | closedMrCountQuantile |
지정한 분위수에서의 플로당 생성된 닫힌 머지 리퀘스트 수입니다. 0.01에서 0.99 사이의 quantile 매개변수(기본값: 0.5)를 받습니다. 예: closedMrCountQuantile(0.95). |
| Closed MR count sum | closedMrCountSum |
모든 플로가 생성한 닫힌 머지 리퀘스트의 총수입니다. |
| Created MR count max | createdMrCountMax |
단일 플로가 생성한 머지 리퀘스트의 최대 수입니다. |
| Created MR count mean | createdMrCountMean |
플로당 생성된 머지 리퀘스트의 평균 수입니다. |
| Created MR count min | createdMrCountMin |
단일 플로가 생성한 머지 리퀘스트의 최소 수입니다. |
| Created MR count quantile | createdMrCountQuantile |
지정한 분위수에서의 플로당 생성된 머지 리퀘스트 수입니다. 0.01에서 0.99 사이의 quantile 매개변수(기본값: 0.5)를 받습니다. 예: createdMrCountQuantile(0.95). |
| Created MR count sum | createdMrCountSum |
모든 플로가 생성한 머지 리퀘스트의 총수입니다. |
| Credits per merged MR ratio | creditsPerMergedMrRatio |
플로가 생성하고 나중에 머지된 머지 리퀘스트당 사용된 크레딧입니다. 머지 리퀘스트를 생성하지 않은 플로를 포함해 모든 플로의 크레딧이 계산됩니다. |
| Credits used max | creditsUsedMax |
단일 플로가 사용한 최대 크레딧입니다. |
| Credits used mean | creditsUsedMean |
플로당 사용된 평균 크레딧입니다. |
| Credits used min | creditsUsedMin |
단일 플로가 사용한 최소 크레딧입니다. |
| Credits used quantile | creditsUsedQuantile |
지정한 분위수에서의 플로당 사용된 크레딧입니다. 0.01에서 0.99 사이의 quantile 매개변수(기본값: 0.5)를 받습니다. 예: creditsUsedQuantile(0.95). |
| Credits used sum | creditsUsedSum |
모든 플로가 사용한 총 크레딧입니다. |
| Flow types count | flowTypesCount |
고유한 플로 유형의 수입니다. |
| Joined users count | joinedUsersCount |
이번 기간에 플로를 실행했지만 이전 기간에는 실행하지 않은 고유 사용자 수입니다. |
| Merged MR count max | mergedMrCountMax |
단일 플로가 생성한 머지된 머지 리퀘스트의 최대 수입니다. |
| Merged MR count mean | mergedMrCountMean |
플로당 생성된 머지된 머지 리퀘스트의 평균 수입니다. |
| Merged MR count min | mergedMrCountMin |
단일 플로가 생성한 머지된 머지 리퀘스트의 최소 수입니다. |
| Merged MR count quantile | mergedMrCountQuantile |
지정한 분위수에서의 플로당 생성된 머지된 머지 리퀘스트 수입니다. 0.01에서 0.99 사이의 quantile 매개변수(기본값: 0.5)를 받습니다. 예: mergedMrCountQuantile(0.95). |
| Merged MR count sum | mergedMrCountSum |
모든 플로가 생성한 머지된 머지 리퀘스트의 총수입니다. |
| Open MR count max | openMrCountMax |
단일 플로가 생성한 열린 머지 리퀘스트의 최대 수입니다. |
| Open MR count mean | openMrCountMean |
플로당 생성된 열린 머지 리퀘스트의 평균 수입니다. |
| Open MR count min | openMrCountMin |
단일 플로가 생성한 열린 머지 리퀘스트의 최소 수입니다. |
| Open MR count quantile | openMrCountQuantile |
지정한 분위수에서의 플로당 생성된 열린 머지 리퀘스트 수입니다. 0.01에서 0.99 사이의 quantile 매개변수(기본값: 0.5)를 받습니다. 예: openMrCountQuantile(0.95). |
| Open MR count sum | openMrCountSum |
모든 플로가 생성한 열린 머지 리퀘스트의 총수입니다. |
| Previous period users count | previousPeriodUsersCount |
이전 기간의 고유 사용자 수입니다. |
| Projects count | projectsCount |
고유한 프로젝트의 수입니다. 프로젝트 범위에 속하지 않는 플로는 계산되지 않으므로, 해당 플로의 행에는 0이 표시됩니다. |
| Returning users count | returningUsersCount |
이전 기간에도 플로를 실행한 고유 사용자 수입니다. |
| Total count | totalCount |
플로의 총수이며, 선택적으로 상태로 필터링할 수 있습니다. 하나 이상의 플로 상태(status 필터와 같은 값)를 지정하는 선택적 status 매개변수를 받습니다. 예: totalCount(status="finished") 또는 totalCount(status=["paused", "input_required"]). 매개변수가 없거나 status=[]이면 모든 플로를 계산합니다. |
| Users count | usersCount |
고유 사용자 수입니다. |
creditsPerMergedMrRatio를 포함한 크레딧 지표를 보려면 그룹 또는 프로젝트에서 Owner 또는 Security Manager 권한이 있거나,
read_agent_artifacts 권한이 있는 사용자 지정 역할이 필요합니다.
다른 사용자에게는 이 지표가 비어 있습니다.
참고:
returningUsersCount,joinedUsersCount,churnedUsersCount,previousPeriodUsersCount지표는 각created버킷을 직전 버킷과 비교하므로,created차원도 함께 선택한 경우에만 유효합니다.created필터만으로는 충분하지 않습니다.mergedMrCount,closedMrCount,openMrCount지표는 플로가 생성한 머지 리퀘스트 중 이후 머지되었거나, 머지되지 않고 닫혔거나, 아직 열려 있는 것의 수를 계산합니다. 이 지표는 해당 머지 리퀘스트의 현재 상태보다 늦게 반영될 수 있으므로, 최근에 머지된 머지 리퀘스트가 여전히 열린 것으로 계산될 수 있습니다.
정렬 필드#
선택한 차원 또는 지표에 포함된 모든 필드로 정렬할 수 있습니다. 자세한 내용은 analytics 모드 정렬을 참고합니다.
예시#
-
30일간 플로 유형별 플로:
```glql title: "Duo workflows by flow type (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: flowType as "Flow" metrics: totalCount as "Flows", usersCount as "Users", creditsUsedSum as "Credits" sort: totalCount desc ``` -
월별 크레딧 사용량 추이:
```glql title: "Monthly Duo workflow credit usage trend" display: columnChart mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -90d dimensions: created(monthly) as "Month" metrics: creditsUsedSum as "Credits used" sort: created asc ``` -
채팅 플로를 제외한 월별 크레딧 사용량:
```glql title: "Monthly Duo workflow credits, excluding chat" display: columnChart mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -90d and flowType not in ("chat", "agentic_chat/v1") dimensions: created(monthly) as "Month", flowType as "Flow" metrics: creditsUsedSum as "Credits used" sort: created asc ``` -
30일간 모델별 크레딧:
```glql title: "Duo workflow credits by model (last 30 days)" display: barChart mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: model as "Model" metrics: creditsUsedSum as "Credits used" sort: creditsUsedSum desc ``` -
30일간 크레딧 상위 사용자:
```glql title: "Top users by Duo workflow credits (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: user as "User" metrics: totalCount as "Flows", creditsUsedSum as "Credits", creditsUsedMean as "Avg credits per flow" sort: creditsUsedSum desc limit: 10 ``` -
30일간 상태별 플로:
```glql title: "Duo workflows by status (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: status as "Status" metrics: totalCount as "Flows", createdMrCountSum as "MRs created", mergedMrCountSum as "MRs merged", openMrCountSum as "MRs open" sort: status asc ``` -
주별 사용자 유지율:
```glql title: "Weekly Duo workflow user retention" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -90d dimensions: created(weekly) as "Week" metrics: usersCount as "Users", returningUsersCount as "Returning", joinedUsersCount as "Joined", churnedUsersCount as "Churned" sort: created desc ``` -
30일간 활동 구간 및 플로 유형별 사용자:
```glql title: "Duo workflow users by activity tier (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: userTier(thresholds=[4, 25, 100]) as "Tier", flowType as "Flow" metrics: totalCount as "Flows", usersCount as "Users" sort: userTier asc ``` -
30일간 상태별 플로 수 나란히 비교:
```glql title: "Duo workflows by outcome (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d metrics: totalCount as "All", totalCount(status="finished") as "Completed", totalCount(status=["paused", "input_required"]) as "Waiting", totalCount(status="failed") as "Failed" ``` -
30일간 그룹 비교:
```glql title: "Duo workflow usage by subgroup (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d dimensions: group(depth=2) as "Group" metrics: usersCount as "Users", creditsUsedSum as "Credits" sort: usersCount desc ``` -
그룹화 없는 전체 사용량:
```glql title: "Duo workflow usage overview (last 30 days)" display: table mode: analytics query: type = DuoWorkflow and group = "gitlab-org" and created > -30d metrics: totalCount as "Flows", usersCount as "Users", projectsCount as "Projects", creditsUsedQuantile(0.5) as "Median credits" ```