LinkMesh

Search docs, blog and changelog

ENDE

Snippets · Sources

Check HTTP endpoints (synthetic availability)

Is the service answering at all, and how fast? The http_check receiver requests each target on an interval and reports httpcheck.status per status class, httpcheck.duration and httpcheck.error.

Signals
Metrics
Category
Collection
Source
HTTP endpoints (probe)
Components
batchmemory_limiterotlphttp
Destination
OTLP/HTTP endpoint

OpenTelemetry Collector

OpenTelemetry Collector YAML
receivers:
  http_check:
    collection_interval: 60s
    targets:
      - endpoint: https://shop.example.ch/healthz
        method: GET
      - endpoint: https://api.example.ch/readyz
        method: GET

processors:
  memory_limiter:
    check_interval: 1s
    limit_percentage: 80
    spike_limit_percentage: 25
  batch:
    timeout: 5s

exporters:
  otlphttp:
    endpoint: https://your-backend:4318

service:
  pipelines:
    metrics:
      receivers: [http_check]
      processors: [memory_limiter, batch]
      exporters: [otlphttp]

LinkMesh

Library › Sources › HTTP Check

Targets
[{"endpoint":"https://shop.example.ch/healthz"},{"endpoint":"https://api.example.ch/readyz"}]
HTTP Method
GET
Check Interval
60s
Timeout
10s

What LinkMesh then pushes to the collector, under receivers:

Pushed to the collector
http_check/input_src_00000501:
  collection_interval: 60s
  targets:
    - endpoint: https://shop.example.ch/healthz
      method: GET
      timeout: 10s
    - endpoint: https://api.example.ch/readyz
      method: GET
      timeout: 10s

The same, as an API call (see automation recipes):

API call
curl -X POST "$LINKMESH/sources" \
  -H "Authorization: Bearer $LMSAT" \
  -H "Content-Type: application/json" \
  -d '{
  "defaultConfig": {
    "collection_interval": "60s",
    "method": "GET",
    "targets": [
      {
        "endpoint": "https://shop.example.ch/healthz"
      },
      {
        "endpoint": "https://api.example.ch/readyz"
      }
    ],
    "timeout": "10s"
  },
  "name": "HTTP Check",
  "receiverType": "http_check"
}'

The rest of the collector config above (memory_limiter, batch, otlphttp) is not part of this template: in LinkMesh those are separate sources, processors and destinations on the route.

Generated from LinkMesh's template catalogue by linkmesh-server snippet-render 1.464.3, not written by hand.

Download config.yamlValidated with otelcol-contrib v0.161.0 on 2026-10-26

Complete config files, each checked with the collector's own validate command (otelcol-contrib v0.161.0). Replace https://your-backend:4318 with your own OTLP endpoint before you run it.

The gotcha

A failed check still reports a status, so alert on httpcheck.error, not on a missing series. In our test an unreachable target produced httpcheck.status 0 for every one of the five status classes plus httpcheck.error 1, whose error.message carried the full error text. The receiver was called httpcheck; otelcol-contrib 0.161.0 logs "\"httpcheck\" alias is deprecated; use \"http_check\"", which is the name this config uses.

Manage this across a fleet

LinkMesh manages collector configuration across a fleet from one self-hosted control plane, so a change like this is made once rather than host by host. The first 25 Collectors are free after a no-card registration in the OpenSight Customer Portal (5 without one).

Doing this in LinkMesh: Sources