> ## Documentation Index
> Fetch the complete documentation index at: https://docs.use.observer/llms.txt
> Use this file to discover all available pages before exploring further.

# Use multiple metric sources

> Mix Prometheus, HTTP, TCP, DNS, and TLS certificate probes in one Observer organisation.

Observer's agent supports several probe runtimes within one
deployment. Pick the source that produces the most reliable signal
for what you want to assert about the system.

## Source types

| Source type | Returns | Typical use |
| - | - | - |
| `prometheus` | scalar from a PromQL query | latency / error rate / saturation against existing series |
| `http` | response time in ms | reachability + body match against an endpoint (supports mTLS) |
| `tcp` | connect time in ms | reachability for non-HTTP services (Redis, Postgres) |
| `dns` | resolve time in ms | DNS resolution path with optional record-value match |
| `tls_cert` | days until certificate expiry | leaf-cert validity for a hostname |
| `icmp` | latency ms / packet loss % / reachability | ping a host where TCP is not a good proxy |
| `grpc` | health state (1/0) / check latency ms | standard gRPC health checking protocol |
| `websocket` | handshake ms / round-trip ms / connection (0/1) | WebSocket endpoint reachability |
| `database` | numeric scalar from a read-only query | row counts and gauges from Postgres, MySQL, Redis, or MongoDB |
| `otlp` | aggregated OTLP data point value | push-mode metrics over OTLP/HTTP |
| `cloudwatch` | latest CloudWatch value | AWS metrics pulled via GetMetricData |
| `loki` | numeric scalar from a LogQL aggregation | log-derived rates and counts |
| `elasticsearch` | numeric scalar from an aggregation | document counts and aggregations (Elasticsearch / OpenSearch) |
| `custom` | numeric scalar from a registered probe | bespoke checks running inside the agent |
| `host` | CPU % / memory % / filesystem used % / network bytes per second / load per core | metrics for the host the agent runs on, with no external source |

Every source type listed above is shipped and runs in the agent. A
metric whose status is set through the public API rather than a probe
uses a `manual` source. A `heartbeat` source watches a scheduled job
that pings Observer; it is evaluated in the cloud and needs no agent
(see [Heartbeat monitoring](https://docs.use.observer/docs/guides/heartbeat-monitoring.md)). An
`alert` source takes its status from inbound alerts and also needs no
agent (see [Inbound alerts](https://docs.use.observer/docs/guides/inbound-alerts.md)). HTTP, TCP,
DNS, TLS certificate and ICMP checks can also run as **Hosted checks**
from Observer's probe locations instead of your agent (see
[Hosted checks](https://docs.use.observer/docs/guides/outside-in-checks.md)). (The `mtls_http` source type is deprecated:
use the `http` source with its mTLS fields instead.)

## Configure a non-Prometheus metric

Open **Metrics**, then **New metric**, and pick the source type.
Each source has its own configuration form:

* **HTTP**: URL, expected status code(s), optional body match,
  optional headers, timeout, follow-redirects, verify-TLS toggle.
* **TCP**: host, port, timeout.
* **DNS**: domain, record type (`A`, `AAAA`, `CNAME`, `MX`, `TXT`,
  `NS`, `SRV`, `CAA`, `PTR`), optional expected value, optional
  resolver.
* **TLS cert**: host, port (default `443`), warn-days,
  critical-days.

The thresholds remain consistent: each metric has `healthy_*` and
`unhealthy_*` operators applied to whatever value the source
returns.

> [!NOTE]
>
> **Threshold examples by source**
>
> * HTTP `response_time_ms`: healthy `under 500`, unhealthy `over 2000`.
> * TLS cert `days_until_expiry`: healthy `over 30`, unhealthy `under 7`.
> * DNS `resolve_time_ms`: healthy `under 100`, unhealthy `over 500`.

## Mixing sources on one page

A status page can carry metrics from any combination of sources.
The page renders each metric using its threshold band, regardless
of the runtime that produced the value. Operators viewing the page
see one consistent green / amber / red signal across heterogeneous
checks.

## Agent reach

The agent must be able to reach each source from its host. For
Prometheus, that is your internal Prometheus URL. For HTTP probes,
the URL must be reachable from wherever the agent runs (for
example, an internal endpoint on a private network). For agent
metrics the cloud never reaches your endpoints directly: the agent
collects, computes status, and pushes the value with its verdict.
Hosted checks are the exception: they probe public endpoints from
Observer's probe locations.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.