Plugin: go.d.plugin Module: httpcheck
This collector monitors HTTP servers availability status and response time.
Possible statuses:
| Status | Description | 
|---|---|
| success | HTTP request completed successfully with a status code matching the configured status_accepted range (default: 200), and the response body and headers (if configured) match expectations. | 
| timeout | HTTP request timed out before receiving a response (default: 1 second). | 
| no_connection | Failed to establish a connection to the target. | 
| redirect | Received a redirect response (3xx status code) while not_follow_redirects is configured. | 
| bad_status | HTTP request completed with a status code outside the configured status_accepted range (default: non-200). | 
| bad_content | HTTP request completed successfully but the response body does not match the expected content (when using response_match). | 
| bad_header | HTTP request completed successfully but response headers do not match the expected values (when using header_match). | 
This collector is supported on all platforms.
This collector supports collecting metrics from multiple instances of this integration, including remote instances.
This integration doesn’t support auto-detection.
The default configuration for this integration does not impose any limits on data collection.
The default configuration for this integration is not expected to impose a significant performance impact on the system.
You can configure the httpcheck collector in two ways:
| Method | Best for | How to | 
|---|---|---|
| UI | Fast setup without editing files | Go to Nodes → Configure this node → Collectors → Jobs, search for httpcheck, then click + to add a job. | 
| File | If you prefer configuring via file, or need to automate deployments (e.g., with Ansible) | Edit go.d/httpcheck.conf and add a job. | 
:::important
UI configuration requires paid Netdata Cloud plan.
:::
No action required.
The following options can be defined globally: update_every, autodetection_retry.
| Group | Option | Description | Default | Required | 
|---|---|---|---|---|
| Collection | update_every | Data collection interval (seconds). | 5 | no | 
| autodetection_retry | Autodetection retry interval (seconds). Set 0 to disable. | 0 | no | |
| Target | url | Target endpoint URL. | yes | |
| timeout | HTTP request timeout (seconds). | 1 | no | |
| Validation | status_accepted | HTTP accepted response statuses. Anything else results in ‘bad status’ in the status chart. | [200] | no | 
| response_match | If the status code is accepted, match the response body against this regular expression. | no | ||
| header_match | A set of rules to check for specific key-value pairs in response headers. | [] | no | |
| header_match.exclude | When yes, the rule asserts the key-value pair must be absent. | no | no | |
| header_match.key | Exact HTTP header name to check. | yes | ||
| header_match.value | The pattern to match against the header’s value. | no | ||
| HTTP Auth | username | Username for Basic HTTP authentication. | no | |
| password | Password for Basic HTTP authentication. | no | ||
| bearer_token_file | Path to a file containing a bearer token (used for Authorization: Bearer). | 
no | ||
| TLS | tls_skip_verify | Skip TLS certificate and hostname verification (insecure). | no | no | 
| tls_ca | Path to CA bundle used to validate the server certificate. | no | ||
| tls_cert | Path to client TLS certificate (for mTLS). | no | ||
| tls_key | Path to client TLS private key (for mTLS). | no | ||
| Proxy | proxy_url | HTTP proxy URL. | no | |
| proxy_username | Username for proxy Basic HTTP authentication. | no | ||
| proxy_password | Password for proxy Basic HTTP authentication. | no | ||
| Request | method | HTTP method to use. | GET | no | 
| body | Request body (e.g., for POST/PUT). | no | ||
| headers | Additional HTTP headers (one per line as key: value). | no | ||
| cookie_file | Path to cookie file. See cookie file format. | no | ||
| not_follow_redirects | Do not follow HTTP redirects. | no | no | |
| force_http2 | Force HTTP/2 (including h2c over TCP). | no | no | |
| Virtual Node | vnode | Associates this data collection job with a Virtual Node. | no | 
Configure the httpcheck collector from the Netdata web interface:
The configuration file name for this integration is go.d/httpcheck.conf.
The file format is YAML. Generally, the structure is:
update_every: 1
autodetection_retry: 0
jobs:
  - name: some_name1
  - name: some_name2
You can edit the configuration file using the edit-config script from the
Netdata config directory.
cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
sudo ./edit-config go.d/httpcheck.conf
A basic example configuration.
jobs:
  - name: local
    url: http://127.0.0.1:8080
Configuration with HTTP request headers that will be sent by the client.
jobs:
  - name: local
    url: http://127.0.0.1:8080
    headers:
      Host: localhost:8080
      User-Agent: netdata/go.d.plugin
      Accept: */*
status_acceptedA basic example configuration with non-default status_accepted.
jobs:
  - name: local
    url: http://127.0.0.1:8080
    status_accepted:
      - 200
      - 204
header_matchExample configurations with header_match. See the value pattern syntax.
jobs:
    # The "X-Robots-Tag" header must be present in the HTTP response header,
    # but the value of the header does not matter.
    # This config checks for the presence of the header regardless of its value.
  - name: local
    url: http://127.0.0.1:8080
    header_match:
      - key: X-Robots-Tag
    # The "X-Robots-Tag" header must be present in the HTTP response header
    # only if its value is equal to "noindex, nofollow".
    # This config checks both the presence of the header and its value.
  - name: local
    url: http://127.0.0.1:8080
    header_match:
      - key: X-Robots-Tag
        value: '= noindex,nofollow'
    # The "X-Robots-Tag" header must not be present in the HTTP response header
    # but the value of the header does not matter.
    # This config checks for the presence of the header regardless of its value.
  - name: local
    url: http://127.0.0.1:8080
    header_match:
      - key: X-Robots-Tag
        exclude: yes
    # The "X-Robots-Tag" header must not be present in the HTTP response header
    # only if its value is equal to "noindex, nofollow".
    # This config checks both the presence of the header and its value.
  - name: local
    url: http://127.0.0.1:8080
    header_match:
      - key: X-Robots-Tag
        exclude: yes
        value: '= noindex,nofollow'
Basic HTTP authentication.
jobs:
  - name: local
    url: http://127.0.0.1:8080
    username: username
    password: password
Do not validate server certificate chain and hostname.
jobs:
  - name: local
    url: https://127.0.0.1:8080
    tls_skip_verify: yes
Note: When you define multiple jobs, their names must be unique.
Collecting metrics from local and remote instances.
jobs:
  - name: local
    url: http://127.0.0.1:8080
  - name: remote
    url: http://192.0.2.1:8080
Metrics grouped by scope.
The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
The metrics refer to the monitored target.
Labels:
| Label | Description | 
|---|---|
| url | url value that is set in the configuration file. | 
Metrics:
| Metric | Dimensions | Unit | 
|---|---|---|
| httpcheck.response_time | time | ms | 
| httpcheck.response_length | length | characters | 
| httpcheck.status | success, timeout, redirect, no_connection, bad_content, bad_header, bad_status | boolean | 
| httpcheck.in_state | time | boolean | 
The following alerts are available:
| Alert name | On metric | Description | 
|---|---|---|
| httpcheck_web_service_up | httpcheck.status | HTTP check endpoint ${label:url} liveness status | 
| httpcheck_web_service_bad_content | httpcheck.status | Percentage of HTTP responses from ${label:url} with unexpected content in the last 5 minutes | 
| httpcheck_web_service_bad_status | httpcheck.status | Percentage of HTTP responses from ${label:url} with unexpected status in the last 5 minutes | 
| httpcheck_web_service_bad_header | httpcheck.status | Percentage of HTTP responses from ${label:url} with unexpected header in the last 5 minutes | 
| httpcheck_web_service_timeouts | httpcheck.status | Percentage of timed-out HTTP requests to ${label:url} in the last 5 minutes | 
| httpcheck_web_service_no_connection | httpcheck.status | Percentage of failed HTTP requests to ${label:url} in the last 5 minutes | 
Important: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature.
To troubleshoot issues with the httpcheck collector, run the go.d.plugin with the debug option enabled. The output
should give you clues as to why the collector isn’t working.
Navigate to the plugins.d directory, usually at /usr/libexec/netdata/plugins.d/. If that’s not the case on
your system, open netdata.conf and look for the plugins setting under [directories].
cd /usr/libexec/netdata/plugins.d/
Switch to the netdata user.
sudo -u netdata -s
Run the go.d.plugin to debug the collector:
./go.d.plugin -d -m httpcheck
To debug a specific job:
./go.d.plugin -d -m httpcheck -j jobName
If you’re encountering problems with the httpcheck collector, follow these steps to retrieve logs and identify potential issues:
Use the following command to view logs generated since the last Netdata service restart:
journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep httpcheck
Locate the collector log file, typically at /var/log/netdata/collector.log, and use grep to filter for collector’s name:
grep httpcheck /var/log/netdata/collector.log
Note: This method shows logs from all restarts. Focus on the latest entries for troubleshooting current issues.
If your Netdata runs in a Docker container named “netdata” (replace if different), use this command:
docker logs netdata 2>&1 | grep httpcheck
Want a personalised demo of Netdata for your use case?