Skip to main content

NOFire Edge

Verification

After installation, verify the agent is healthy:
  1. Check Pod Status:
  2. Check Logs:
    Look for “Graph published successfully”.
  3. Check Metrics: Port-forward the agent to access metrics:
    Visit http://localhost:8080/metrics.

Metrics Reference

NOFire Edge exposes 13 metrics under the resource_graph_ prefix on port 8080 at /metrics.
DNSTap connection status is not exposed as a Prometheus metric. The DNSTap collector uses internal atomic counters for diagnostics. To verify DNSTap health, check the Edge logs for connection messages and look for EDGE_TYPE_CAUSAL edges in the graph.

Alerts

Publisher Errors

Graph publish operations are failing. Check outbound connectivity and API key validity.

Graph Not Updating

The graph hasn’t changed in 10 minutes. May indicate Kubernetes informer issues or the Edge process being stuck.

High Update Error Rate

Graph update operations are failing. Check logs for the specific error type.

High Graph Processing Latency

The 99th percentile of graph processing time exceeds 1 second. May indicate a very large graph or resource contention.

Troubleshooting

1. DNSTap Not Connected

Symptoms: No EDGE_TYPE_CAUSAL edges in the graph, logs show no DNSTap connection messages. Fix:
  • Verify CoreDNS config has the correct Edge IP.
  • Check if a NetworkPolicy is blocking traffic from kube-system to nofire-system on port 6000.
  • Ensure CoreDNS was restarted after config change.

2. Publisher Errors

Symptoms: Logs show “Failed to publish graph”. Fix:
  • Check outbound internet access.
  • Verify API Key is correct.
  • Check if the NOFire AI endpoint is reachable (curl -v https://my.nofire.ai/api/edge). Without a valid API key it returns 401 — that still proves the endpoint is reachable.

3. High Memory Usage

Symptoms: Pod OOMKilled. Fix:
  • Increase memory limit in Helm values.
  • Reduce graph.maxPruneAge to keep the graph smaller.

Edge Proxy

These sections apply when you have on-prem connections deployed alongside Edge.

Verification

Check Pod Status

The pod should be in Running state with 1/1 ready.

Check Handshake Logs

A successful connection shows:

Check Health Endpoint

Check Metrics

Metrics Reference

The Edge Proxy exposes 12 metrics under the nofire_proxy_ namespace on port 8081 at /metrics.

Alerts

Stream Disconnected

The Edge Proxy is not connected to NOFire. Check network connectivity and logs.

High Reconnect Rate

More than one reconnect every 10 minutes. Indicates an unstable network or NOFire-side issues.

Backend Errors

Requests to data sources are failing. Check backend health and credentials.

Semaphore Saturation

All concurrent request slots are in use. Consider increasing edgeProxy.stream.maxConcurrent.

Troubleshooting

”authentication failed” in logs

Cause: The NOFIRE_API_KEY is incorrect or the nofire-credentials secret is missing. Fix:

“cluster not found” in logs

Cause: The clusterName in your Helm values does not match any cluster registered in the NOFire dashboard. Fix: Verify config.kube.clusterName in your values file matches the cluster name shown in the NOFire dashboard.

”dial failed” or repeated reconnections

Cause: The pod cannot reach NOFire at the configured serverAddress, which must be edge.nofire.ai:443. Fix: The Edge Proxy image is distroless and has no shell, so run the probes from a throwaway pod in the same namespace:
Any image carrying nslookup and curl works — substitute one from your own registry if Docker Hub is not reachable or your PodSecurity policy blocks the pod. A healthy endpoint resolves and returns 200 application/grpc http/2. Anything else — a text/html content type, or http/1.1 — means the address is not terminating gRPC. Check that outbound TCP 443 is allowed through your firewall and network policies.

”PermissionDenied … 403 … content-type text/html”

Symptom: The proxy reconnects in a loop and logs:
Cause: serverAddress points at an HTTPS endpoint that is not the gRPC endpoint — most often the dashboard, my.nofire.ai:443. The CDN in front of it rejects content-type: application/grpc with a 403 HTML page. PermissionDenied here is gRPC’s mapping of HTTP 403, not an authentication failure: your API key is not the problem, and no NOFire backend code ran. Fix: Set edgeProxy.stream.serverAddress to edge.nofire.ai:443 and upgrade the release.

”no connector found” for a query

Cause: NOFire sent a query for a connection type that is not configured or is disabled. Fix: Check onPremConnections in your values file. Ensure the connector has enabled: true (the default) and the type field matches.

”health check request failed” in logs

Cause: The Edge Proxy cannot reach the backend data source, or the credentials are wrong. Fix:

“proxy overloaded” responses (HTTP 503)

Cause: More concurrent requests than maxConcurrent (default: 10). Fix: Increase the concurrency limit in your values:

Pod CrashLoopBackOff

Cause: Invalid configuration (missing required fields, bad JSON, invalid log level). Fix:
Common validation errors: missing stream.serverAddress, invalid logLevel, connection with enabled: true but no url.

Shared Operations

ServiceMonitor

When monitoring.serviceMonitor.enabled is true in your Helm values, the chart creates ServiceMonitors for both NOFire Edge and the Edge Proxy. This allows Prometheus Operator to automatically scrape the /metrics endpoint of each component.
  • Edge: scraped on port http (8080) at /metrics
  • Edge Proxy: scraped on port http (8081) at /metrics (only created when onPremConnections is configured)

Upgrade and Rollback

Both components are managed by the same Helm chart. NOFire Edge is deployed as a Deployment and the Edge Proxy as a Deployment (only created when onPremConnections is configured). To upgrade:
To rollback:
The Edge Proxy uses a ConfigMap checksum annotation on its Deployment. Any change to edgeProxy.* or onPremConnections.* in your Helm values triggers a pod restart on the next helm upgrade. The Edge DaemonSet rolls out automatically when the Helm release is upgraded.
The Edge Proxy does not support hot-reload of configuration. A pod restart is required for any configuration change to take effect.