모니터 클러터 정리하기
모니터 클러터 정리하기 (Clean up monitor clutter)
모니터 클러터(clutter)는 시간이 지나면서 쌓여 노이즈, 중복 경보, 증가하는 운영 마찰을 초래해요. 이 가이드는 어지러워진 모니터를 식별하고 정리하는 명확한 접근 방식을 제시하며, 경보 워크플로우를 간소화하는 데 도움이 되는 사용 사례를 제공해요.
또한 깨끗한 모니터링 환경을 유지하기 위한 모범 사례를 제공해, 시스템이 성장함에 따라 모니터링 전략을 더 쉽게 확장하고 관리할 수 있게 해줘요.
출처: 문서
본문
필수 조건 (Prerequisites)
모니터 쓰기 권한(Monitors Write permissions)이 있어야 해요.
사용 사례 (Use cases)
이 가이드는 모니터 클러터를 정리하는 몇 가지 핵심 사용 사례를 다뤄요:
- 장기간 음소거된 모니터: 주(week) 또는 심지어 개월(month) 단위로 오랫동안 음소거되어 있었던 모니터.
- ALERT 상태에 갇힌 모니터: 비정상적으로 오랫동안 인지되거나 해소되지 않은 채 "Alert" 상태를 유지한 모니터.
- 중복 모니터: 같은 조건, 메트릭, 또는 서비스에서 트리거되는 여러 모니터. 종종 팀 사일로(silo)나 조정 부족으로 발생해요.
- 요동치고 시끄러운 모니터: 자주 트리거되고 해소되는("요동치는") 모니터 또는 가치가 낮은 알림을 대량으로 생성하는 모니터.
- 잘못 구성된 모니터: 대시보드 링크가 끊어졌거나, 평가 지연이 없거나, 경보 구성 요소가 없거나 잘못되었거나, 태그와 명명 규칙이 구식인 모니터.
오랫동안 음소거된 모니터 (Muted for a long period of time)
모니터는 실패, 보안 위협, 성능 문제에 대한 조기 경보 시스템 역할을 해요. 하지만 오랫동안 음소거된 모니터는 그 목적을 무너뜨려요. 장기 음소거는 종종 모니터가 쓸모없거나, 무관하거나, 너무 시끄러워서 유용하지 않다는 신호예요. 이러한 모니터는 검토되어 적절한 튜닝으로 다시 활성화하거나, 클러터를 줄이고 경보 환경에서 낡은 모니터를 제거하기 위해 폐기해야 해요.
가치를 제공하지 않는 모니터를 정리하고, 장기 음소거를 시간 제한 스케줄(time-bound schedule)로 교체해요:
1. 모니터 검사하기 (Inspect the monitors)
오랫동안 음소거된 모니터를 감사해 실제로 필요하거나 유용한 모니터를 파악해요. 일부 모니터는 타당한 이유로 음소거되어 있을 수 있으므로 삭제를 피하고 싶을 거예요.
이러한 모니터를 보려면 Monitor Quality 페이지로 이동해 60일 이상 음소거된 모니터 목록을 찾아요. Monitors List에서 muted_elapsed:<number_of_days>d 쿼리로도 음소거된 모니터를 찾을 수 있어요.
목록을 확보한 후에는 Monitor Quality 페이지에서 각 모니터에 대한 조치를 취하거나, 2단계와 3단계로 모니터를 일괄 삭제할 수 있어요.
2. 모니터 ID 목록 가져오기 (Get the monitor ID list)
변경을 프로그래밍 방식으로 자동화하려면 모니터 ID 목록을 가져와요. 60일 이상 음소거된 모니터부터 시작해요.
다음 CURL 명령으로 해당 정보를 가져와요:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("muted_duration_over_sixty_days")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > monitors_muted.csv
이렇게 하면 가독성을 위해 모니터 세부 정보가 CSV 파일로 제공돼요. 특정 사용 사례에 맞게 쿼리를 세분화할 수 있어요.
3. 모니터 삭제하기 (Delete the monitors)
(2단계에서 얻은) 60일 이상 음소거된 모니터 목록을 사용해 다음 스크립트로 삭제할 수 있어요. 스크립트를 실행하기 전에 표에서 모니터 ID 열을 첫 번째에 두세요.
input_file="monitors_muted.csv"
tail -n +2 "$input_file" | awk -F',' '{print $1}' | while read -r monitor_id; do
echo "Deleting monitor ID: $monitor_id"
curl -X DELETE "<YOUR_DATADOG_API_URL>/api/v1/monitor/${monitor_id}" \
-H "Accept: application/json" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}"
echo "Deleted monitor: $monitor_id"
done
오랫동안 ALERT 상태인 모니터 (In an ALERT state for a long period of time)
지속적인 경보는 다음 두 가지 문제 중 하나를 시사해요: 문제가 실행 가능하지 않거나, 모니터 임계값이 잘못 구성되어 있거나. 두 경우 모두 경보에 대한 신뢰를 떨어뜨리고 경보 피로(alert fatigue)에 기여해요. 이러한 모니터는 검토 후 편집하거나 제거해야 해요.
60일 이상 ALERT 상태에 있었던 모니터 목록을 가져오는 방법은 다음과 같아요:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("alerted_too_long")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > monitors_alerted_too_long.csv
삭제하려면 Delete Monitors 명령에서 같은 과정을 사용해요. input_file을 monitors_alerted_too_long.csv로 바꾸세요.
중복 모니터 (Duplicate monitors)
태그 하나만 다르고 별도로 생성된 모니터는 불필요한 중복을 초래할 수 있어요. 예를 들어 CPU 사용량을 prod용 모니터 하나와 staging용 모니터 하나로 모니터링하면 모니터 수가 늘어나요.
중복 모니터는 불필요한 노이즈와 혼란을 만들어요. 많은 경우 이들을 적절한 스코프와 태깅을 가진 단일 multi-alert 모니터로 통합할 수 있어요. 이렇게 하면 중복이 줄고 경보를 더 관리하기 쉬워져요.
경보를 트리거한 태그 값에 따라 다른 알림을 보내야 한다면, 모니터 변수(monitor variables)를 사용해 임계값을 위반한 태그에 따라 메시지를 동적으로 커스터마이즈해요.
요동치고 시끄러운 모니터 (Flappy and noisy monitors)
시끄러운 모니터는 팀을 실제 문제에 무감각하게 만들어요. 요동(flapping, 모니터가 경보와 복구 상태 사이를 자주 전환하는 현상)은 종종 불안정한 임계값, 누락된 평가 지연, 또는 근본적인 시스템 변동성을 나타내요.
노이즈를 줄이려면 모니터의 평가 집계와 임계값 구성을 검토해요. 경보 동작을 안정화하도록 설정을 조정하거나, 더 이상 가치를 제공하지 않는다면 모니터를 삭제해요.
높은 볼륨의 경보를 생성하는 모니터 목록을 가져오는 방법은 다음과 같아요:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("noisy_monitor")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > noisy_monitors.csv
삭제하려면 Delete Monitors 명령에서 같은 과정을 사용해요. input_file을 noisy_monitors.csv로 바꾸세요.
잘못 구성된 모니터 (Misconfigured monitors)
잘못 구성된 모니터는 적절한 용도가 있을 수 있음에도 알림을 받지 못해 비효율적인 활성 모니터예요. 이러한 잘못된 구성은 모니터의 신뢰성을 훼손하고 디버깅이나 트리아징(triage)을 더 어렵게 만들어요. 이를 정리하면 경보가 정확하고 실행 가능하며 관측 가능성 워크플로우에 통합되도록 보장할 수 있어요.
끊어진 핸들 (Broken handle)
Monitor Quality 페이지를 사용해 끊어진 핸들이 있는 모니터를 시각화해요. 이러한 모니터의 알림은 목적지에 도달할 수 없어요.
Datadog는 모니터의 수신자를 검토해 제대로 전달되도록 하거나, 모니터를 삭제할 것을 권장해요.
잘못 구성된 핸들이 있는 모니터 목록을 가져오는 방법은 다음과 같아요:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("broken_at_handle")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > monitors_broken_handle.csv
삭제하려면 Delete Monitors 명령에서 같은 과정을 사용해요. input_file을 monitors_broken_handle.csv로 바꾸세요.
지연 누락 (Missing a delay)
이 이슈는 주로 AWS 메트릭을 기반으로 하는 모니터에 영향을 줘요. Datadog가 API를 통해 AWS 메트릭을 가져오기 때문에, 데이터를 사용할 수 있게 되기 전에 내장된 지연이 자주 발생해요. 이를 고려하지 않으면 모니터가 불완전하거나 지연된 데이터로 인해 거짓 양성(false positive)을 트리거할 수 있어요.
영향을 받는 모니터는 Monitor Quality 페이지에서 찾을 수 있으며, 여기서 평가 지연이 누락된 모니터가 플래그로 표시돼요.
Datadog는 AWS 메트릭을 사용하는 모든 모니터에 지연을 추가할 것을 권장해요. 300초(5분)의 지연이 데이터 수집 지연을 감안하기에 보통 충분해요.
지연이 누락된 모니터 목록을 가져오는 방법은 다음과 같아요:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("crawler_metric_missing_eval_delay")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > monitors_missing_delay.csv
자세한 내용은 AWS 문제 해결 가이드를 참고해요.
구성 요소 누락 (Missing constituent)
복합(composite) 모니터는 두 개 이상의 모니터(구성 요소(constituent)라고 함)의 논리적 결합을 기반으로 상태를 평가해요. 이러한 구성 요소 모니터 중 하나라도 삭제되거나 사용할 수 없게 되면 복합 모니터는 유효하지 않거나 신뢰할 수 없게 돼요.
구성 요소 누락은 일반적으로 복합 모니터를 만든 후 원래 입력 모니터 중 하나 이상이 제거됐다는 뜻이에요. 이로 인해 복합 모니터가 불완전해지고 경보 동작이 오해를 불러일으킬 수 있어요.
Datadog는 복합 모니터를 검토해 누락된 구성 요소를 교체하거나 복원하거나, 복합 모니터를 삭제할 것을 권장해요. 구성 요소가 누락된 복합 모니터 목록은 Monitor Quality 페이지에서 찾을 수 있어요.
구성 요소가 누락된 모니터 목록을 프로그래밍 방식으로 가져오려면:
curl -s -X GET "<YOUR_DATADOG_API_URL>/api/v1/monitor/search" \
-H "DD-API-KEY: *** \
-H "DD-APPLICATION-KEY: ${APP_KEY}" \
-H "Content-Type: application/json" | jq -r '
.monitors[]
| select(.quality_issues != null and (.quality_issues | index("composite_has_deleted_constituents")))
| [.id, .name, (.quality_issues | join(";"))]
| @csv' > monitors_missing_constituent.csv
삭제하려면 Delete Monitors 명령에서 같은 과정을 사용해요. input_file을 monitors_missing_constituent.csv로 바꾸세요.
자세한 내용은 복합 모니터(Composite Monitor) 문서를 참고해요.
모니터 클러터를 피하는 모범 사례 (Best Practices to avoid Monitor Cluttering)
| 모범 사례 (Best Practice) | 설명 (Description) | 구현 (Implementation) |
|---|---|---|
| 중복 제거 | 약간 다른 스코프(예: 지역, 팀, 환경별)로 같은 신호를 추적하는 여러 모니터를 만들지 마세요. | 태그가 있는 group-by 모니터를 사용하세요. 관리하고 확장하기 더 쉽습니다. |
| 명확한 소유권 설정 | 모든 모니터는 경보를 올바른 대응자에게 라우팅하고 혼란을 피하려면 명확한 소유자가 있어야 해요. | team: 태그와 알림 핸들(@slack-xyz, @pagerduty-twilio)을 사용하세요. Monitors List의 Creator 필터를 사용해 가장 빈번한 모니터 생성자를 감사하세요. |
| 시끄럽거나 휴면 모니터 검토 | 너무 자주 경보하거나 전혀 경보하지 않는 모니터는 피로를 유발하거나 잘못된 구성을 신호할 수 있어요. | Monitor Quality 페이지를 사용해 시끄럽거나, 끊어졌거나, 구식인 모니터를 식별하고 정리하세요. |
| 모니터 템플릿 활용 | RED 메트릭이나 API 지연 같은 일반적인 패턴에 대해 템플릿을 사용해 중복을 줄이고 표준화를 보장하세요. | 재사용 가능한 템플릿을 사용해 팀 전반의 중복을 줄이고 표준화를 보장하세요. |
| 태깅 정책 수립 | 일관되고 의미 있는 태그로 모니터를 쉽게 필터링, 그룹화, 라우팅할 수 있어요. | 일관된 태그(service:, env:, team: 등)를 사용하고 Tagging Policy를 수립하세요. 이렇게 하면 범위가 지정된 대시보드, 경보, 컴플라이언스 추적이 가능해집니다. |
| Monitor Quality 대시보드 | 팀, 서비스, 환경 전반의 모니터 위생 추세를 시각화해 갭을 사전에 식별하고 개선을 추적하세요. | Monitor Quality 대시보드를 설정해 시간에 따른 개선을 추적하고 규모에 맞게 정리 노력을 우선순위화하세요. |
Template Monitor Quality 대시보드 (Template Monitor Quality dashboard)
시작하는 데 도움이 되도록 다음 JSON 대시보드 정의를 Datadog 계정에 직접 가져오세요.
- 앱에서 Dashboards로 이동해 New Dashboard를 클릭해요.
- 페이지 상단에서 Configure를 클릭하고 Import dashboard JSON… 을 선택해요.
- 다음 JSON을 복사해 붙여넣어 Monitor Quality 대시보드를 만드세요:
{
"title": "Monitor Quality OOTB Dashboard",
"description": "",
"widgets": [
{
"id": 8853380235542346,
"definition": {
"type": "note",
"content": "This Monitor Quality dashboard provides a comprehensive view of monitor quality metrics, broken down by `team` and `service`. Its goal is to help you easily analyze and act on monitor quality data, enabling you to schedule reports, download insights as PDFs, and more.\n\n**Key Features:**\n- Team and Service Views: You can filter the dashboard either by team or by service, but not both simultaneously. If you filter by `team`, refer to the [Team Section](https://app.datadoghq.com/dashboard/u7b-4n7-gn5/monitor-quality-ootb-dashboard?fromUser=false&refresh_mode=paused&from_ts=1732107838741&to_ts=1732280638741&live=false&tile_focus=4548404374449802) for relevant insights. If you filter by `service`, explore the [Service Section](https://app.datadoghq.com/dashboard/u7b-4n7-gn5/monitor-quality-ootb-dashboard?fromUser=false&refresh_mode=paused&from_ts=1732107865224&to_ts=1732280665224&live=false&tile_focus=2841959907422822) for detailed information.\n- Monitor-Level Details: For a deeper dive into specific impacted monitors, navigate to the [Monitor Quality page](https://app.datadoghq.com/monitors/quality).\n- Seamless Navigation: Use the context links provided in the dashboard to jump directly to the [Monitor Quality page](https://app.datadoghq.com/monitors/quality), pre-filtered with the same criteria you've applied on the dashboard.\n\nThis dashboard is designed to give you both a high-level overview and actionable paths to improve your monitoring posture.",
"background_color": "white",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 0, "width": 12, "height": 3 }
},
{
"id": 4548404374449802,
"definition": {
"title": "General overview - by team",
"background_color": "blue",
"show_title": true,
"type": "group",
"layout_type": "ordered",
"widgets": [
{
"id": 2449119265341574,
"definition": {
"type": "note",
"content": "This section is powered by the `datadog.monitor.suggested_monitor_health_by_team` metric, which is emitted daily.\n\nThe monitor counts reported in this metric exclude synthetic monitors.\n\nThese counts represent the total number of suggestions for monitor quality improvements, broken down by team.\n\nUse the `team` filter to view insights specific to your team.\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "white",
"font_size": "14",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 0, "width": 5, "height": 4 }
},
{
"id": 3001209940385798,
"definition": {
"title": "Distribution of Quality Improvements by Type",
"title_size": "16",
"title_align": "left",
"time": { "hide_incomplete_cost_data": true },
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{$team,$service} by {suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"style": { "palette": "datadog16" },
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 500,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"type": "sunburst",
"hide_total": false,
"legend": { "type": "automatic" },
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{$team}}"
}
]
},
"layout": { "x": 5, "y": 0, "width": 7, "height": 4 }
},
{
"id": 498569597362654,
"definition": {
"title": "Evolution of Quality Improvements by Type over Time",
"title_size": "16",
"title_align": "left",
"show_legend": false,
"legend_layout": "auto",
"legend_columns": ["avg", "min", "max", "value", "sum"],
"time": { "hide_incomplete_cost_data": true },
"type": "timeseries",
"requests": [
{
"formulas": [{ "formula": "query1" }],
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{$team,$service} by {suggestion_type}"
}
],
"response_format": "timeseries",
"style": {
"palette": "datadog16",
"order_by": "values",
"line_type": "solid",
"line_width": "normal"
},
"display_type": "line"
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{$team}}"
}
]
},
"layout": { "x": 0, "y": 4, "width": 12, "height": 4 }
},
{
"id": 1376609088194674,
"definition": {
"title": "Top Teams Impacted",
"title_size": "16",
"title_align": "left",
"time": { "hide_incomplete_cost_data": true },
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" }
}
},
"layout": { "x": 0, "y": 8, "width": 12, "height": 4 }
},
{
"id": 718136447073638,
"definition": {
"type": "note",
"content": "Monitors with Missing Recipients per Team",
"background_color": "vivid_blue",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 12, "width": 6, "height": 1 }
},
{
"id": 2393792996475864,
"definition": {
"type": "note",
"content": "Monitors with Broken Handles per Team",
"background_color": "vivid_green",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 12, "width": 6, "height": 1 }
},
{
"id": 4443082314028290,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- no notification handle found in monitor body\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 13, "width": 6, "height": 2 }
},
{
"id": 3954366540293996,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- notification handle is not valid\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 13, "width": 6, "height": 2 }
},
{
"id": 2546970864549118,
"definition": {
"title": "Monitors with Missing Recipients per Team",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:missing_at_handle,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "blue"
}
},
"layout": { "x": 0, "y": 15, "width": 6, "height": 5 }
},
{
"id": 3744392131942638,
"definition": {
"title": "Monitors with Broken Handles per Team",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:broken_at_handle,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "green"
}
},
"layout": { "x": 6, "y": 15, "width": 6, "height": 5 }
},
{
"id": 2751217590574740,
"definition": {
"type": "note",
"content": "Monitors Muted for Too Long",
"background_color": "purple",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 20, "width": 6, "height": 1 }
},
{
"id": 5158165900159898,
"definition": {
"type": "note",
"content": "Monitors Generating a High Volume of Alerts",
"background_color": "green",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 20, "width": 6, "height": 1 }
},
{
"id": 8032070484951580,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor has been muted for at least 60 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 21, "width": 6, "height": 2 }
},
{
"id": 4153429942317530,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor generates the top 5% of alerts over the past 10 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 21, "width": 6, "height": 2 }
},
{
"id": 4158897740932848,
"definition": {
"title": "Monitors Muted for Too Long",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:muted_duration_over_sixty_days,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "semantic"
}
},
"layout": { "x": 0, "y": 23, "width": 6, "height": 5 }
},
{
"id": 5392245250417816,
"definition": {
"title": "Monitors Generating a High Volume of Alerts",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:noisy_monitor,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": { "display": { "type": "stacked" }, "palette": "grey" }
},
"layout": { "x": 6, "y": 23, "width": 6, "height": 5 }
},
{
"id": 1271026446632020,
"definition": {
"type": "note",
"content": "Monitors Stuck in Alert State",
"background_color": "vivid_yellow",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 28, "width": 6, "height": 1 }
},
{
"id": 6315895116466318,
"definition": {
"type": "note",
"content": "Composite Monitors have Deleted Components",
"background_color": "gray",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 28, "width": 6, "height": 1 }
},
{
"id": 8251226565664096,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor has been alerting for at least 60 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 29, "width": 6, "height": 2 }
},
{
"id": 1329067816249636,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor is a composite one and has deleted components\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 29, "width": 6, "height": 2 }
},
{
"id": 7052384595427880,
"definition": {
"title": "Monitors Stuck in Alert State",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:alerted_too_long,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "orange"
}
},
"layout": { "x": 0, "y": 31, "width": 6, "height": 5 }
},
{
"id": 2768363536962548,
"definition": {
"title": "Composite Monitors have Deleted Components",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_team{!team:none,suggestion_type:composite_has_deleted_constituents ,$team,$service} by {team,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{team}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "datadog16"
}
},
"layout": { "x": 6, "y": 31, "width": 6, "height": 5 }
}
]
},
"layout": { "x": 0, "y": 3, "width": 12, "height": 37 }
},
{
"id": 2841959907422822,
"definition": {
"title": "General overview - by service",
"background_color": "pink",
"show_title": true,
"type": "group",
"layout_type": "ordered",
"widgets": [
{
"id": 3801590205295194,
"definition": {
"type": "note",
"content": "This section is powered by the `datadog.monitor.suggested_monitor_health_by_service` metric, which is emitted daily.\n\nThe monitor counts reported in this metric exclude synthetic monitors.\n\nThese counts represent the total number of suggestions for monitor quality improvements, broken down by service.\n\nUse the `service` filter to view insights specific to your team.\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "white",
"font_size": "14",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 0, "width": 5, "height": 4 }
},
{
"id": 8418200284207718,
"definition": {
"title": "Distribution of Quality Improvements by Type",
"title_size": "16",
"title_align": "left",
"time": { "hide_incomplete_cost_data": true },
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{$team,$service} by {suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"style": { "palette": "datadog16" },
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 500,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"type": "sunburst",
"hide_total": false,
"legend": { "type": "automatic" },
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{$service}}"
}
]
},
"layout": { "x": 5, "y": 0, "width": 7, "height": 4 }
},
{
"id": 8281740697966220,
"definition": {
"title": "Evolution of Quality Improvements by Type over Time",
"title_size": "16",
"title_align": "left",
"show_legend": false,
"legend_layout": "auto",
"legend_columns": ["avg", "min", "max", "value", "sum"],
"time": { "hide_incomplete_cost_data": true },
"type": "timeseries",
"requests": [
{
"formulas": [{ "formula": "query1" }],
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{$team, $service} by {suggestion_type}"
}
],
"response_format": "timeseries",
"style": {
"palette": "datadog16",
"order_by": "values",
"line_type": "solid",
"line_width": "normal"
},
"display_type": "line"
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{$service}}"
}
]
},
"layout": { "x": 0, "y": 4, "width": 12, "height": 4 }
},
{
"id": 5048429332292860,
"definition": {
"title": "Top services impacted",
"title_size": "16",
"title_align": "left",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" }
}
},
"layout": { "x": 0, "y": 8, "width": 12, "height": 5 }
},
{
"id": 2233801928907094,
"definition": {
"type": "note",
"content": "Monitors with Missing Recipients per Service",
"background_color": "vivid_blue",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 13, "width": 6, "height": 1 }
},
{
"id": 7329031300309162,
"definition": {
"type": "note",
"content": "Monitors with Broken Handles per Service",
"background_color": "vivid_green",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 13, "width": 6, "height": 1 }
},
{
"id": 7627510169738418,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- no notification handle found in monitor body\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 14, "width": 6, "height": 2 }
},
{
"id": 2826082028591748,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- notification handle is not valid\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 14, "width": 6, "height": 2 }
},
{
"id": 5050954942402816,
"definition": {
"title": "Monitors with Missing Recipients per Service",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:missing_at_handle,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "blue"
}
},
"layout": { "x": 0, "y": 16, "width": 6, "height": 5 }
},
{
"id": 7809748805807956,
"definition": {
"title": "Monitors with Broken Handles per Service",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:broken_at_handle,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "green"
}
},
"layout": { "x": 6, "y": 16, "width": 6, "height": 5 }
},
{
"id": 8416588682594596,
"definition": {
"type": "note",
"content": "Monitors Muted for Too Long",
"background_color": "purple",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 21, "width": 6, "height": 1 }
},
{
"id": 4951606729784970,
"definition": {
"type": "note",
"content": "Monitors Generating a High Volume of Alerts",
"background_color": "green",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 21, "width": 6, "height": 1 }
},
{
"id": 1778359756038190,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor has been muted for at least 60 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 22, "width": 6, "height": 2 }
},
{
"id": 8559060613933804,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor generates the top 5% of alerts over the past 10 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 22, "width": 6, "height": 2 }
},
{
"id": 7041249940897320,
"definition": {
"title": "Monitors Muted for Too Long",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:muted_duration_over_sixty_days,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "semantic"
}
},
"layout": { "x": 0, "y": 24, "width": 6, "height": 5 }
},
{
"id": 7810615049061724,
"definition": {
"title": "Monitors Generating a High Volume of Alerts",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:noisy_monitor,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "grey"
}
},
"layout": { "x": 6, "y": 24, "width": 6, "height": 5 }
},
{
"id": 5108940190121326,
"definition": {
"type": "note",
"content": "Monitors Stuck in Alert State",
"background_color": "vivid_yellow",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 0, "y": 29, "width": 6, "height": 1 }
},
{
"id": 4931941666409286,
"definition": {
"type": "note",
"content": "Composite Monitors have Deleted Components",
"background_color": "gray",
"font_size": "18",
"text_align": "center",
"vertical_align": "center",
"show_tick": false,
"tick_pos": "50%",
"tick_edge": "left",
"has_padding": true
},
"layout": { "x": 6, "y": 29, "width": 6, "height": 1 }
},
{
"id": 6520923360190496,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor has been alerting for at least 60 days\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 0, "y": 30, "width": 6, "height": 2 }
},
{
"id": 1364025765104008,
"definition": {
"type": "note",
"content": "Monitor counts reported in this metric satisfy the following conditions:\n- the monitor is a composite one and has deleted components\n- monitor type is not `synthetics`\n\n_You can use the context links to jump to the list of affected monitors._",
"background_color": "yellow",
"font_size": "14",
"text_align": "left",
"vertical_align": "center",
"show_tick": true,
"tick_pos": "50%",
"tick_edge": "bottom",
"has_padding": true
},
"layout": { "x": 6, "y": 30, "width": 6, "height": 2 }
},
{
"id": 3670188762233230,
"definition": {
"title": "Monitors Stuck in Alert State",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:alerted_too_long,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "orange"
}
},
"layout": { "x": 0, "y": 32, "width": 6, "height": 5 }
},
{
"id": 9006201303765196,
"definition": {
"title": "Composite Monitors have Deleted Components",
"type": "toplist",
"requests": [
{
"queries": [
{
"name": "query1",
"data_source": "metrics",
"query": "sum:datadog.monitor.suggested_monitor_health_by_service{!service:none,suggestion_type:alerted_too_long,$team,$service} by {service,suggestion_type}",
"aggregator": "last"
}
],
"response_format": "scalar",
"formulas": [{ "formula": "query1" }],
"sort": {
"count": 10,
"order_by": [
{ "type": "formula", "index": 0, "order": "desc" }
]
}
}
],
"custom_links": [
{
"label": "See list of monitors",
"link": "https://app.datadoghq.com/monitors/quality?q={{service}}"
}
],
"style": {
"display": { "type": "stacked", "legend": "automatic" },
"palette": "datadog16"
}
},
"layout": { "x": 6, "y": 32, "width": 6, "height": 5 }
}
]
},
"layout": {
"x": 0,
"y": 40,
"width": 12,
"height": 38,
"is_column_break": true
}
}
],
"template_variables": [
{
"name": "team",
"prefix": "team",
"available_values": [],
"default": "*"
},
{
"name": "service",
"prefix": "service",
"available_values": [],
"default": "*"
}
],
"layout_type": "ordered",
"notify_list": [],
"reflow_type": "fixed"
}