본문 바로가기
WIKI 기술 지식 베이스

산점도 위젯

원문 보기 위키 갱신

산점도 위젯 (Scatter Plot Widget)

출처: 문서

본문

산점도(scatter plot)는 서로 다른 두 변수 집합의 관측 변화 사이의 가능한 관계를 식별해요. 두 변수 사이의 관계 강도를 검정할 수 있는 시각적·통계적 수단을 제공해요. 산점도 시각화를 사용하면 선택한 범위를 각각의 집계 방식과 함께 두 개의 서로 다른 메트릭으로 그래프로 그릴 수 있어요. 개별 데이터 포인트를 조사하기 위해 원시 이벤트를 플롯할 수도 있어요.

설정 (Setup)

구성 (Configuration)

  1. X축과 Y축에 사용할 메트릭 또는 다른 데이터셋과 집계를 선택해요.
  2. 산점도의 각 포인트에 대한 범위를 정의해요. 예를 들어 host, service, app, region.
  3. 선택 사항:
    1. 색상 기준(color-by) 태그를 활성화해요.
    2. X축과 Y축 컨트롤을 설정해요.
    3. 데이터 포인트를 목록으로 보기 위한 범례를 추가해요.
    4. 그래프에 표시되는 단위를 구성해요.
    5. 기본적으로 활성화되어 있는 추가 컨텍스트 링크를 추가해요. 컨텍스트 링크는 대시보드 위젯을 Datadog 또는 타사 애플리케이션의 다른 페이지와 연결해줘요.
  4. 위젯이 사용자 지정 시간 범위를 가질지 대시보드의 전역 시간 범위를 사용할지 선택해요.
  5. 그래프 제목을 지정하거나 상자를 비워 두면 제안된 제목이 사용돼요.

집계 및 비집계 데이터 (Aggregated and unaggregated data)

산점도는 두 가지 데이터 모드를 지원하며, 그래프 편집기의 모드(Mode) 전환으로 전환할 수 있어요.

  • 집계(Aggregated): 필드별로 데이터를 그룹화하고 avg 또는 sum 같은 집계를 적용해요. 각 포인트는 집계된 그룹을 나타내요.
  • 비집계(Unaggregated): 원시 이벤트를 플롯하며, 각 포인트가 로그, 스팬, RUM 이벤트 같은 단일 이벤트를 나타내요. 이 모드를 사용해서 집계가 숨기는 이상값과 드문 클러스터를 발견하거나, 같은 이벤트의 두 필드를 상호 연결하거나(예: 페이로드 크기가 지연을 예측하는지), 개별 LLM 트레이스를 플롯할 수 있어요.

비집계 모드가 지원하는 데이터 소스 (Supported data sources for unaggregated mode)

다음 소스에서 비집계 데이터를 플롯할 수 있어요.

  • Logs
  • RUM
  • 에이전트 관측성 (Agent Observability)
  • Product Analytics
  • Spans
  • 감사 추적 (Audit Trail)
  • Events
  • 보안 신호 (Security Signals)
  • CI Pipelines
  • Network
  • 네트워크 장치 흐름 (Network Device Flows)
  • 신서틱 테스트 실행 (Synthetics Test Runs)

비집계 데이터 플롯 (Plot unaggregated data)

대시보드에서:

  1. 대시보드에서 산점도 위젯을 열거나 만들어요.
  2. 그래프 편집기에서 원시 이벤트를 지원하는 데이터 소스를 선택해요.
  3. 모드(Mode) 를 비집계(Unaggregated) 로 설정해요.
  4. 측정값 추가(Add Measure) 를 클릭해서 X축과 Y축을 구성해요.

개별 이벤트가 그래프에 포인트로 나타나요.

탐색 (Navigation)

산점도에 마우스를 올리면 오른쪽 위 모서리에 컨트롤이 표시돼요.

  • 밀도 표시(Show density): 데이터 포인트가 가장 많이 집중된 곳을 보여주는 밀도 윤곽을 오버레이해서 클러스터와 패턴을 식별하는 데 도움을 줘요. 켜면 컨트롤이 밀도 숨기기(Hide density) 로 바뀌어요.
  • 확대(Zoom in, +) 와 축소(zoom out, -): 줌 레벨을 변경해서 데이터 영역에 초점을 맞춰요.
  • 뷰 재설정(Reset View): 플롯을 기본 줌과 위치로 되돌려요.

산점도에서 직접 클릭하고 드래그해서 데이터를 탐색(팬)할 수 있어요.

산점도는 이상값과 최댓값 같은 주목할 만한 포인트를 자동으로 라벨링해요.

API

이 위젯은 **대시보드 API**와 함께 사용할 수 있어요. 위젯 JSON 스키마 정의에 대해서는 다음 표를 참고하세요.

산점도 위젯의 최상위 필드에는 다음이 있어요.

필드 타입 설명
color_by_groups string[] 색상에 사용되는 그룹 목록.
custom_links object[] 사용자 지정 링크 목록.
description string 위젯의 설명.
requests [필수] object 위젯 정의.
time object 위젯의 시간 설정.
title string 위젯 제목.
type [필수] enum 산점도 위젯 유형. 허용 enum 값: scatterplot

각 축(x, y, radius, color)은 aggregator, formulas, queries를 포함하는 요청 구성을 가져요. queries는 메트릭, 이벤트 플랫폼, 프로세스, APM, SLO, Cloud Cost 등 다양한 데이터 소스를 지원해요. 전체 예시는 다음과 같아요.

{
  "color_by_groups": [],
  "custom_links": [
    {
      "is_hidden": false,
      "label": "Search logs for {{host}}",
      "link": "https://app.datadoghq.com/logs?query={{host}}",
      "override_label": "logs"
    }
  ],
  "description": "string",
  "requests": {
    "table": {
      "formulas": [
        {
          "alias": "my-query",
          "dimension": "radius",
          "formula": "func(a) + b"
        }
      ],
      "queries": [
        {
          "aggregator": "avg",
          "cross_org_uuids": [
            "6434abde-xxxx-yyyy-zzzz-da7ad0900001"
          ],
          "data_source": "metrics",
          "name": "my_query",
          "query": "avg:system.cpu.user{*}",
          "semantic_mode": "combined"
        }
      ],
      "response_format": "timeseries"
    },
    "x": {
      "aggregator": "string",
      "apm_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "event_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "log_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "network_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "process_query": {
        "filter_by": [],
        "limit": "integer",
        "metric": "system.load.1",
        "search_by": "string"
      },
      "profile_metrics_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "q": "string",
      "rum_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "security_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      }
    },
    "y": {
      "aggregator": "string",
      "apm_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "event_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "log_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "network_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "process_query": {
        "filter_by": [],
        "limit": "integer",
        "metric": "system.load.1",
        "search_by": "string"
      },
      "profile_metrics_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "q": "string",
      "rum_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      },
      "security_query": {
        "compute": {
          "aggregation": "avg",
          "facet": "@duration",
          "interval": 5000
        },
        "group_by": [
          {
            "facet": "resource_name",
            "limit": 50,
            "sort": {
              "aggregation": "avg",
              "facet": "@string_query.interval",
              "order": "desc"
            }
          }
        ],
        "index": "days-3,days-7",
        "multi_compute": [
          {
            "aggregation": "avg",
            "facet": "@duration",
            "interval": 5000
          }
        ],
        "search": {
          "query": ""
        }
      }
    }
  },
  "time": {
    "hide_incomplete_cost_data": false,
    "live_span": "5m"
  },
  "title": "string",
  "title_align": "string",
  "title_size": "string",
  "type": "scatterplot",
  "xaxis": {
    "include_zero": false,
    "label": "string",
    "max": "string",
    "min": "string",
    "scale": "string"
  },
  "yaxis": {
    "include_zero": false,
    "label": "string",
    "max": "string",
    "min": "string",
    "scale": "string"
  }
}

더 알아보기 (Learn more)