{"slug": "hermes-monitoring-and-observability-with-opentelemetry", "title": "Hermes Monitoring and Observability with OpenTelemetry", "summary": "Hermes AI coding agent now supports full monitoring and observability via OpenTelemetry, with traces, metrics, and logs exportable to SigNoz. The integration, enabled through the hermes-otel plugin, provides visibility into agent sessions, LLM calls, and tool invocations for improved reliability and debugging.", "body_md": "What is Hermes Monitoring?\n\nHermes monitoring gives you full visibility into your AI coding agent's behavior. This guide walks you through setting up Hermes monitoring and observability using [OpenTelemetry](https://opentelemetry.io/) and exporting traces, metrics, and logs to SigNoz. With this integration, you can observe and track your Hermes AI agent sessions, LLM calls, tool invocations, and more.\n\nWith full Hermes monitoring in SigNoz, you can correlate traces, logs, and metrics in unified dashboards, set alerts on latency and errors, and improve the reliability of your AI coding workflows. This end to end Hermes observability gives you actionable insight into every agent session, LLM call, and tool invocation.\n\nPrerequisites\n\n- A\n[SigNoz Cloud account](https://signoz.io/teams/)with an active ingestion key or[Self Hosted SigNoz instance](https://signoz.io/docs/install/self-host/) - A Hermes instance. Follow the\n[Hermes quickstart guide](https://hermes-agent.nousresearch.com/docs/getting-started/quickstart)to get set up\n\nInstrument Hermes Monitoring with OpenTelemetry\n\nFor more information on instrumenting Hermes with OpenTelemetry, refer to the [hermes-otel plugin](https://github.com/briancaffey/hermes-otel) documentation.\n\nStep 1: Install Hermes Agent\n\n```\ncurl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash\n```\n\nRestart your shell or source your shell config if `hermes`\n\nis not immediately available.\n\nVerify:\n\n```\nhermes --version\n```\n\nRun the setup wizard if this is a fresh Hermes install:\n\n```\nhermes setup\n```\n\nStep 2: Install the OpenTelemetry plugin\n\n```\nhermes plugins install briancaffey/hermes-otel --enable\n```\n\nThe plugin is installed to:\n\n```\n~/.hermes/plugins/hermes_otel/\n```\n\nInstall the plugin runtime dependencies into the Hermes Agent virtual environment:\n\n```\n~/.hermes/hermes-agent/venv/bin/pip install -e ~/.hermes/plugins/hermes_otel\n```\n\nIf that path does not exist, find the Hermes venv and run its `pip`\n\ninstead:\n\n```\nfind ~/.hermes -path '*/venv/bin/pip' -print\n/path/that/was/printed/bin/pip install -e ~/.hermes/plugins/hermes_otel\n```\n\nVerify the plugin is enabled:\n\n```\nhermes plugins list --plain --no-bundled | grep hermes_otel\n```\n\n`hermes_otel`\n\nis listed as enabled.\n\nStep 3: Add SigNoz environment variables\n\nEdit Hermes' environment file at `~/.hermes/.env`\n\nand add these values:\n\n```\nOTEL_SIGNOZ_ENDPOINT=https://ingest.<region>.signoz.cloud:443/v1/traces\nOTEL_SIGNOZ_INGESTION_KEY=<your-ingestion-key>\nOTEL_PROJECT_NAME=hermes-agent\n```\n\n`<region>`\n\n: Your[SigNoz Cloud region](https://signoz.io/docs/ingestion/signoz-cloud/overview/#endpoint)`<your-ingestion-key>`\n\n: Your SigNoz[ingestion key](https://signoz.io/docs/ingestion/signoz-cloud/keys/)`OTEL_PROJECT_NAME`\n\nis the resource name you will see in SigNoz.\n\nStep 4: Configure traces, metrics, and logs\n\nCreate or edit the plugin config:\n\n```\nmkdir -p ~/.hermes/plugins/hermes_otel\n${EDITOR:-nano} ~/.hermes/plugins/hermes_otel/config.yaml\n```\n\nUse this minimal config:\n\n```\n# Enable the plugin.\nenabled: true\n\n# Capture input/output previews on spans. Set false if you do not want prompt,\n# tool, or response previews sent to SigNoz.\ncapture_previews: true\n\n# Enable Python logging export through OpenTelemetry.\ncapture_logs: true\nlog_level: INFO\nlog_attach_logger: null\n\n# Optional: metrics export interval. Lower values show metrics faster but send\n# more requests.\nflush_interval_ms: 60000\n\n# Explicit SigNoz backend. This is the recommended reproducible config for\n# traces + metrics + logs.\nbackends:\n  - type: signoz\n    endpoint: https://ingest.us.signoz.cloud:443/v1/traces\n    ingestion_key_env: OTEL_SIGNOZ_INGESTION_KEY\n    traces: true\n    metrics: true\n    logs: true\n```\n\nIf your endpoint is not SigNoz Cloud US, replace the `endpoint:`\n\nvalue with your SigNoz OTLP HTTP traces endpoint.\n\nUsing an explicit `backends:`\n\nentry makes the setup reproducible, enables all three signals (traces, metrics, and logs), and keeps secrets in `.env`\n\nvia `ingestion_key_env`\n\nrather than hardcoding them in YAML.\n\nStep 5: Restart Hermes\n\nConfig is read at process startup. For the gateway service:\n\n```\nhermes gateway restart\n```\n\nFor CLI/TUI use, quit Hermes and start it again:\n\n```\nhermes\n```\n\nStep 6: Generate telemetry\n\nRun a simple Hermes interaction:\n\n```\nhermes chat -q \"Say hello and list the current working directory using a tool.\"\n```\n\nThis produces an agent root span, LLM/API spans, tool spans if tools are used, Hermes metrics, and Python log records.\n\nStep 7: Verify locally\n\nCheck plugin startup logs:\n\n```\ngrep -Ei 'hermes-otel|signoz|Logs' ~/.hermes/logs/*.log | tail -80\n```\n\nHealthy output should include lines like:\n\n```\n[hermes-otel] ✓ SigNoz at https://ingest.us.signoz.cloud:443/v1/traces\n[hermes-otel] ✓ Logs → 1 backend(s) (attached to root, level=INFO)\n[hermes-otel] Registered 8 hooks\n```\n\nYou can also verify config resolution without exposing secrets:\n\n```\nPYTHONPATH=$HOME/.hermes/plugins python - <<'PY'\nfrom hermes_otel.plugin_config import load_config\nfrom hermes_otel.backends import resolve\n\ncfg = load_config()\nprint('capture_logs:', cfg.capture_logs)\nprint('backends_configured:', len(cfg.backends or ()))\nfor bc in cfg.backends or ():\n    b = resolve(bc)\n    print(f'backend={b.display_name} type={b.type} traces={b.supports_traces} metrics={b.supports_metrics} logs={b.supports_logs}')\n    print('endpoint:', b.endpoint)\nPY\n```\n\nExpected output:\n\n```\ncapture_logs: True\nbackends_configured: 1\nbackend=SigNoz type=signoz traces=True metrics=True logs=True\nendpoint: https://ingest.us.signoz.cloud:443/v1/traces\n```\n\nView Hermes Traces, Logs, and Metrics in SigNoz\n\nOnce configured, your Hermes application automatically emits traces, metrics, and logs. In SigNoz, look for a service named `hermes-agent`\n\n.\n\nHermes traces are available in SigNoz under the Traces tab:\n\nWhen you click on a trace in SigNoz, you'll see a detailed view of the trace, including all associated spans, along with their events and attributes.\n\nHermes logs are available in SigNoz under the Logs tab. You can also view logs by clicking on the “Logs\" section in the trace view to see correlated logs:\n\nWhen you click on any of these logs in SigNoz, you'll see a detailed view of the log, including attributes:\n\nHermes related metrics are available in SigNoz under the Metrics tab:\n\nWhen you click on any of these metrics in SigNoz, you'll see a detailed view of the metric, including attributes:\n\nHermes Monitoring Dashboard\n\nYou can also check out our custom [Hermes Agent dashboard](https://signoz.io/docs/dashboards/dashboard-templates/hermes-dashboard/) which provides specialized visualizations for monitoring your Hermes usage. The dashboard includes pre-built charts specifically tailored for LLM usage, along with import instructions to get started quickly.\n\nTroubleshooting Hermes Monitoring\n\n[Troubleshooting Hermes Monitoring](#troubleshooting-hermes-monitoring)\n\n`hermes_otel`\n\nis not listed\n\nInstall and enable the plugin again:\n\n```\nhermes plugins install briancaffey/hermes-otel --enable\n```\n\nLogs do not appear, but traces do\n\nMake sure all of these are present in `~/.hermes/plugins/hermes_otel/config.yaml`\n\n:\n\n```\ncapture_logs: true\nbackends:\n  - type: signoz\n    logs: true\n```\n\nThen restart Hermes. Healthy startup should include:\n\n```\n[hermes-otel] ✓ Logs → 1 backend(s)\n```\n\nIf you see the following warning, the logs pipeline is not configured correctly:\n\n```\ncapture_logs=true but no configured backend accepts OTLP logs\n```\n\nUse the explicit `backends:`\n\nconfig shown in Step 4.\n\nNo data in SigNoz\n\nCheck the plugin list and logs for errors:\n\n```\nhermes plugins list --plain --no-bundled\ngrep -Ei 'hermes-otel|opentelemetry|signoz|error|warning' ~/.hermes/logs/*.log | tail -120\n```\n\nCommon causes:\n\n- Wrong SigNoz endpoint - verify it ends with\n`/v1/traces`\n\nand matches your[SigNoz region](https://signoz.io/docs/ingestion/signoz-cloud/overview/#endpoint) - Wrong or missing\n`OTEL_SIGNOZ_INGESTION_KEY`\n\nin`~/.hermes/.env`\n\n- Hermes was not restarted after changing\n`.env`\n\nor`config.yaml`\n\n- Plugin dependencies were not installed into the Hermes virtual environment (see Step 2)\n\nSetup OpenTelemetry Collector (Optional)\n\n[Setup OpenTelemetry Collector (Optional)](#setup-opentelemetry-collector-optional)\n\nWhat is the OpenTelemetry Collector?\n\nThink of the OTel Collector as a middleman between your app and SigNoz. Instead of your application sending data directly to SigNoz, it sends everything to the Collector first, which then forwards it along.\n\nWhy use it?\n\n**Cleaning up data**- Filter out noisy traces you don't care about, or remove sensitive info before it leaves your servers.** Keeping your app lightweight**- Let the Collector handle batching, retries, and compression instead of your application code.** Adding context automatically**- The Collector can tag your data with useful info like which Kubernetes pod or cloud region it came from.** Future flexibility**- Want to send data to multiple backends later? The Collector makes that easy without changing your app.\n\nSee [Switch from direct export to Collector](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/switch-to-collector/) for step-by-step instructions to convert your setup.\n\nFor more details, see [Why use the OpenTelemetry Collector?](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/why-to-use-collector/) and the [Collector configuration guide](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/).\n\nAdditional resources:\n\n- Set up\n[alerts](https://signoz.io/docs/alerts/)for high latency or error rates - Learn more about\n[querying traces](https://signoz.io/docs/userguide/traces/) - Explore\n[log correlation](https://signoz.io/docs/userguide/logs_query_builder/)", "url": "https://wpnews.pro/news/hermes-monitoring-and-observability-with-opentelemetry", "canonical_source": "https://signoz.io/docs/hermes-monitoring", "published_at": "2026-06-11 00:00:00+00:00", "updated_at": "2026-06-16 06:19:37.857465+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools"], "entities": ["Hermes", "OpenTelemetry", "SigNoz", "Nous Research", "hermes-otel"], "alternates": {"html": "https://wpnews.pro/news/hermes-monitoring-and-observability-with-opentelemetry", "markdown": "https://wpnews.pro/news/hermes-monitoring-and-observability-with-opentelemetry.md", "text": "https://wpnews.pro/news/hermes-monitoring-and-observability-with-opentelemetry.txt", "jsonld": "https://wpnews.pro/news/hermes-monitoring-and-observability-with-opentelemetry.jsonld"}}