{"slug": "jboss-wildfly-opentelemetry-setup-guide", "title": "JBoss & WildFly OpenTelemetry Setup Guide", "summary": "SigNoz released a guide for instrumenting JBoss EAP and WildFly application servers with OpenTelemetry to send traces to its observability platform. The guide covers manual configuration via JVM options and Docker/Kubernetes deployment, enabling users to monitor application performance with distributed tracing.", "body_md": "This guide walks you through instrumenting your JBoss EAP or WildFly application server with OpenTelemetry and sending traces to SigNoz. JBoss and WildFly use `standalone.conf`\n\n(Linux/Mac) or `standalone.conf.bat`\n\n(Windows) to configure JVM options, making it straightforward to attach the OpenTelemetry Java agent.\n\nPrerequisites\n\n[Java 8+](https://github.com/open-telemetry/opentelemetry-java-instrumentation)[Supported WildFly version](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md#application-servers)or compatible JBoss EAP- A SigNoz Cloud account or self-hosted SigNoz instance\n\nSend traces to SigNoz\n\nStep 1. Download the OpenTelemetry Java agent\n\n```\nwget -P /opt/jboss/lib/ https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar\n```\n\nStep 2. Edit standalone.conf\n\nOpen your JBoss/WildFly configuration file:\n\n- JBoss EAP:\n`/opt/jboss-eap-7.x/bin/standalone.conf`\n\n- WildFly:\n`/opt/wildfly/bin/standalone.conf`\n\nAdd the following lines:\n\n```\nJAVA_OPTS=\"$JAVA_OPTS -javaagent:/opt/jboss/lib/opentelemetry-javaagent.jar\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.service.name=<service-name>\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.resource.attributes=service.version=<service-version>\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.exporter.otlp.endpoint=https://ingest.<region>.signoz.cloud:443\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.exporter.otlp.headers=signoz-ingestion-key=<your-ingestion-key>\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.metrics.exporter=none\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.logs.exporter=none\"\n```\n\nVerify these values:\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/).`<service-name>`\n\n: A descriptive name for your service (e.g.,`jboss-app`\n\n).`<service-version>`\n\n(optional): Your release version, image tag, or git SHA (e.g.,`1.4.2`\n\n,`a01dbef8`\n\n).\n\nSet `service.version`\n\nto a per-build value, not a static string. SigNoz detects a deployment each time this value changes. Common sources:\n\n**Bash / shell**:`service.version=$(git rev-parse --short HEAD)`\n\n**GitHub Actions**:`service.version=${{ github.sha }}`\n\n**GitLab CI**:`service.version=$CI_COMMIT_SHORT_SHA`\n\n**Kubernetes**: inject from your Helm chart image tag or CI variable\n\nStep 3. Restart JBoss/WildFly\n\n```\n# For JBoss EAP\n/opt/jboss-eap-7.x/bin/standalone.sh\n\n# For WildFly\n/opt/wildfly/bin/standalone.sh\n```\n\nStep 1. Create a Dockerfile with the agent\n\n```\nFROM jboss/wildfly:latest\nWORKDIR /opt/jboss\n\n# Download the OpenTelemetry Java agent\nRUN curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -o /opt/jboss/opentelemetry-javaagent.jar\n\n# Copy your application\nCOPY target/<my-app>.war /opt/jboss/wildfly/standalone/deployments/\n\n# Set JAVA_OPTS for OpenTelemetry\nENV JAVA_OPTS=\"-javaagent:/opt/jboss/opentelemetry-javaagent.jar\"\n\nEXPOSE 8080\n\nCMD [\"/opt/jboss/wildfly/bin/standalone.sh\", \"-b\", \"0.0.0.0\"]\n```\n\nReplace `<my-app>.war`\n\nwith your application WAR file.\n\nStep 2. Deploy to Kubernetes\n\nAdd these environment variables to your deployment manifest:\n\n```\nenv:\n- name: OTEL_RESOURCE_ATTRIBUTES\n  value: 'service.name=<service-name>,service.version=<service-version>'\n- name: OTEL_EXPORTER_OTLP_ENDPOINT\n  value: 'https://ingest.<region>.signoz.cloud:443'\n- name: OTEL_EXPORTER_OTLP_HEADERS\n  value: 'signoz-ingestion-key=<your-ingestion-key>'\n- name: OTEL_METRICS_EXPORTER\n  value: 'none'\n- name: OTEL_LOGS_EXPORTER\n  value: 'none'\n```\n\nVerify these values:\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/).`<service-name>`\n\n: A descriptive name for your service (e.g.,`jboss-app`\n\n).`<service-version>`\n\n(optional): Your release version, image tag, or git SHA (e.g.,`1.4.2`\n\n,`a01dbef8`\n\n).\n\nSet `service.version`\n\nto a per-build value, not a static string. SigNoz detects a deployment each time this value changes. Common sources:\n\n**Bash / shell**:`service.version=$(git rev-parse --short HEAD)`\n\n**GitHub Actions**:`service.version=${{ github.sha }}`\n\n**GitLab CI**:`service.version=$CI_COMMIT_SHORT_SHA`\n\n**Kubernetes**: inject from your Helm chart image tag or CI variable\n\nThe [OpenTelemetry Operator](https://signoz.io/docs/opentelemetry-collection-agents/k8s/otel-operator/overview/) auto-injects the Java agent into your pods without modifying your container image.\n\nStep 1. Set up the OpenTelemetry Operator\n\nInstall the Operator and Collector following the [K8s OTel Operator installation guide](https://signoz.io/docs/opentelemetry-collection-agents/k8s/otel-operator/install/).\n\nStep 2. Create the Instrumentation resource\n\nCreate `instrumentation.yaml`\n\nto configure Java auto-instrumentation:\n\n```\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: java-instrumentation\nspec:\n  exporter:\n    endpoint: http://otel-collector-collector:4318\n  propagators:\n    - tracecontext\n    - baggage\n  env:\n    - name: OTEL_METRICS_EXPORTER\n      value: \"none\"\n    - name: OTEL_LOGS_EXPORTER\n      value: \"none\"\n  java:\n    image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest\n```\n\nDeploy this resource to your cluster:\n\n```\nkubectl apply -f instrumentation.yaml\n```\n\nStep 3. Add annotations to your deployment\n\nAdd these annotations to your pod template's `metadata.annotations`\n\n:\n\n```\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: jboss-app\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: jboss-app\n  template:\n    metadata:\n      labels:\n        app: jboss-app\n      annotations:\n        instrumentation.opentelemetry.io/inject-java: \"true\"\n        resource.opentelemetry.io/service.name: \"<service-name>\"\n        resource.opentelemetry.io/service.version: \"<service-version>\"\n    spec:\n      containers:\n      - name: jboss\n        image: jboss/wildfly:latest\n        ports:\n        - containerPort: 8080\n```\n\nApply the deployment:\n\n```\nkubectl apply -f deployment.yaml\n```\n\nVerify these values:\n\n`<service-name>`\n\n: A descriptive name for your service (e.g.,`jboss-app`\n\n).`<service-version>`\n\n(optional): Your release version, image tag, or git SHA (e.g.,`1.4.2`\n\n,`a01dbef8`\n\n).\n\nSet `service.version`\n\nto a per-build value, not a static string. SigNoz detects a deployment each time this value changes. Common sources:\n\n**Bash / shell**:`service.version=$(git rev-parse --short HEAD)`\n\n**GitHub Actions**:`service.version=${{ github.sha }}`\n\n**GitLab CI**:`service.version=$CI_COMMIT_SHORT_SHA`\n\n**Kubernetes**: inject from your Helm chart image tag or CI variable\n\nStep 1. Download the OpenTelemetry Java agent\n\n```\nInvoke-WebRequest -Uri \"https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar\" -OutFile \"C:\\jboss\\lib\\opentelemetry-javaagent.jar\"\n```\n\nStep 2. Edit standalone.conf.bat\n\nOpen your JBoss/WildFly configuration file:\n\n- JBoss EAP:\n`C:\\jboss-eap-7.x\\bin\\standalone.conf.bat`\n\n- WildFly:\n`C:\\wildfly\\bin\\standalone.conf.bat`\n\nAdd the following lines:\n\n```\nset \"JAVA_OPTS=%JAVA_OPTS% -javaagent:C:\\jboss\\lib\\opentelemetry-javaagent.jar\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.service.name=<service-name>\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.resource.attributes=service.version=<service-version>\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.endpoint=https://ingest.<region>.signoz.cloud:443\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.headers=signoz-ingestion-key=<your-ingestion-key>\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.metrics.exporter=none\"\nset \"JAVA_OPTS=%JAVA_OPTS% -Dotel.logs.exporter=none\"\n```\n\nVerify these values:\n\n`<service-name>`\n\n: A descriptive name for your service (e.g.,`jboss-app`\n\n).`<service-version>`\n\n(optional): Your release version, image tag, or git SHA (e.g.,`1.4.2`\n\n,`a01dbef8`\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/).\n\nSet `service.version`\n\nto a per-build value, not a static string. SigNoz detects a deployment each time this value changes. Common sources:\n\n**Bash / shell**:`service.version=$(git rev-parse --short HEAD)`\n\n**GitHub Actions**:`service.version=${{ github.sha }}`\n\n**GitLab CI**:`service.version=$CI_COMMIT_SHORT_SHA`\n\n**Kubernetes**: inject from your Helm chart image tag or CI variable\n\nStep 3. Restart JBoss/WildFly\n\n```\n# For JBoss EAP\nC:\\jboss-eap-7.x\\bin\\standalone.bat\n\n# For WildFly\nC:\\wildfly\\bin\\standalone.bat\n```\n\nStep 1. Create a Dockerfile\n\n```\nFROM jboss/wildfly:latest\n\n# Download the OpenTelemetry Java agent\nRUN curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -o /opt/jboss/opentelemetry-javaagent.jar\n\n# Copy your application WAR file\nCOPY target/<my-app>.war /opt/jboss/wildfly/standalone/deployments/\n\n# Set OpenTelemetry environment variables\nENV JAVA_OPTS=\"-javaagent:/opt/jboss/opentelemetry-javaagent.jar\"\nENV OTEL_RESOURCE_ATTRIBUTES=\"service.name=<service-name>,service.version=<service-version>\"\nENV OTEL_EXPORTER_OTLP_ENDPOINT=\"https://ingest.<region>.signoz.cloud:443\"\nENV OTEL_EXPORTER_OTLP_HEADERS=\"signoz-ingestion-key=<your-ingestion-key>\"\nENV OTEL_METRICS_EXPORTER=\"none\"\nENV OTEL_LOGS_EXPORTER=\"none\"\n\nEXPOSE 8080\n\nCMD [\"/opt/jboss/wildfly/bin/standalone.sh\", \"-b\", \"0.0.0.0\"]\n```\n\nVerify these values:\n\n`<my-app>.war`\n\n: Your application WAR file name.`<service-name>`\n\n: A descriptive name for your service (e.g.,`jboss-app`\n\n).`<service-version>`\n\n(optional): Your release version, image tag, or git SHA (e.g.,`1.4.2`\n\n,`a01dbef8`\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/).\n\nSet `service.version`\n\nto a per-build value, not a static string. SigNoz detects a deployment each time this value changes. Common sources:\n\n**Bash / shell**:`service.version=$(git rev-parse --short HEAD)`\n\n**GitHub Actions**:`service.version=${{ github.sha }}`\n\n**GitLab CI**:`service.version=$CI_COMMIT_SHORT_SHA`\n\n**Kubernetes**: inject from your Helm chart image tag or CI variable\n\nStep 2. Build and run\n\n```\ndocker build -t my-jboss-app .\ndocker run -p 8080:8080 my-jboss-app\n```\n\nOr pass environment variables at runtime:\n\n```\ndocker run -p 8080:8080 \\\n  -e OTEL_RESOURCE_ATTRIBUTES=\"service.name=my-jboss-app,service.version=<service-version>\" \\\n  -e OTEL_EXPORTER_OTLP_ENDPOINT=\"https://ingest.us.signoz.cloud:443\" \\\n  -e OTEL_EXPORTER_OTLP_HEADERS=\"signoz-ingestion-key=<key>\" \\\n  -e OTEL_METRICS_EXPORTER=\"none\" \\\n  -e OTEL_LOGS_EXPORTER=\"none\" \\\n  my-jboss-app\n```\n\nValidate\n\nWith JBoss/WildFly running, verify traces are being sent to SigNoz:\n\n- Deploy an application to JBoss/WildFly and make a few requests to its endpoints.\n- In SigNoz, open the\n**Services** tab and click**Refresh**. Your application should appear. - Go to the\n**Traces** tab to see your application's traces.\n\nTroubleshooting\n\n[Troubleshooting](#troubleshooting)\n\nTraces not showing up in SigNoz?\n\n**Verify standalone.conf changes:**\n\nCheck that your `JAVA_OPTS`\n\nmodifications are being loaded:\n\n```\nps aux | grep java | grep javaagent\n```\n\nYou should see the `-javaagent`\n\nflag in the process arguments.\n\n**Enable debug logging:**\n\nAdd the following to `standalone.conf`\n\n:\n\n```\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.javaagent.debug=true\"\n```\n\nThen restart JBoss and check the logs for OpenTelemetry output.\n\n**Test connectivity:**\n\n```\ncurl -v https://ingest.<region>.signoz.cloud:443/v1/traces\n```\n\nAgent not loading?\n\nMake sure the agent JAR path is correct and the file exists:\n\n```\nls -la /opt/jboss/lib/opentelemetry-javaagent.jar\n```\n\nVerify the path in `standalone.conf`\n\nmatches the actual location.\n\nJBoss fails to start?\n\nCheck for syntax errors in `standalone.conf`\n\n. Each `JAVA_OPTS`\n\nline should be on its own line without trailing spaces or special characters.\n\nReview the JBoss server log:\n\n```\ntail -f /opt/jboss-eap-7.x/standalone/log/server.log\n```\n\nDomain mode configuration\n\nIf running JBoss in domain mode, configure `JAVA_OPTS`\n\nin `domain.conf`\n\ninstead of `standalone.conf`\n\n, or set JVM options in the domain controller's host configuration.\n\nConfiguring the agent (Optional)\n\n[Configuring the agent (Optional)](#configuring-the-agent-optional)\n\nWhat can you configure?\n\nThe [OpenTelemetry Java agent](https://signoz.io/docs/instrumentation/java/opentelemetry-java/) auto-instruments most libraries out of the box. Configuration lets you fine-tune what gets captured and how traces are exported.\n\nWhy configure?\n\n**Reduce noise**— Disable instrumentation for internal health checks or chatty libraries** Control costs**— Sample a percentage of traces instead of capturing everything** Add context**— Tag traces with environment, version, or team info for easier filtering\n\nCommon options\n\nAdd these to `standalone.conf`\n\n:\n\n**Disable specific instrumentations:**\n\n```\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.instrumentation.jdbc.enabled=false\"\n```\n\n**Sample traces:**\n\n```\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.traces.sampler=parentbased_traceidratio\"\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.traces.sampler.arg=0.1\"  # Sample 10%\n```\n\n**Add resource attributes:**\n\n```\nJAVA_OPTS=\"$JAVA_OPTS -Dotel.resource.attributes=service.name=my-app,deployment.environment=production\"\n```\n\nSee the [full configuration reference](https://opentelemetry.io/docs/languages/java/automatic/agent-config/) for all available options.\n\nNext steps\n\n[Add manual instrumentation](https://signoz.io/docs/instrumentation/java/manual-instrumentation/)for custom spans and business context[Collect Java application logs](https://signoz.io/docs/logs-management/send-logs/java-logs/)with OpenTelemetry[Set up alerts](https://signoz.io/docs/setup-alerts-notification/)for your JBoss/WildFly application\n\n**Related resources**:", "url": "https://wpnews.pro/news/jboss-wildfly-opentelemetry-setup-guide", "canonical_source": "https://signoz.io/docs/instrumentation/java/opentelemetry-jboss", "published_at": "2026-06-17 00:00:00+00:00", "updated_at": "2026-06-18 06:24:39.031077+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["SigNoz", "JBoss", "WildFly", "OpenTelemetry"], "alternates": {"html": "https://wpnews.pro/news/jboss-wildfly-opentelemetry-setup-guide", "markdown": "https://wpnews.pro/news/jboss-wildfly-opentelemetry-setup-guide.md", "text": "https://wpnews.pro/news/jboss-wildfly-opentelemetry-setup-guide.txt", "jsonld": "https://wpnews.pro/news/jboss-wildfly-opentelemetry-setup-guide.jsonld"}}