[{"data":1,"prerenderedAt":1307},["ShallowReactive",2],{"\u002Ffeatures\u002Falerting\u002Fmetric-monitors-navigation":3,"\u002Ffeatures\u002Falerting\u002Fmetric-monitors":134,"alert-names":1222},[4,8,28,38,52,70,74,78,88,92,96,100,104,108,112,116],{"title":5,"path":6,"stem":7},"Get started","\u002Ffeatures","features\u002Findex",{"title":9,"closed":10,"path":11,"stem":12,"children":13,"page":-1},"Traces",true,"\u002Ffeatures\u002Ftraces","features\u002F01.traces\u002Findex",[14,16,20,24],{"title":15,"path":11,"stem":12},"Introduction",{"title":17,"path":18,"stem":19},"Grouping & systems","\u002Ffeatures\u002Ftraces\u002Fgrouping","features\u002F01.traces\u002Fgrouping",{"title":21,"path":22,"stem":23},"Querying spans","\u002Ffeatures\u002Ftraces\u002Fquerying-spans","features\u002F01.traces\u002Fquerying-spans",{"title":25,"path":26,"stem":27},"Querying traces","\u002Ffeatures\u002Ftraces\u002Fquerying-traces","features\u002F01.traces\u002Fquerying-traces",{"title":29,"closed":10,"path":30,"stem":31,"children":32,"page":-1},"Logs","\u002Ffeatures\u002Flogs","features\u002F02.logs\u002Findex",[33,34],{"title":15,"path":30,"stem":31},{"title":35,"path":36,"stem":37},"Grouping rules","\u002Ffeatures\u002Flogs\u002Fgrouping","features\u002F02.logs\u002Fgrouping",{"title":39,"closed":10,"path":40,"stem":41,"children":42,"page":-1},"Metrics","\u002Ffeatures\u002Fmetrics","features\u002F03.metrics\u002Findex",[43,44,48],{"title":15,"path":40,"stem":41},{"title":45,"path":46,"stem":47},"Querying","\u002Ffeatures\u002Fmetrics\u002Fquerying","features\u002F03.metrics\u002F02.querying",{"title":49,"path":50,"stem":51},"PromQL compat","\u002Ffeatures\u002Fmetrics\u002Fpromql-compat","features\u002F03.metrics\u002F03.promql-compat",{"title":53,"closed":10,"path":54,"stem":55,"children":56,"page":-1},"Alerting","\u002Ffeatures\u002Falerting","features\u002F04.alerting\u002Findex",[57,58,62,66],{"title":15,"path":54,"stem":55},{"title":59,"path":60,"stem":61},"Error monitors","\u002Ffeatures\u002Falerting\u002Ferror-monitors","features\u002F04.alerting\u002Ferror-monitors",{"title":63,"path":64,"stem":65},"Metric monitors","\u002Ffeatures\u002Falerting\u002Fmetric-monitors","features\u002F04.alerting\u002Fmetric-monitors",{"title":67,"path":68,"stem":69},"Notifications","\u002Ffeatures\u002Falerting\u002Fnotifications","features\u002F04.alerting\u002Fnotifications",{"title":71,"path":72,"stem":73},"Searching","\u002Ffeatures\u002Fsearching","features\u002F04.searching",{"title":75,"path":76,"stem":77},"Chart annotations","\u002Ffeatures\u002Fannotations","features\u002F05.annotations",{"title":79,"path":80,"stem":81,"children":82,"closed":10},"Dashboards","\u002Ffeatures\u002Fdashboards","features\u002F06.dashboards\u002F01.index",[83,84],{"title":79,"path":80,"stem":81},{"title":85,"path":86,"stem":87},"YAML Templates","\u002Ffeatures\u002Fdashboards\u002Fyaml","features\u002F06.dashboards\u002F02.yaml",{"title":89,"path":90,"stem":91},"Transformations","\u002Ffeatures\u002Ftransformations","features\u002F07.transformations",{"title":93,"path":94,"stem":95},"Service graph","\u002Ffeatures\u002Fservice-graph","features\u002F08.service-graph",{"title":97,"path":98,"stem":99},"Grafana integration","\u002Ffeatures\u002Fgrafana","features\u002F09.grafana",{"title":101,"path":102,"stem":103},"Data fixtures","\u002Ffeatures\u002Ffixtures","features\u002F10.fixtures",{"title":105,"path":106,"stem":107},"JavaScript Source Maps","\u002Ffeatures\u002Fsourcemaps","features\u002F11.sourcemaps",{"title":109,"path":110,"stem":111},"MCP Server","\u002Ffeatures\u002Fmcp","features\u002F12.mcp",{"title":113,"path":114,"stem":115},"Observability as Code","\u002Ffeatures\u002Fobservability-as-code","features\u002F13.observability-as-code",{"title":117,"closed":10,"path":118,"stem":119,"children":120,"page":133},"SSO","\u002Ffeatures\u002Fsso","features\u002Fsso",[121,125,129],{"title":122,"path":123,"stem":124},"Google","\u002Ffeatures\u002Fsso\u002Fgoogle","features\u002Fsso\u002F01.google",{"title":126,"path":127,"stem":128},"Okta","\u002Ffeatures\u002Fsso\u002Fokta","features\u002Fsso\u002F02.okta",{"title":130,"path":131,"stem":132},"Keycloak","\u002Ffeatures\u002Fsso\u002Fkeycloak","features\u002Fsso\u002F03.keycloak",false,{"page":135,"surround":1217},{"id":136,"title":63,"body":137,"description":1206,"extension":1207,"image":1208,"meta":1209,"navigation":10,"path":64,"seo":1215,"stem":65,"surround_disabled":133,"__hash__":1216},"features\u002Ffeatures\u002F04.alerting\u002Fmetric-monitors.md",{"type":138,"value":139,"toc":1200},"minimark",[140,144,153,158,161,197,200,207,211,220,225,395,400,524,529,623,628,721,725,728,778,792,797,903,908,1002,1007,1100,1105,1189,1193,1196],[141,142,143],"p",{},"A metric monitor evaluates a UQL expression over a rolling time window and fires an alert when the computed value exceeds a threshold. Any metric Uptrace collects is available: OpenTelemetry host metrics, custom application metrics, and the internal span and log metrics Uptrace generates automatically.",[145,146,147,148],"video",{"autoPlay":10,"loop":10,"muted":10,"playsInline":10},"\n  ",[149,150],"source",{"src":151,"type":152},"\u002Fvideo\u002Fproduct\u002Falerting\u002Falert-as-code.mp4","video\u002Fmp4",[154,155,157],"h2",{"id":156},"how-evaluation-works","How evaluation works",[141,159,160],{},"Each metric monitor defines:",[162,163,164,171,177,188],"ul",{},[165,166,167,170],"li",{},[168,169,39],"strong",{}," — one or more metric aliases used in the query expression.",[165,172,173,176],{},[168,174,175],{},"Query"," — a UQL expression that produces a single numeric value per evaluation cycle.",[165,178,179,182,183,187],{},[168,180,181],{},"Threshold"," (",[184,185,186],"code",{},"max_value",") — the value above which an alert fires.",[165,189,190,182,193,196],{},[168,191,192],{},"Evaluation points",[184,194,195],{},"num_eval_points",") — how many consecutive data points must exceed the threshold before firing. Higher values reduce noise from spikes.",[141,198,199],{},"Uptrace evaluates the expression on a fixed schedule. On the first breach, it creates an alert and sends a notification. If the value recovers below the threshold, the alert closes and a recovery notification is sent.",[141,201,202,203,206],{},"To create a monitor, go to ",[168,204,205],{},"Alerting → Monitors → New monitor → From YAML"," and paste one of the examples below.",[154,208,210],{"id":209},"infrastructure-metrics","Infrastructure metrics",[141,212,213,214,219],{},"The following monitors work with the ",[215,216,218],"a",{"href":217},"\u002Fopentelemetry\u002Fcollector\u002Fhost-metrics","OpenTelemetry Host Metrics receiver",".",[141,221,222],{},[168,223,224],{},"CPU usage:",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-yaml shiki shiki-themes github-light","monitors:\n  - name: CPU usage\n    type: metric\n    metrics:\n      - system_cpu_load_average_15m as $load_avg_15m\n      - system_cpu_time as $cpu_time\n    query:\n      - $load_avg_15m \u002F uniq($cpu_time.cpu) as cpu_util\n      - group by host_name\n    column:\n      name: cpu_util\n      unit: utilization\n    detector:\n      type: manual\n      max_value: 3\n    num_eval_points: 10\n","yaml","",[184,233,234,247,263,274,282,291,299,307,315,323,331,342,353,361,372,384],{"__ignoreMap":231},[235,236,239,243],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"shJU0","monitors",[235,244,246],{"class":245},"sgsFI",":\n",[235,248,250,253,256,259],{"class":237,"line":249},2,[235,251,252],{"class":245},"  - ",[235,254,255],{"class":241},"name",[235,257,258],{"class":245},": ",[235,260,262],{"class":261},"sYBdl","CPU usage\n",[235,264,266,269,271],{"class":237,"line":265},3,[235,267,268],{"class":241},"    type",[235,270,258],{"class":245},[235,272,273],{"class":261},"metric\n",[235,275,277,280],{"class":237,"line":276},4,[235,278,279],{"class":241},"    metrics",[235,281,246],{"class":245},[235,283,285,288],{"class":237,"line":284},5,[235,286,287],{"class":245},"      - ",[235,289,290],{"class":261},"system_cpu_load_average_15m as $load_avg_15m\n",[235,292,294,296],{"class":237,"line":293},6,[235,295,287],{"class":245},[235,297,298],{"class":261},"system_cpu_time as $cpu_time\n",[235,300,302,305],{"class":237,"line":301},7,[235,303,304],{"class":241},"    query",[235,306,246],{"class":245},[235,308,310,312],{"class":237,"line":309},8,[235,311,287],{"class":245},[235,313,314],{"class":261},"$load_avg_15m \u002F uniq($cpu_time.cpu) as cpu_util\n",[235,316,318,320],{"class":237,"line":317},9,[235,319,287],{"class":245},[235,321,322],{"class":261},"group by host_name\n",[235,324,326,329],{"class":237,"line":325},10,[235,327,328],{"class":241},"    column",[235,330,246],{"class":245},[235,332,334,337,339],{"class":237,"line":333},11,[235,335,336],{"class":241},"      name",[235,338,258],{"class":245},[235,340,341],{"class":261},"cpu_util\n",[235,343,345,348,350],{"class":237,"line":344},12,[235,346,347],{"class":241},"      unit",[235,349,258],{"class":245},[235,351,352],{"class":261},"utilization\n",[235,354,356,359],{"class":237,"line":355},13,[235,357,358],{"class":241},"    detector",[235,360,246],{"class":245},[235,362,364,367,369],{"class":237,"line":363},14,[235,365,366],{"class":241},"      type",[235,368,258],{"class":245},[235,370,371],{"class":261},"manual\n",[235,373,375,378,380],{"class":237,"line":374},15,[235,376,377],{"class":241},"      max_value",[235,379,258],{"class":245},[235,381,383],{"class":382},"sYu0t","3\n",[235,385,387,390,392],{"class":237,"line":386},16,[235,388,389],{"class":241},"    num_eval_points",[235,391,258],{"class":245},[235,393,394],{"class":382},"10\n",[141,396,397],{},[168,398,399],{},"Filesystem usage:",[226,401,403],{"className":228,"code":402,"language":230,"meta":231,"style":231},"monitors:\n  - name: Filesystem usage\n    type: metric\n    metrics:\n      - system_filesystem_usage as $fs_usage\n    query:\n      - $fs_usage{state='used'} \u002F $fs_usage as fs_util\n      - group by host_name, mountpoint\n      - where mountpoint !~ \"\u002Fsnap\"\n    column:\n      name: fs_util\n      unit: utilization\n    detector:\n      type: manual\n      max_value: 0.9\n    num_eval_points: 3\n",[184,404,405,411,422,430,436,443,449,456,463,470,476,485,493,499,507,516],{"__ignoreMap":231},[235,406,407,409],{"class":237,"line":238},[235,408,242],{"class":241},[235,410,246],{"class":245},[235,412,413,415,417,419],{"class":237,"line":249},[235,414,252],{"class":245},[235,416,255],{"class":241},[235,418,258],{"class":245},[235,420,421],{"class":261},"Filesystem usage\n",[235,423,424,426,428],{"class":237,"line":265},[235,425,268],{"class":241},[235,427,258],{"class":245},[235,429,273],{"class":261},[235,431,432,434],{"class":237,"line":276},[235,433,279],{"class":241},[235,435,246],{"class":245},[235,437,438,440],{"class":237,"line":284},[235,439,287],{"class":245},[235,441,442],{"class":261},"system_filesystem_usage as $fs_usage\n",[235,444,445,447],{"class":237,"line":293},[235,446,304],{"class":241},[235,448,246],{"class":245},[235,450,451,453],{"class":237,"line":301},[235,452,287],{"class":245},[235,454,455],{"class":261},"$fs_usage{state='used'} \u002F $fs_usage as fs_util\n",[235,457,458,460],{"class":237,"line":309},[235,459,287],{"class":245},[235,461,462],{"class":261},"group by host_name, mountpoint\n",[235,464,465,467],{"class":237,"line":317},[235,466,287],{"class":245},[235,468,469],{"class":261},"where mountpoint !~ \"\u002Fsnap\"\n",[235,471,472,474],{"class":237,"line":325},[235,473,328],{"class":241},[235,475,246],{"class":245},[235,477,478,480,482],{"class":237,"line":333},[235,479,336],{"class":241},[235,481,258],{"class":245},[235,483,484],{"class":261},"fs_util\n",[235,486,487,489,491],{"class":237,"line":344},[235,488,347],{"class":241},[235,490,258],{"class":245},[235,492,352],{"class":261},[235,494,495,497],{"class":237,"line":355},[235,496,358],{"class":241},[235,498,246],{"class":245},[235,500,501,503,505],{"class":237,"line":363},[235,502,366],{"class":241},[235,504,258],{"class":245},[235,506,371],{"class":261},[235,508,509,511,513],{"class":237,"line":374},[235,510,377],{"class":241},[235,512,258],{"class":245},[235,514,515],{"class":382},"0.9\n",[235,517,518,520,522],{"class":237,"line":386},[235,519,389],{"class":241},[235,521,258],{"class":245},[235,523,383],{"class":382},[141,525,526],{},[168,527,528],{},"Disk pending operations:",[226,530,532],{"className":228,"code":531,"language":230,"meta":231,"style":231},"monitors:\n  - name: Disk pending operations\n    type: metric\n    metrics:\n      - system_disk_pending_operations as $pending_ops\n    query:\n      - $pending_ops\n      - group by host_name, device\n    detector:\n      type: manual\n      max_value: 100\n    num_eval_points: 10\n",[184,533,534,540,551,559,565,572,578,585,592,598,606,615],{"__ignoreMap":231},[235,535,536,538],{"class":237,"line":238},[235,537,242],{"class":241},[235,539,246],{"class":245},[235,541,542,544,546,548],{"class":237,"line":249},[235,543,252],{"class":245},[235,545,255],{"class":241},[235,547,258],{"class":245},[235,549,550],{"class":261},"Disk pending operations\n",[235,552,553,555,557],{"class":237,"line":265},[235,554,268],{"class":241},[235,556,258],{"class":245},[235,558,273],{"class":261},[235,560,561,563],{"class":237,"line":276},[235,562,279],{"class":241},[235,564,246],{"class":245},[235,566,567,569],{"class":237,"line":284},[235,568,287],{"class":245},[235,570,571],{"class":261},"system_disk_pending_operations as $pending_ops\n",[235,573,574,576],{"class":237,"line":293},[235,575,304],{"class":241},[235,577,246],{"class":245},[235,579,580,582],{"class":237,"line":301},[235,581,287],{"class":245},[235,583,584],{"class":261},"$pending_ops\n",[235,586,587,589],{"class":237,"line":309},[235,588,287],{"class":245},[235,590,591],{"class":261},"group by host_name, device\n",[235,593,594,596],{"class":237,"line":317},[235,595,358],{"class":241},[235,597,246],{"class":245},[235,599,600,602,604],{"class":237,"line":325},[235,601,366],{"class":241},[235,603,258],{"class":245},[235,605,371],{"class":261},[235,607,608,610,612],{"class":237,"line":333},[235,609,377],{"class":241},[235,611,258],{"class":245},[235,613,614],{"class":382},"100\n",[235,616,617,619,621],{"class":237,"line":344},[235,618,389],{"class":241},[235,620,258],{"class":245},[235,622,394],{"class":382},[141,624,625],{},[168,626,627],{},"Network errors:",[226,629,631],{"className":228,"code":630,"language":230,"meta":231,"style":231},"monitors:\n  - name: Network errors\n    type: metric\n    metrics:\n      - system_network_errors as $net_errors\n    query:\n      - $net_errors\n      - group by host_name\n    detector:\n      type: manual\n      max_value: 0\n    num_eval_points: 3\n",[184,632,633,639,650,658,664,671,677,684,690,696,704,713],{"__ignoreMap":231},[235,634,635,637],{"class":237,"line":238},[235,636,242],{"class":241},[235,638,246],{"class":245},[235,640,641,643,645,647],{"class":237,"line":249},[235,642,252],{"class":245},[235,644,255],{"class":241},[235,646,258],{"class":245},[235,648,649],{"class":261},"Network errors\n",[235,651,652,654,656],{"class":237,"line":265},[235,653,268],{"class":241},[235,655,258],{"class":245},[235,657,273],{"class":261},[235,659,660,662],{"class":237,"line":276},[235,661,279],{"class":241},[235,663,246],{"class":245},[235,665,666,668],{"class":237,"line":284},[235,667,287],{"class":245},[235,669,670],{"class":261},"system_network_errors as $net_errors\n",[235,672,673,675],{"class":237,"line":293},[235,674,304],{"class":241},[235,676,246],{"class":245},[235,678,679,681],{"class":237,"line":301},[235,680,287],{"class":245},[235,682,683],{"class":261},"$net_errors\n",[235,685,686,688],{"class":237,"line":309},[235,687,287],{"class":245},[235,689,322],{"class":261},[235,691,692,694],{"class":237,"line":317},[235,693,358],{"class":241},[235,695,246],{"class":245},[235,697,698,700,702],{"class":237,"line":325},[235,699,366],{"class":241},[235,701,258],{"class":245},[235,703,371],{"class":261},[235,705,706,708,710],{"class":237,"line":333},[235,707,377],{"class":241},[235,709,258],{"class":245},[235,711,712],{"class":382},"0\n",[235,714,715,717,719],{"class":237,"line":344},[235,716,389],{"class":241},[235,718,258],{"class":245},[235,720,383],{"class":382},[154,722,724],{"id":723},"span-and-log-metrics","Span and log metrics",[141,726,727],{},"Uptrace generates three internal metrics from your tracing pipeline that you can query in metric monitors:",[729,730,731,744],"table",{},[732,733,734],"thead",{},[735,736,737,741],"tr",{},[738,739,740],"th",{},"Metric",[738,742,743],{},"Description",[745,746,747,758,768],"tbody",{},[735,748,749,755],{},[750,751,752],"td",{},[184,753,754],{},"uptrace_tracing_spans",[750,756,757],{},"Span count and duration. Excludes events and logs.",[735,759,760,765],{},[750,761,762],{},[184,763,764],{},"uptrace_tracing_logs",[750,766,767],{},"Log record count. Excludes spans and events.",[735,769,770,775],{},[750,771,772],{},[184,773,774],{},"uptrace_tracing_events",[750,776,777],{},"Event count. Excludes spans and logs.",[141,779,780,781,784,785,788,789,791],{},"All span attributes are available for filtering and grouping — for example ",[184,782,783],{},"where _status_code = 'error'"," or ",[184,786,787],{},"group by service_name",". See ",[215,790,21],{"href":22}," for the full attribute reference.",[141,793,794],{},[168,795,796],{},"PostgreSQL SELECT duration:",[226,798,800],{"className":228,"code":799,"language":230,"meta":231,"style":231},"monitors:\n  - name: PostgreSQL SELECT duration\n    type: metric\n    metrics:\n      - uptrace_tracing_spans as $spans\n    query:\n      - avg($spans)\n      - where _system = 'db:postgresql'\n      - where db_operation = 'SELECT'\n    detector:\n      type: manual\n      max_value: 10 # milliseconds\n    num_eval_points: 5\n",[184,801,802,808,819,827,833,840,846,853,860,867,873,881,894],{"__ignoreMap":231},[235,803,804,806],{"class":237,"line":238},[235,805,242],{"class":241},[235,807,246],{"class":245},[235,809,810,812,814,816],{"class":237,"line":249},[235,811,252],{"class":245},[235,813,255],{"class":241},[235,815,258],{"class":245},[235,817,818],{"class":261},"PostgreSQL SELECT duration\n",[235,820,821,823,825],{"class":237,"line":265},[235,822,268],{"class":241},[235,824,258],{"class":245},[235,826,273],{"class":261},[235,828,829,831],{"class":237,"line":276},[235,830,279],{"class":241},[235,832,246],{"class":245},[235,834,835,837],{"class":237,"line":284},[235,836,287],{"class":245},[235,838,839],{"class":261},"uptrace_tracing_spans as $spans\n",[235,841,842,844],{"class":237,"line":293},[235,843,304],{"class":241},[235,845,246],{"class":245},[235,847,848,850],{"class":237,"line":301},[235,849,287],{"class":245},[235,851,852],{"class":261},"avg($spans)\n",[235,854,855,857],{"class":237,"line":309},[235,856,287],{"class":245},[235,858,859],{"class":261},"where _system = 'db:postgresql'\n",[235,861,862,864],{"class":237,"line":317},[235,863,287],{"class":245},[235,865,866],{"class":261},"where db_operation = 'SELECT'\n",[235,868,869,871],{"class":237,"line":325},[235,870,358],{"class":241},[235,872,246],{"class":245},[235,874,875,877,879],{"class":237,"line":333},[235,876,366],{"class":241},[235,878,258],{"class":245},[235,880,371],{"class":261},[235,882,883,885,887,890],{"class":237,"line":344},[235,884,377],{"class":241},[235,886,258],{"class":245},[235,888,889],{"class":382},"10",[235,891,893],{"class":892},"sAwPA"," # milliseconds\n",[235,895,896,898,900],{"class":237,"line":355},[235,897,389],{"class":241},[235,899,258],{"class":245},[235,901,902],{"class":382},"5\n",[141,904,905],{},[168,906,907],{},"Database operation latency (p50):",[226,909,911],{"className":228,"code":910,"language":230,"meta":231,"style":231},"monitors:\n  - name: Database operations duration\n    type: metric\n    metrics:\n      - uptrace_tracing_spans as $spans\n    query:\n      - p50($spans)\n      - where _type = \"db\"\n    detector:\n      type: manual\n      max_value: 10 # milliseconds\n    num_eval_points: 5\n",[184,912,913,919,930,938,944,950,956,963,970,976,984,994],{"__ignoreMap":231},[235,914,915,917],{"class":237,"line":238},[235,916,242],{"class":241},[235,918,246],{"class":245},[235,920,921,923,925,927],{"class":237,"line":249},[235,922,252],{"class":245},[235,924,255],{"class":241},[235,926,258],{"class":245},[235,928,929],{"class":261},"Database operations duration\n",[235,931,932,934,936],{"class":237,"line":265},[235,933,268],{"class":241},[235,935,258],{"class":245},[235,937,273],{"class":261},[235,939,940,942],{"class":237,"line":276},[235,941,279],{"class":241},[235,943,246],{"class":245},[235,945,946,948],{"class":237,"line":284},[235,947,287],{"class":245},[235,949,839],{"class":261},[235,951,952,954],{"class":237,"line":293},[235,953,304],{"class":241},[235,955,246],{"class":245},[235,957,958,960],{"class":237,"line":301},[235,959,287],{"class":245},[235,961,962],{"class":261},"p50($spans)\n",[235,964,965,967],{"class":237,"line":309},[235,966,287],{"class":245},[235,968,969],{"class":261},"where _type = \"db\"\n",[235,971,972,974],{"class":237,"line":317},[235,973,358],{"class":241},[235,975,246],{"class":245},[235,977,978,980,982],{"class":237,"line":325},[235,979,366],{"class":241},[235,981,258],{"class":245},[235,983,371],{"class":261},[235,985,986,988,990,992],{"class":237,"line":333},[235,987,377],{"class":241},[235,989,258],{"class":245},[235,991,889],{"class":382},[235,993,893],{"class":892},[235,995,996,998,1000],{"class":237,"line":344},[235,997,389],{"class":241},[235,999,258],{"class":245},[235,1001,902],{"class":382},[141,1003,1004],{},[168,1005,1006],{},"Log error rate:",[226,1008,1010],{"className":228,"code":1009,"language":230,"meta":231,"style":231},"monitors:\n  - name: Number of errors\n    type: metric\n    metrics:\n      - uptrace_tracing_logs as $logs\n    query:\n      - perMin(sum($logs))\n      - where _system in (\"log:error\", \"log:fatal\")\n    detector:\n      type: manual\n      max_value: 10\n    num_eval_points: 3\n",[184,1011,1012,1018,1029,1037,1043,1050,1056,1063,1070,1076,1084,1092],{"__ignoreMap":231},[235,1013,1014,1016],{"class":237,"line":238},[235,1015,242],{"class":241},[235,1017,246],{"class":245},[235,1019,1020,1022,1024,1026],{"class":237,"line":249},[235,1021,252],{"class":245},[235,1023,255],{"class":241},[235,1025,258],{"class":245},[235,1027,1028],{"class":261},"Number of errors\n",[235,1030,1031,1033,1035],{"class":237,"line":265},[235,1032,268],{"class":241},[235,1034,258],{"class":245},[235,1036,273],{"class":261},[235,1038,1039,1041],{"class":237,"line":276},[235,1040,279],{"class":241},[235,1042,246],{"class":245},[235,1044,1045,1047],{"class":237,"line":284},[235,1046,287],{"class":245},[235,1048,1049],{"class":261},"uptrace_tracing_logs as $logs\n",[235,1051,1052,1054],{"class":237,"line":293},[235,1053,304],{"class":241},[235,1055,246],{"class":245},[235,1057,1058,1060],{"class":237,"line":301},[235,1059,287],{"class":245},[235,1061,1062],{"class":261},"perMin(sum($logs))\n",[235,1064,1065,1067],{"class":237,"line":309},[235,1066,287],{"class":245},[235,1068,1069],{"class":261},"where _system in (\"log:error\", \"log:fatal\")\n",[235,1071,1072,1074],{"class":237,"line":317},[235,1073,358],{"class":241},[235,1075,246],{"class":245},[235,1077,1078,1080,1082],{"class":237,"line":325},[235,1079,366],{"class":241},[235,1081,258],{"class":245},[235,1083,371],{"class":261},[235,1085,1086,1088,1090],{"class":237,"line":333},[235,1087,377],{"class":241},[235,1089,258],{"class":245},[235,1091,394],{"class":382},[235,1093,1094,1096,1098],{"class":237,"line":344},[235,1095,389],{"class":241},[235,1097,258],{"class":245},[235,1099,383],{"class":382},[141,1101,1102],{},[168,1103,1104],{},"Failed HTTP requests:",[226,1106,1108],{"className":228,"code":1107,"language":230,"meta":231,"style":231},"monitors:\n  - name: Failed requests\n    type: metric\n    metrics:\n      - uptrace_tracing_spans as $spans\n    query:\n      - perMin(count($spans{_status_code=\"error\"})) as failed_requests\n      - where _type = \"httpserver\"\n    detector:\n      type: manual\n      max_value: 0\n",[184,1109,1110,1116,1127,1135,1141,1147,1153,1160,1167,1173,1181],{"__ignoreMap":231},[235,1111,1112,1114],{"class":237,"line":238},[235,1113,242],{"class":241},[235,1115,246],{"class":245},[235,1117,1118,1120,1122,1124],{"class":237,"line":249},[235,1119,252],{"class":245},[235,1121,255],{"class":241},[235,1123,258],{"class":245},[235,1125,1126],{"class":261},"Failed requests\n",[235,1128,1129,1131,1133],{"class":237,"line":265},[235,1130,268],{"class":241},[235,1132,258],{"class":245},[235,1134,273],{"class":261},[235,1136,1137,1139],{"class":237,"line":276},[235,1138,279],{"class":241},[235,1140,246],{"class":245},[235,1142,1143,1145],{"class":237,"line":284},[235,1144,287],{"class":245},[235,1146,839],{"class":261},[235,1148,1149,1151],{"class":237,"line":293},[235,1150,304],{"class":241},[235,1152,246],{"class":245},[235,1154,1155,1157],{"class":237,"line":301},[235,1156,287],{"class":245},[235,1158,1159],{"class":261},"perMin(count($spans{_status_code=\"error\"})) as failed_requests\n",[235,1161,1162,1164],{"class":237,"line":309},[235,1163,287],{"class":245},[235,1165,1166],{"class":261},"where _type = \"httpserver\"\n",[235,1168,1169,1171],{"class":237,"line":317},[235,1170,358],{"class":241},[235,1172,246],{"class":245},[235,1174,1175,1177,1179],{"class":237,"line":325},[235,1176,366],{"class":241},[235,1178,258],{"class":245},[235,1180,371],{"class":261},[235,1182,1183,1185,1187],{"class":237,"line":333},[235,1184,377],{"class":241},[235,1186,258],{"class":245},[235,1188,712],{"class":382},[154,1190,1192],{"id":1191},"alert-names","Alert names",[1194,1195],"partial",{"path":1191},[1197,1198,1199],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":231,"searchDepth":276,"depth":249,"links":1201},[1202,1203,1204,1205],{"id":156,"depth":249,"text":157},{"id":209,"depth":249,"text":210},{"id":723,"depth":249,"text":724},{"id":1191,"depth":249,"text":1192},"Create metric monitors in Uptrace to alert on CPU, disk, network, span latency, error rates, and log volume using YAML-defined thresholds and rolling evaluation windows.","md",null,{"readingTime":1210},{"text":1211,"minutes":1212,"time":1213,"words":1214},"3 min read",2.44,146400,488,{"title":63,"description":1206},"wgz1f2T9RVIEaM07MsktyFReajBE1Wzh4b_m6iDeJis",[1218,1220],{"title":59,"path":60,"stem":61,"description":1219,"children":-1},"Set up error monitors in Uptrace to receive alerts for specific log patterns, exception types, and severity levels. Customize alert names with Go templates.",{"title":67,"path":68,"stem":69,"description":1221,"children":-1},"Configure Uptrace notification channels to receive alerts via Slack, PagerDuty, Microsoft Teams, Telegram, email, webhooks, and more. Control routing with Expr conditions.",{"id":1223,"title":1224,"body":1225,"description":1229,"extension":1207,"meta":1297,"navigation":10,"path":1303,"seo":1304,"stem":1305,"__hash__":1306},"partials\u002Fpartials\u002F_alert-names.md","Alert Names",{"type":138,"value":1226,"toc":1295},[1227,1230,1233,1240,1243],[141,1228,1229],{},"For metric monitors, Uptrace generates alert names using the monitor name and timeseries name, for example, \"Disk usage: myhost+mydisk\".",[141,1231,1232],{},"For error monitors, Uptrace generates alert names using the error (log) message, for example, \"ERROR *fmt.wrapError: writeError failed\".",[141,1234,1235,1236,1239],{},"You can customize alert names by specifying a Go template string as the monitor name when creating a monitor, for example, ",[184,1237,1238],{},"{{ .Attrs.deployment_environment_name }}: {{ .DisplayName }}"," will prefix the alert name with the deployment environment attribute.",[141,1241,1242],{},"You can use the following variables in templates:",[729,1244,1245,1257],{},[732,1246,1247],{},[735,1248,1249,1252,1255],{},[738,1250,1251],{},"Variable",[738,1253,1254],{},"Type",[738,1256,743],{},[745,1258,1259,1276],{},[735,1260,1261,1266,1269],{},[750,1262,1263],{},[184,1264,1265],{},"{{ .DisplayName }}",[750,1267,1268],{},"string",[750,1270,1271,1272,1275],{},"Same as ",[184,1273,1274],{},"_display_name"," when querying spans and logs.",[735,1277,1278,1283,1289],{},[750,1279,1280],{},[184,1281,1282],{},"{{ .Attrs }}",[750,1284,1285,1286,1288],{},"map",[235,1287,1268],{},"any",[750,1290,1291,1292,219],{},"All available attributes, for example, ",[184,1293,1294],{},"{{ .Attrs.service_name }}",{"title":231,"searchDepth":276,"depth":249,"links":1296},[],{"readingTime":1298},{"text":1299,"minutes":1300,"time":1301,"words":1302},"1 min read",0.42,25200,84,"\u002Fpartials\u002F_alert-names",{"description":1229},"partials\u002F_alert-names","U_e2fG6gbH6x_mGZ1iQPmIxCoRqQUzr7DgbSDN50a58",1780666755235]