[{"data":1,"prerenderedAt":1424},["ShallowReactive",2],{"\u002Fget\u002Fsynthetic-monitoring-navigation":3,"\u002Fget\u002Fsynthetic-monitoring":407},[4,8,12,16,20,24,28,32,72,106,138,166,200,227,265,295,325,352,379],{"title":5,"path":6,"stem":7},"Get started","\u002Fget","get\u002F01.index",{"title":9,"path":10,"stem":11},"Logs monitoring","\u002Fget\u002Flogs","get\u002F02.logs",{"title":13,"path":14,"stem":15},"Exceptions and errors","\u002Fget\u002Fexceptions","get\u002F03.exceptions",{"title":17,"path":18,"stem":19},"Kubernetes","\u002Fget\u002Fkubernetes","get\u002F04.kubernetes",{"title":21,"path":22,"stem":23},"Migrating from Datadog","\u002Fget\u002Fdatadog-migration","get\u002F05.datadog-migration",{"title":25,"path":26,"stem":27},"Migrating from NewRelic","\u002Fget\u002Fnewrelic-migration","get\u002F06.newrelic-migration",{"title":29,"path":30,"stem":31},"Synthetic Monitoring","\u002Fget\u002Fsynthetic-monitoring","get\u002F07.synthetic-monitoring",{"title":33,"closed":34,"path":35,"stem":36,"children":37,"page":-1},"Hosted",true,"\u002Fget\u002Fhosted","get\u002Fhosted\u002Findex",[38,40,44,48,52,56,60,64,68],{"title":39,"path":35,"stem":36},"Overview",{"title":41,"path":42,"stem":43},"Why Uptrace?","\u002Fget\u002Fhosted\u002Fopen-source-apm","get\u002Fhosted\u002F01.open-source-apm",{"title":45,"path":46,"stem":47},"Install Uptrace","\u002Fget\u002Fhosted\u002Finstall","get\u002Fhosted\u002F02.install",{"title":49,"path":50,"stem":51},"Ansible deployment","\u002Fget\u002Fhosted\u002Fansible","get\u002Fhosted\u002F03.ansible",{"title":53,"path":54,"stem":55},"K8s deployment","\u002Fget\u002Fhosted\u002Fk8s","get\u002Fhosted\u002F04.k8s",{"title":57,"path":58,"stem":59},"Docker deployment","\u002Fget\u002Fhosted\u002Fdocker","get\u002Fhosted\u002F05.docker",{"title":61,"path":62,"stem":63},"Configuration","\u002Fget\u002Fhosted\u002Fconfig","get\u002Fhosted\u002F06.config",{"title":65,"path":66,"stem":67},"Troubleshooting","\u002Fget\u002Fhosted\u002Fdebug","get\u002Fhosted\u002F07.debug",{"title":69,"path":70,"stem":71},"Scaling","\u002Fget\u002Fhosted\u002Fscale","get\u002Fhosted\u002F08.scale",{"title":73,"path":74,"stem":75,"children":76,"closed":34},"C++","\u002Fget\u002Fopentelemetry-cpp","get\u002Fopentelemetry-cpp\u002F01.index",[77,78,82,86,90,94,98,102],{"title":5,"path":74,"stem":75},{"title":79,"path":80,"stem":81},"OTLP exporter","\u002Fget\u002Fopentelemetry-cpp\u002Fotlp","get\u002Fopentelemetry-cpp\u002F02.otlp",{"title":83,"path":84,"stem":85},"Tracing","\u002Fget\u002Fopentelemetry-cpp\u002Ftracing","get\u002Fopentelemetry-cpp\u002F03.tracing",{"title":87,"path":88,"stem":89},"Metrics","\u002Fget\u002Fopentelemetry-cpp\u002Fmetrics","get\u002Fopentelemetry-cpp\u002F04.metrics",{"title":91,"path":92,"stem":93},"Logs","\u002Fget\u002Fopentelemetry-cpp\u002Flogs","get\u002Fopentelemetry-cpp\u002F05.logs",{"title":95,"path":96,"stem":97},"Resource attributes","\u002Fget\u002Fopentelemetry-cpp\u002Fresources","get\u002Fopentelemetry-cpp\u002F06.resources",{"title":99,"path":100,"stem":101},"Context Propagation","\u002Fget\u002Fopentelemetry-cpp\u002Fpropagation","get\u002Fopentelemetry-cpp\u002F07.propagation",{"title":103,"path":104,"stem":105},"Sampling","\u002Fget\u002Fopentelemetry-cpp\u002Fsampling","get\u002Fopentelemetry-cpp\u002F08.sampling",{"title":107,"path":108,"stem":109,"children":110,"closed":34},".NET","\u002Fget\u002Fopentelemetry-dotnet","get\u002Fopentelemetry-dotnet\u002F01.index",[111,112,115,118,121,124,128,131,134],{"title":5,"path":108,"stem":109},{"title":79,"path":113,"stem":114},"\u002Fget\u002Fopentelemetry-dotnet\u002Fotlp","get\u002Fopentelemetry-dotnet\u002F02.otlp",{"title":83,"path":116,"stem":117},"\u002Fget\u002Fopentelemetry-dotnet\u002Ftracing","get\u002Fopentelemetry-dotnet\u002F03.tracing",{"title":87,"path":119,"stem":120},"\u002Fget\u002Fopentelemetry-dotnet\u002Fmetrics","get\u002Fopentelemetry-dotnet\u002F04.metrics",{"title":91,"path":122,"stem":123},"\u002Fget\u002Fopentelemetry-dotnet\u002Flogs","get\u002Fopentelemetry-dotnet\u002F05.logs",{"title":125,"path":126,"stem":127},"Resource detectors","\u002Fget\u002Fopentelemetry-dotnet\u002Fresources","get\u002Fopentelemetry-dotnet\u002F06.resources",{"title":99,"path":129,"stem":130},"\u002Fget\u002Fopentelemetry-dotnet\u002Fpropagation","get\u002Fopentelemetry-dotnet\u002F07.propagation",{"title":103,"path":132,"stem":133},"\u002Fget\u002Fopentelemetry-dotnet\u002Fsampling","get\u002Fopentelemetry-dotnet\u002F08.sampling",{"title":135,"path":136,"stem":137},"Zero-code","\u002Fget\u002Fopentelemetry-dotnet\u002Fzero-code","get\u002Fopentelemetry-dotnet\u002F09.zero-code",{"title":139,"path":140,"stem":141,"children":142,"closed":34},"Erlang\u002FElixir","\u002Fget\u002Fopentelemetry-erlang","get\u002Fopentelemetry-erlang\u002F01.index",[143,144,147,150,153,156,159,163],{"title":5,"path":140,"stem":141},{"title":79,"path":145,"stem":146},"\u002Fget\u002Fopentelemetry-erlang\u002Fotlp","get\u002Fopentelemetry-erlang\u002F02.otlp",{"title":83,"path":148,"stem":149},"\u002Fget\u002Fopentelemetry-erlang\u002Ftracing","get\u002Fopentelemetry-erlang\u002F03.tracing",{"title":87,"path":151,"stem":152},"\u002Fget\u002Fopentelemetry-erlang\u002Fmetrics","get\u002Fopentelemetry-erlang\u002F04.metrics",{"title":91,"path":154,"stem":155},"\u002Fget\u002Fopentelemetry-erlang\u002Flogs","get\u002Fopentelemetry-erlang\u002F05.logs",{"title":125,"path":157,"stem":158},"\u002Fget\u002Fopentelemetry-erlang\u002Fresources","get\u002Fopentelemetry-erlang\u002F06.resources",{"title":160,"path":161,"stem":162},"Propagation","\u002Fget\u002Fopentelemetry-erlang\u002Fpropagation","get\u002Fopentelemetry-erlang\u002F07.propagation",{"title":103,"path":164,"stem":165},"\u002Fget\u002Fopentelemetry-erlang\u002Fsampling","get\u002Fopentelemetry-erlang\u002F08.sampling",{"title":167,"path":168,"stem":169,"children":170,"closed":34},"Golang","\u002Fget\u002Fopentelemetry-go","get\u002Fopentelemetry-go\u002F01.index",[171,172,175,178,181,184,187,190,193,197],{"title":5,"path":168,"stem":169},{"title":79,"path":173,"stem":174},"\u002Fget\u002Fopentelemetry-go\u002Fotlp","get\u002Fopentelemetry-go\u002F02.otlp",{"title":83,"path":176,"stem":177},"\u002Fget\u002Fopentelemetry-go\u002Ftracing","get\u002Fopentelemetry-go\u002F03.tracing",{"title":87,"path":179,"stem":180},"\u002Fget\u002Fopentelemetry-go\u002Fmetrics","get\u002Fopentelemetry-go\u002F04.metrics",{"title":91,"path":182,"stem":183},"\u002Fget\u002Fopentelemetry-go\u002Flogs","get\u002Fopentelemetry-go\u002F05.logs",{"title":125,"path":185,"stem":186},"\u002Fget\u002Fopentelemetry-go\u002Fresources","get\u002Fopentelemetry-go\u002F06.resources",{"title":99,"path":188,"stem":189},"\u002Fget\u002Fopentelemetry-go\u002Fpropagation","get\u002Fopentelemetry-go\u002F07.propagation",{"title":103,"path":191,"stem":192},"\u002Fget\u002Fopentelemetry-go\u002Fsampling","get\u002Fopentelemetry-go\u002F08.sampling",{"title":194,"path":195,"stem":196},"Serverless","\u002Fget\u002Fopentelemetry-go\u002Fserverless","get\u002Fopentelemetry-go\u002F09.serverless",{"title":135,"path":198,"stem":199},"\u002Fget\u002Fopentelemetry-go\u002Fzero-code","get\u002Fopentelemetry-go\u002F09.zero-code",{"title":201,"path":202,"stem":203,"children":204,"closed":34},"Java","\u002Fget\u002Fopentelemetry-java","get\u002Fopentelemetry-java\u002F01.index",[205,206,209,212,215,218,221,224],{"title":5,"path":202,"stem":203},{"title":83,"path":207,"stem":208},"\u002Fget\u002Fopentelemetry-java\u002Ftracing","get\u002Fopentelemetry-java\u002F03.tracing",{"title":87,"path":210,"stem":211},"\u002Fget\u002Fopentelemetry-java\u002Fmetrics","get\u002Fopentelemetry-java\u002F04.metrics",{"title":91,"path":213,"stem":214},"\u002Fget\u002Fopentelemetry-java\u002Flogs","get\u002Fopentelemetry-java\u002F05.logs",{"title":125,"path":216,"stem":217},"\u002Fget\u002Fopentelemetry-java\u002Fresources","get\u002Fopentelemetry-java\u002F06.resources",{"title":160,"path":219,"stem":220},"\u002Fget\u002Fopentelemetry-java\u002Fpropagation","get\u002Fopentelemetry-java\u002F07.propagation",{"title":103,"path":222,"stem":223},"\u002Fget\u002Fopentelemetry-java\u002Fsampling","get\u002Fopentelemetry-java\u002F08.sampling",{"title":135,"path":225,"stem":226},"\u002Fget\u002Fopentelemetry-java\u002Fzero-code","get\u002Fopentelemetry-java\u002F09.zero-code",{"title":228,"path":229,"stem":230,"children":231,"closed":34},"JavaScript","\u002Fget\u002Fopentelemetry-js","get\u002Fopentelemetry-js\u002F01.index",[232,233,237,241,244,247,250,253,256,259,262],{"title":5,"path":229,"stem":230},{"title":234,"path":235,"stem":236},"Node.js","\u002Fget\u002Fopentelemetry-js\u002Fnode","get\u002Fopentelemetry-js\u002F02.node",{"title":238,"path":239,"stem":240},"Browsers","\u002Fget\u002Fopentelemetry-js\u002Fbrowser","get\u002Fopentelemetry-js\u002F03.browser",{"title":79,"path":242,"stem":243},"\u002Fget\u002Fopentelemetry-js\u002Fotlp","get\u002Fopentelemetry-js\u002F04.otlp",{"title":83,"path":245,"stem":246},"\u002Fget\u002Fopentelemetry-js\u002Ftracing","get\u002Fopentelemetry-js\u002F05.tracing",{"title":87,"path":248,"stem":249},"\u002Fget\u002Fopentelemetry-js\u002Fmetrics","get\u002Fopentelemetry-js\u002F06.metrics",{"title":91,"path":251,"stem":252},"\u002Fget\u002Fopentelemetry-js\u002Flogs","get\u002Fopentelemetry-js\u002F07.logs",{"title":125,"path":254,"stem":255},"\u002Fget\u002Fopentelemetry-js\u002Fresources","get\u002Fopentelemetry-js\u002F08.resources",{"title":160,"path":257,"stem":258},"\u002Fget\u002Fopentelemetry-js\u002Fpropagation","get\u002Fopentelemetry-js\u002F09.propagation",{"title":103,"path":260,"stem":261},"\u002Fget\u002Fopentelemetry-js\u002Fsampling","get\u002Fopentelemetry-js\u002F10.sampling",{"title":135,"path":263,"stem":264},"\u002Fget\u002Fopentelemetry-js\u002Fzero-code","get\u002Fopentelemetry-js\u002F11.zero-code",{"title":266,"path":267,"stem":268,"children":269,"closed":34},"PHP","\u002Fget\u002Fopentelemetry-php","get\u002Fopentelemetry-php\u002F01.index",[270,271,274,277,280,283,286,289,292],{"title":5,"path":267,"stem":268},{"title":79,"path":272,"stem":273},"\u002Fget\u002Fopentelemetry-php\u002Fotlp","get\u002Fopentelemetry-php\u002F02.otlp",{"title":83,"path":275,"stem":276},"\u002Fget\u002Fopentelemetry-php\u002Ftracing","get\u002Fopentelemetry-php\u002F03.tracing",{"title":87,"path":278,"stem":279},"\u002Fget\u002Fopentelemetry-php\u002Fmetrics","get\u002Fopentelemetry-php\u002F04.metrics",{"title":91,"path":281,"stem":282},"\u002Fget\u002Fopentelemetry-php\u002Flogs","get\u002Fopentelemetry-php\u002F05.logs",{"title":125,"path":284,"stem":285},"\u002Fget\u002Fopentelemetry-php\u002Fresources","get\u002Fopentelemetry-php\u002F06.resources",{"title":160,"path":287,"stem":288},"\u002Fget\u002Fopentelemetry-php\u002Fpropagation","get\u002Fopentelemetry-php\u002F07.propagation",{"title":103,"path":290,"stem":291},"\u002Fget\u002Fopentelemetry-php\u002Fsampling","get\u002Fopentelemetry-php\u002F08.sampling",{"title":135,"path":293,"stem":294},"\u002Fget\u002Fopentelemetry-php\u002Fzero-code","get\u002Fopentelemetry-php\u002F09.zero-code",{"title":296,"path":297,"stem":298,"children":299,"closed":34},"Python","\u002Fget\u002Fopentelemetry-python","get\u002Fopentelemetry-python\u002F01.index",[300,301,304,307,310,313,316,319,322],{"title":5,"path":297,"stem":298},{"title":79,"path":302,"stem":303},"\u002Fget\u002Fopentelemetry-python\u002Fotlp","get\u002Fopentelemetry-python\u002F02.otlp",{"title":83,"path":305,"stem":306},"\u002Fget\u002Fopentelemetry-python\u002Ftracing","get\u002Fopentelemetry-python\u002F03.tracing",{"title":87,"path":308,"stem":309},"\u002Fget\u002Fopentelemetry-python\u002Fmetrics","get\u002Fopentelemetry-python\u002F04.metrics",{"title":91,"path":311,"stem":312},"\u002Fget\u002Fopentelemetry-python\u002Flogs","get\u002Fopentelemetry-python\u002F05.logs",{"title":125,"path":314,"stem":315},"\u002Fget\u002Fopentelemetry-python\u002Fresources","get\u002Fopentelemetry-python\u002F06.resources",{"title":160,"path":317,"stem":318},"\u002Fget\u002Fopentelemetry-python\u002Fpropagation","get\u002Fopentelemetry-python\u002F07.propagation",{"title":103,"path":320,"stem":321},"\u002Fget\u002Fopentelemetry-python\u002Fsampling","get\u002Fopentelemetry-python\u002F08.sampling",{"title":135,"path":323,"stem":324},"\u002Fget\u002Fopentelemetry-python\u002Fzero-code","get\u002Fopentelemetry-python\u002F09.zero-code",{"title":326,"path":327,"stem":328,"children":329,"closed":34},"Ruby","\u002Fget\u002Fopentelemetry-ruby","get\u002Fopentelemetry-ruby\u002F01.index",[330,331,334,337,340,343,346,349],{"title":5,"path":327,"stem":328},{"title":79,"path":332,"stem":333},"\u002Fget\u002Fopentelemetry-ruby\u002Fotlp","get\u002Fopentelemetry-ruby\u002F02.otlp",{"title":83,"path":335,"stem":336},"\u002Fget\u002Fopentelemetry-ruby\u002Ftracing","get\u002Fopentelemetry-ruby\u002F03.tracing",{"title":87,"path":338,"stem":339},"\u002Fget\u002Fopentelemetry-ruby\u002Fmetrics","get\u002Fopentelemetry-ruby\u002F04.metrics",{"title":91,"path":341,"stem":342},"\u002Fget\u002Fopentelemetry-ruby\u002Flogs","get\u002Fopentelemetry-ruby\u002F05.logs",{"title":125,"path":344,"stem":345},"\u002Fget\u002Fopentelemetry-ruby\u002Fresources","get\u002Fopentelemetry-ruby\u002F06.resources",{"title":160,"path":347,"stem":348},"\u002Fget\u002Fopentelemetry-ruby\u002Fpropagation","get\u002Fopentelemetry-ruby\u002F07.propagation",{"title":103,"path":350,"stem":351},"\u002Fget\u002Fopentelemetry-ruby\u002Fsampling","get\u002Fopentelemetry-ruby\u002F08.sampling",{"title":353,"path":354,"stem":355,"children":356,"closed":34},"Rust","\u002Fget\u002Fopentelemetry-rust","get\u002Fopentelemetry-rust\u002F01.index",[357,358,361,364,367,370,373,376],{"title":5,"path":354,"stem":355},{"title":79,"path":359,"stem":360},"\u002Fget\u002Fopentelemetry-rust\u002Fotlp","get\u002Fopentelemetry-rust\u002F02.otlp",{"title":83,"path":362,"stem":363},"\u002Fget\u002Fopentelemetry-rust\u002Ftracing","get\u002Fopentelemetry-rust\u002F03.tracing",{"title":87,"path":365,"stem":366},"\u002Fget\u002Fopentelemetry-rust\u002Fmetrics","get\u002Fopentelemetry-rust\u002F04.metrics",{"title":91,"path":368,"stem":369},"\u002Fget\u002Fopentelemetry-rust\u002Flogs","get\u002Fopentelemetry-rust\u002F05.logs",{"title":125,"path":371,"stem":372},"\u002Fget\u002Fopentelemetry-rust\u002Fresources","get\u002Fopentelemetry-rust\u002F06.resources",{"title":160,"path":374,"stem":375},"\u002Fget\u002Fopentelemetry-rust\u002Fpropagation","get\u002Fopentelemetry-rust\u002F07.propagation",{"title":103,"path":377,"stem":378},"\u002Fget\u002Fopentelemetry-rust\u002Fsampling","get\u002Fopentelemetry-rust\u002F08.sampling",{"title":380,"path":381,"stem":382,"children":383,"closed":34},"Swift","\u002Fget\u002Fopentelemetry-swift","get\u002Fopentelemetry-swift\u002F01.index",[384,385,388,391,394,397,401,404],{"title":5,"path":381,"stem":382},{"title":79,"path":386,"stem":387},"\u002Fget\u002Fopentelemetry-swift\u002Fotlp","get\u002Fopentelemetry-swift\u002F02.otlp",{"title":83,"path":389,"stem":390},"\u002Fget\u002Fopentelemetry-swift\u002Ftracing","get\u002Fopentelemetry-swift\u002F03.tracing",{"title":87,"path":392,"stem":393},"\u002Fget\u002Fopentelemetry-swift\u002Fmetrics","get\u002Fopentelemetry-swift\u002F04.metrics",{"title":91,"path":395,"stem":396},"\u002Fget\u002Fopentelemetry-swift\u002Flogs","get\u002Fopentelemetry-swift\u002F05.logs",{"title":398,"path":399,"stem":400},"Resource Attributes","\u002Fget\u002Fopentelemetry-swift\u002Fresources","get\u002Fopentelemetry-swift\u002F06.resources",{"title":99,"path":402,"stem":403},"\u002Fget\u002Fopentelemetry-swift\u002Fpropagation","get\u002Fopentelemetry-swift\u002F07.propagation",{"title":103,"path":405,"stem":406},"\u002Fget\u002Fopentelemetry-swift\u002Fsampling","get\u002Fopentelemetry-swift\u002F08.sampling",{"page":408,"surround":1419},{"id":409,"title":410,"author":411,"body":412,"date":1405,"description":1406,"extension":1407,"image":1408,"meta":1409,"navigation":1415,"path":30,"seo":1416,"stem":31,"surround_disabled":1417,"__hash__":1418},"get\u002Fget\u002F07.synthetic-monitoring.md","Monitor HTTP endpoints with Uptrace","vmihailenco",{"type":413,"value":414,"toc":1391},"minimark",[415,419,431,436,444,663,672,684,688,695,782,786,793,945,976,980,987,1063,1078,1082,1090,1124,1134,1138,1149,1211,1215,1218,1223,1300,1304,1335,1339,1361,1365,1387],[416,417,418],"p",{},"Synthetic monitoring periodically checks your HTTP endpoints and reports the results as OpenTelemetry metrics. This guide shows you how to configure the OpenTelemetry Collector to check your endpoints and view the results in Uptrace.",[416,420,421,425,426,430],{},[422,423,424],"strong",{},"Prerequisite:"," OpenTelemetry Collector already running and sending data to Uptrace. If not, start with ",[427,428,429],"a",{"href":6},"Getting started",".",[432,433,435],"h2",{"id":434},"basic-endpoint-check","Basic endpoint check",[416,437,438,439,443],{},"Add the ",[440,441,442],"code",{},"httpcheck"," receiver to your Collector config and include it in the metrics pipeline:",[445,446,451],"pre",{"className":447,"code":448,"language":449,"meta":450,"style":450},"language-yaml shiki shiki-themes github-light","receivers:\n  httpcheck:\n    targets:\n      - endpoint: 'https:\u002F\u002Fapi.example.com\u002Fhealth'\n        method: GET\n    collection_interval: 60s\n\nprocessors:\n  batch:\n\nexporters:\n  otlp:\n    endpoint: api.uptrace.dev:4317\n    headers: { 'uptrace-dsn': '\u003Cyour-dsn>' }\n\nservice:\n  pipelines:\n    metrics:\n      receivers: [httpcheck]\n      processors: [batch]\n      exporters: [otlp]\n","yaml","",[440,452,453,466,474,482,498,509,520,526,534,542,547,555,563,574,594,599,607,615,623,637,650],{"__ignoreMap":450},[454,455,458,462],"span",{"class":456,"line":457},"line",1,[454,459,461],{"class":460},"shJU0","receivers",[454,463,465],{"class":464},"sgsFI",":\n",[454,467,469,472],{"class":456,"line":468},2,[454,470,471],{"class":460},"  httpcheck",[454,473,465],{"class":464},[454,475,477,480],{"class":456,"line":476},3,[454,478,479],{"class":460},"    targets",[454,481,465],{"class":464},[454,483,485,488,491,494],{"class":456,"line":484},4,[454,486,487],{"class":464},"      - ",[454,489,490],{"class":460},"endpoint",[454,492,493],{"class":464},": ",[454,495,497],{"class":496},"sYBdl","'https:\u002F\u002Fapi.example.com\u002Fhealth'\n",[454,499,501,504,506],{"class":456,"line":500},5,[454,502,503],{"class":460},"        method",[454,505,493],{"class":464},[454,507,508],{"class":496},"GET\n",[454,510,512,515,517],{"class":456,"line":511},6,[454,513,514],{"class":460},"    collection_interval",[454,516,493],{"class":464},[454,518,519],{"class":496},"60s\n",[454,521,523],{"class":456,"line":522},7,[454,524,525],{"emptyLinePlaceholder":34},"\n",[454,527,529,532],{"class":456,"line":528},8,[454,530,531],{"class":460},"processors",[454,533,465],{"class":464},[454,535,537,540],{"class":456,"line":536},9,[454,538,539],{"class":460},"  batch",[454,541,465],{"class":464},[454,543,545],{"class":456,"line":544},10,[454,546,525],{"emptyLinePlaceholder":34},[454,548,550,553],{"class":456,"line":549},11,[454,551,552],{"class":460},"exporters",[454,554,465],{"class":464},[454,556,558,561],{"class":456,"line":557},12,[454,559,560],{"class":460},"  otlp",[454,562,465],{"class":464},[454,564,566,569,571],{"class":456,"line":565},13,[454,567,568],{"class":460},"    endpoint",[454,570,493],{"class":464},[454,572,573],{"class":496},"api.uptrace.dev:4317\n",[454,575,577,580,583,586,588,591],{"class":456,"line":576},14,[454,578,579],{"class":460},"    headers",[454,581,582],{"class":464},": { ",[454,584,585],{"class":496},"'uptrace-dsn'",[454,587,493],{"class":464},[454,589,590],{"class":496},"'\u003Cyour-dsn>'",[454,592,593],{"class":464}," }\n",[454,595,597],{"class":456,"line":596},15,[454,598,525],{"emptyLinePlaceholder":34},[454,600,602,605],{"class":456,"line":601},16,[454,603,604],{"class":460},"service",[454,606,465],{"class":464},[454,608,610,613],{"class":456,"line":609},17,[454,611,612],{"class":460},"  pipelines",[454,614,465],{"class":464},[454,616,618,621],{"class":456,"line":617},18,[454,619,620],{"class":460},"    metrics",[454,622,465],{"class":464},[454,624,626,629,632,634],{"class":456,"line":625},19,[454,627,628],{"class":460},"      receivers",[454,630,631],{"class":464},": [",[454,633,442],{"class":496},[454,635,636],{"class":464},"]\n",[454,638,640,643,645,648],{"class":456,"line":639},20,[454,641,642],{"class":460},"      processors",[454,644,631],{"class":464},[454,646,647],{"class":496},"batch",[454,649,636],{"class":464},[454,651,653,656,658,661],{"class":456,"line":652},21,[454,654,655],{"class":460},"      exporters",[454,657,631],{"class":464},[454,659,660],{"class":496},"otlp",[454,662,636],{"class":464},[416,664,665,666,668,669,671],{},"If your Collector already has a metrics pipeline, add ",[440,667,442],{}," to the existing ",[440,670,461],{}," list instead of replacing it.",[416,673,674,675,678,679,681,682,430],{},"Restart the Collector. After one collection interval you will see ",[440,676,677],{},"httpcheck_*"," metrics in Uptrace — open the ",[422,680,87],{}," section and search for ",[440,683,442],{},[432,685,687],{"id":686},"monitor-multiple-endpoints","Monitor multiple endpoints",[416,689,690,691,694],{},"Add as many targets as you need. Each target produces metrics tagged with its ",[440,692,693],{},"http_url",":",[445,696,698],{"className":447,"code":697,"language":449,"meta":450,"style":450},"receivers:\n  httpcheck:\n    targets:\n      - endpoint: 'https:\u002F\u002Fapi.example.com\u002Fhealth'\n        method: GET\n      - endpoint: 'https:\u002F\u002Fapp.example.com'\n        method: GET\n      - endpoint: 'https:\u002F\u002Fstaging.example.com\u002Fhealth'\n        method: GET\n    collection_interval: 60s\n",[440,699,700,706,712,718,728,736,747,755,766,774],{"__ignoreMap":450},[454,701,702,704],{"class":456,"line":457},[454,703,461],{"class":460},[454,705,465],{"class":464},[454,707,708,710],{"class":456,"line":468},[454,709,471],{"class":460},[454,711,465],{"class":464},[454,713,714,716],{"class":456,"line":476},[454,715,479],{"class":460},[454,717,465],{"class":464},[454,719,720,722,724,726],{"class":456,"line":484},[454,721,487],{"class":464},[454,723,490],{"class":460},[454,725,493],{"class":464},[454,727,497],{"class":496},[454,729,730,732,734],{"class":456,"line":500},[454,731,503],{"class":460},[454,733,493],{"class":464},[454,735,508],{"class":496},[454,737,738,740,742,744],{"class":456,"line":511},[454,739,487],{"class":464},[454,741,490],{"class":460},[454,743,493],{"class":464},[454,745,746],{"class":496},"'https:\u002F\u002Fapp.example.com'\n",[454,748,749,751,753],{"class":456,"line":522},[454,750,503],{"class":460},[454,752,493],{"class":464},[454,754,508],{"class":496},[454,756,757,759,761,763],{"class":456,"line":528},[454,758,487],{"class":464},[454,760,490],{"class":460},[454,762,493],{"class":464},[454,764,765],{"class":496},"'https:\u002F\u002Fstaging.example.com\u002Fhealth'\n",[454,767,768,770,772],{"class":456,"line":536},[454,769,503],{"class":460},[454,771,493],{"class":464},[454,773,508],{"class":496},[454,775,776,778,780],{"class":456,"line":544},[454,777,514],{"class":460},[454,779,493],{"class":464},[454,781,519],{"class":496},[432,783,785],{"id":784},"validate-the-response-body","Validate the response body",[416,787,788,789,792],{},"Use ",[440,790,791],{},"validations"," to catch cases where the server returns 200 but the response content signals a problem:",[445,794,796],{"className":447,"code":795,"language":449,"meta":450,"style":450},"receivers:\n  httpcheck:\n    targets:\n      - endpoint: 'https:\u002F\u002Fapi.example.com\u002Fhealth'\n        method: GET\n        validations:\n          - contains: '\"status\":\"ok\"'\n          - not_contains: '\"degraded\"'\n      - endpoint: 'https:\u002F\u002Fapi.example.com\u002Fv2\u002Fstatus'\n        method: GET\n        validations:\n          - json_path: 'health'\n            equals: 'true'\n    collection_interval: 60s\n    metrics:\n      httpcheck.validation.failed:\n        enabled: true\n",[440,797,798,804,810,816,826,834,841,854,866,877,885,891,903,913,921,927,934],{"__ignoreMap":450},[454,799,800,802],{"class":456,"line":457},[454,801,461],{"class":460},[454,803,465],{"class":464},[454,805,806,808],{"class":456,"line":468},[454,807,471],{"class":460},[454,809,465],{"class":464},[454,811,812,814],{"class":456,"line":476},[454,813,479],{"class":460},[454,815,465],{"class":464},[454,817,818,820,822,824],{"class":456,"line":484},[454,819,487],{"class":464},[454,821,490],{"class":460},[454,823,493],{"class":464},[454,825,497],{"class":496},[454,827,828,830,832],{"class":456,"line":500},[454,829,503],{"class":460},[454,831,493],{"class":464},[454,833,508],{"class":496},[454,835,836,839],{"class":456,"line":511},[454,837,838],{"class":460},"        validations",[454,840,465],{"class":464},[454,842,843,846,849,851],{"class":456,"line":522},[454,844,845],{"class":464},"          - ",[454,847,848],{"class":460},"contains",[454,850,493],{"class":464},[454,852,853],{"class":496},"'\"status\":\"ok\"'\n",[454,855,856,858,861,863],{"class":456,"line":528},[454,857,845],{"class":464},[454,859,860],{"class":460},"not_contains",[454,862,493],{"class":464},[454,864,865],{"class":496},"'\"degraded\"'\n",[454,867,868,870,872,874],{"class":456,"line":536},[454,869,487],{"class":464},[454,871,490],{"class":460},[454,873,493],{"class":464},[454,875,876],{"class":496},"'https:\u002F\u002Fapi.example.com\u002Fv2\u002Fstatus'\n",[454,878,879,881,883],{"class":456,"line":544},[454,880,503],{"class":460},[454,882,493],{"class":464},[454,884,508],{"class":496},[454,886,887,889],{"class":456,"line":549},[454,888,838],{"class":460},[454,890,465],{"class":464},[454,892,893,895,898,900],{"class":456,"line":557},[454,894,845],{"class":464},[454,896,897],{"class":460},"json_path",[454,899,493],{"class":464},[454,901,902],{"class":496},"'health'\n",[454,904,905,908,910],{"class":456,"line":565},[454,906,907],{"class":460},"            equals",[454,909,493],{"class":464},[454,911,912],{"class":496},"'true'\n",[454,914,915,917,919],{"class":456,"line":576},[454,916,514],{"class":460},[454,918,493],{"class":464},[454,920,519],{"class":496},[454,922,923,925],{"class":456,"line":596},[454,924,620],{"class":460},[454,926,465],{"class":464},[454,928,929,932],{"class":456,"line":601},[454,930,931],{"class":460},"      httpcheck.validation.failed",[454,933,465],{"class":464},[454,935,936,939,941],{"class":456,"line":609},[454,937,938],{"class":460},"        enabled",[454,940,493],{"class":464},[454,942,944],{"class":943},"sYu0t","true\n",[416,946,947,948,951,952,955,956,959,960,963,964,967,968,970,971,975],{},"When a validation fails, ",[440,949,950],{},"httpcheck_validation_failed"," is incremented. ",[440,953,954],{},"httpcheck_status"," still reflects only the HTTP status class, so a ",[440,957,958],{},"200"," response with invalid content can keep the ",[440,961,962],{},"2xx"," status series at ",[440,965,966],{},"1",". Alert on ",[440,969,950],{}," when response content matters. See the ",[427,972,974],{"href":973},"\u002Fguides\u002Fopentelemetry-httpcheck#enabling-optional-metrics","reference guide"," for other optional validation metrics.",[432,977,979],{"id":978},"track-tls-certificate-expiry","Track TLS certificate expiry",[416,981,982,983,986],{},"Enable the ",[440,984,985],{},"httpcheck_tls_cert_remaining"," metric to monitor how many seconds are left before a certificate expires:",[445,988,990],{"className":447,"code":989,"language":449,"meta":450,"style":450},"receivers:\n  httpcheck:\n    targets:\n      - endpoint: 'https:\u002F\u002Fapi.example.com'\n        method: GET\n    collection_interval: 3600s   # once per hour is enough for cert checks\n    metrics:\n      httpcheck.tls.cert_remaining:\n        enabled: true\n",[440,991,992,998,1004,1010,1021,1029,1042,1048,1055],{"__ignoreMap":450},[454,993,994,996],{"class":456,"line":457},[454,995,461],{"class":460},[454,997,465],{"class":464},[454,999,1000,1002],{"class":456,"line":468},[454,1001,471],{"class":460},[454,1003,465],{"class":464},[454,1005,1006,1008],{"class":456,"line":476},[454,1007,479],{"class":460},[454,1009,465],{"class":464},[454,1011,1012,1014,1016,1018],{"class":456,"line":484},[454,1013,487],{"class":464},[454,1015,490],{"class":460},[454,1017,493],{"class":464},[454,1019,1020],{"class":496},"'https:\u002F\u002Fapi.example.com'\n",[454,1022,1023,1025,1027],{"class":456,"line":500},[454,1024,503],{"class":460},[454,1026,493],{"class":464},[454,1028,508],{"class":496},[454,1030,1031,1033,1035,1038],{"class":456,"line":511},[454,1032,514],{"class":460},[454,1034,493],{"class":464},[454,1036,1037],{"class":496},"3600s",[454,1039,1041],{"class":1040},"sAwPA","   # once per hour is enough for cert checks\n",[454,1043,1044,1046],{"class":456,"line":522},[454,1045,620],{"class":460},[454,1047,465],{"class":464},[454,1049,1050,1053],{"class":456,"line":528},[454,1051,1052],{"class":460},"      httpcheck.tls.cert_remaining",[454,1054,465],{"class":464},[454,1056,1057,1059,1061],{"class":456,"line":536},[454,1058,938],{"class":460},[454,1060,493],{"class":464},[454,1062,944],{"class":943},[416,1064,1065,1066,1069,1070,1073,1074,1077],{},"The metric includes ",[440,1067,1068],{},"http_tls_issuer",", ",[440,1071,1072],{},"http_tls_cn",", and ",[440,1075,1076],{},"http_tls_san"," attributes so you can identify which certificate is expiring. A negative value means the certificate has already expired.",[432,1079,1081],{"id":1080},"verify-in-uptrace","Verify in Uptrace",[416,1083,1084,1085,681,1087,1089],{},"Open the ",[422,1086,87],{},[440,1088,442],{},". You should see:",[1091,1092,1093,1107,1113,1119],"ul",{},[1094,1095,1096,1098,1099,1102,1103,1106],"li",{},[440,1097,954],{}," — one series per ",[440,1100,1101],{},"http_status_class","; filter to ",[440,1104,1105],{},"http_status_class=\"2xx\""," when checking whether a URL is up",[1094,1108,1109,1112],{},[440,1110,1111],{},"httpcheck_duration"," — round-trip time in milliseconds per endpoint",[1094,1114,1115,1118],{},[440,1116,1117],{},"httpcheck_error"," — populated only when a check throws a network-level error",[1094,1120,1121,1123],{},[440,1122,950],{}," — incremented when enabled response validations fail",[416,1125,1126,1127,1130,1131,1133],{},"If no metrics appear after two collection intervals, confirm the Collector host can reach your endpoints (",[440,1128,1129],{},"curl https:\u002F\u002Fapi.example.com\u002Fhealth"," from the Collector machine) and check the Collector logs for errors from the ",[440,1132,442],{}," receiver.",[432,1135,1137],{"id":1136},"build-a-dashboard","Build a dashboard",[416,1139,1140,1141,1145,1146,1148],{},"Once metrics are flowing, open ",[427,1142,1144],{"href":1143},"\u002Ffeatures\u002Fdashboards","Dashboards"," and create panels from the ",[440,1147,677],{}," namespace:",[1091,1150,1151,1166,1174,1189,1202],{},[1094,1152,1153,1156,1157,1159,1160,1162,1163,1165],{},[422,1154,1155],{},"Uptime"," — ",[440,1158,954],{}," filtered to ",[440,1161,1105],{}," and grouped by ",[440,1164,693],{},", as a status timeline or percentage over the selected range",[1094,1167,1168,1156,1171,1173],{},[422,1169,1170],{},"Response time",[440,1172,1111],{}," per URL as a line chart; add a threshold line for your SLO",[1094,1175,1176,1156,1179,1181,1182,1184,1185,1188],{},[422,1177,1178],{},"Errors",[440,1180,1117],{}," grouped by ",[440,1183,693],{}," and ",[440,1186,1187],{},"error_message"," to see failure reasons at a glance",[1094,1190,1191,1156,1194,1181,1196,1184,1198,1201],{},[422,1192,1193],{},"Validation failures",[440,1195,950],{},[440,1197,693],{},[440,1199,1200],{},"validation_type"," to catch invalid response content",[1094,1203,1204,1156,1207,1210],{},[422,1205,1206],{},"Certificate expiry",[440,1208,1209],{},"httpcheck_tls_cert_remaining \u002F 86400"," (converts to days) per domain as a bar chart",[432,1212,1214],{"id":1213},"set-up-alerts","Set up alerts",[416,1216,1217],{},"Each monitor supports only one metric. Create a separate monitor for each alert scenario below.",[1219,1220,1222],"h3",{"id":1221},"endpoint-down","Endpoint down",[1224,1225,1226,1236,1245,1268,1282,1293],"ol",{},[1094,1227,1228,1229,1232,1233,430],{},"Go to ",[422,1230,1231],{},"Alerting → Monitors"," and click ",[422,1234,1235],{},"New monitor → Metrics",[1094,1237,1238,1239,1242,1243,430],{},"Click ",[422,1240,1241],{},"+ Add metric"," and select ",[440,1244,954],{},[1094,1246,1247,1248,1251,1252,1255,1256,1259,1260,1263,1264,1267],{},"In the ",[422,1249,1250],{},"FILTERS"," section, add ",[440,1253,1254],{},"http_url::str"," with your endpoint URL (e.g. ",[440,1257,1258],{},"\"https:\u002F\u002Fapi.example.com\u002Fhealth\"",") and ",[440,1261,1262],{},"http_status_class::str"," with ",[440,1265,1266],{},"\"2xx\"",". This scopes the monitor to one endpoint and evaluates only the successful status-class series.",[1094,1269,1270,1271,1274,1275,1278,1279,1281],{},"In ",[422,1272,1273],{},"Trigger conditions",", set ",[422,1276,1277],{},"Min allowed number"," to ",[440,1280,966],{}," — fires when the value drops below 1 (endpoint down).",[1094,1283,1284,1285,1288,1289,1292],{},"Set ",[422,1286,1287],{},"Check the last"," to 2–3× your ",[440,1290,1291],{},"collection_interval"," to avoid alerts on transient failures.",[1094,1294,1295,1296,430],{},"Choose a ",[427,1297,1299],{"href":1298},"\u002Ffeatures\u002Falerting\u002Fnotifications","notification channel",[1219,1301,1303],{"id":1302},"response-validation-failed","Response validation failed",[1224,1305,1306,1312,1318,1324],{},[1094,1307,1228,1308,1232,1310,430],{},[422,1309,1231],{},[422,1311,1235],{},[1094,1313,1238,1314,1242,1316,430],{},[422,1315,1241],{},[440,1317,950],{},[1094,1319,1320,1321,1323],{},"Filter by ",[440,1322,1254],{}," to scope the monitor to one endpoint.",[1094,1325,1270,1326,1274,1328,1278,1331,1334],{},[422,1327,1273],{},[422,1329,1330],{},"Max allowed number",[440,1332,1333],{},"0"," — fires when any validation failure is recorded.",[1219,1336,1338],{"id":1337},"certificate-expiring-soon","Certificate expiring soon",[1224,1340,1341,1347,1353],{},[1094,1342,1228,1343,1232,1345,430],{},[422,1344,1231],{},[422,1346,1235],{},[1094,1348,1238,1349,1242,1351,430],{},[422,1350,1241],{},[440,1352,985],{},[1094,1354,1284,1355,1278,1357,1360],{},[422,1356,1277],{},[440,1358,1359],{},"2592000"," — fires when fewer than 30 days (in seconds) remain before expiry.",[432,1362,1364],{"id":1363},"see-also","See also",[1091,1366,1367,1374,1381],{},[1094,1368,1369,1373],{},[427,1370,1372],{"href":1371},"\u002Fguides\u002Fopentelemetry-httpcheck","HTTPcheck receiver full reference"," — authentication, all validation types, per-phase timing metrics",[1094,1375,1376,1380],{},[427,1377,1379],{"href":1378},"\u002Ffeatures\u002Falerting\u002Fmetric-monitors","Metric monitors"," — full alerting configuration reference",[1094,1382,1383,1386],{},[427,1384,1385],{"href":18},"Kubernetes monitoring"," — add cluster health monitoring alongside endpoint checks",[1388,1389,1390],"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 .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 .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":450,"searchDepth":484,"depth":468,"links":1392},[1393,1394,1395,1396,1397,1398,1399,1404],{"id":434,"depth":468,"text":435},{"id":686,"depth":468,"text":687},{"id":784,"depth":468,"text":785},{"id":978,"depth":468,"text":979},{"id":1080,"depth":468,"text":1081},{"id":1136,"depth":468,"text":1137},{"id":1213,"depth":468,"text":1214,"children":1400},[1401,1402,1403],{"id":1221,"depth":476,"text":1222},{"id":1302,"depth":476,"text":1303},{"id":1337,"depth":476,"text":1338},{"id":1363,"depth":468,"text":1364},"2026-06-26","Add synthetic HTTP endpoint monitoring to Uptrace using the OpenTelemetry httpcheckreceiver — uptime checks, response validation, and TLS certificate expiry tracking.","md",null,{"readingTime":1410},{"text":1411,"minutes":1412,"time":1413,"words":1414},"4 min read",3.33,199800,666,{"title":29},{"title":410,"description":1406},false,"NnU68p1LbxnC3-mxowdf5cC51B0Bg5fppprqJtUUk3M",[1420,1422],{"title":25,"path":26,"stem":27,"description":1421,"children":-1},"Learn how to successfully migrate your monitoring infrastructure from New Relic to Uptrace with this step-by-step guide covering infrastructure setup, application instrumentation, dashboard conversion, and validation.",{"title":39,"path":35,"stem":36,"description":1423,"children":-1},"Deploy self-hosted Uptrace on your own infrastructure — choose Docker, Kubernetes, Ansible, or a manual install, then configure, scale, and troubleshoot.",1784125444915]