Components
Runtime profiling building blocks
Enable optional runtime profiles
Turn on block profiling
Configure the read timeout
Allow profiles to finish
Deployment and configuration
Set up Go profiling
Overview
Deploy GermainUX Go profiling by exposing an access-controlled Gopprof endpoint, importing the GermainUX Go monitoring configuration, and running the Golang wizard.
The GermainUX Engine periodically retrieves the approved profiles and sends them to GermainUX for code-performance analysis.
Components
Prerequisites
Before deployment, confirm:- A GermainUX Engine is installed and running.
- The Engine can reach the Go application’s profiling endpoint.
- The application can import Go’s
net/http/pprofpackage. - A private listening address and port are available.
- Firewall rules can restrict access to authorized Engine hosts.
- TLS or an authenticated proxy is available when required.
Show all 9
Show all 9
- The application team has approved production profiling.
- The profiling schedule and expected overhead have been reviewed.
- The GermainUX Go configuration files are available.
Security requirements
Gopprof endpoints expose sensitive runtime and application information. Some profiles also consume CPU while they are generated.
Do not expose /debug/pprof/ publicly.
Protect it by:
- Binding it to a loopback or private interface.
- Allowing connections only from the GermainUX Engine.
- Using firewall rules.
- Using TLS and an authenticated reverse proxy when required.
- Avoiding public DNS exposure.
- Limiting profile duration and frequency.
- Restricting access to profiling results in GermainUX.
- Reviewing application overhead before expanding deployment.
Add pprof to the Go application
Import the standard net/http/pprof package:
pprof handlers on Go’s default HTTP request multiplexer.
Start a dedicated profiling listener
A dedicated listener allows the profiling endpoint to be secured separately from the application’s public API.Applications using a custom HTTP router
Importingnet/http/pprof registers handlers on http.DefaultServeMux.
If the application uses another router, either:
- Run a separate listener with
http.DefaultServeMux, or - Explicitly register the required
pprofhandlers with the application’s router.
Validate the profiling endpoint
From the GermainUX Engine host or another authorized diagnostic host, verify the profile index:Available profiles
The available profiles depend on the Go version and runtime configuration. Common profiles include:
Some profiles require application runtime settings to collect useful data.
Enable optional runtime profiles
Block and mutex profiles may require explicit runtime configuration:Containerized Go applications
When the Go application runs in Docker:- Expose the profiler only to an internal Docker network.
- Do not publish the profiler port to the public host interface.
- Ensure the GermainUX Engine can reach the container or an approved internal proxy.
- Account for container replacement and dynamic addressing.
- Use service names, labels, or stable internal endpoints where possible.
- Apply container and host firewall restrictions.
Kubernetes applications
For Kubernetes:- Expose
pprofonly through an internal Service or approved proxy. - Apply NetworkPolicy restrictions.
- Do not route the endpoint through public ingress.
- Use TLS and authentication where required.
- Determine whether every pod or only selected pods should be profiled.
- Use stable application, namespace, workload, pod, and version metadata.
- Review the impact of profiling multiple replicas.
Import the GermainUX Go configuration
The Go monitoring seed files are available in the GermainUX service distribution:
Optionally import:
Use the configuration import mechanism provided by the installed GermainUX version and select Merge when required to preserve existing configuration.
Back up the GermainUX configuration before importing seed data.
Run the Golang wizard
- Sign in to Germain Workspace.
- Open the left navigation menu.
- Select Wizards.
- Select Golang.

- Select or create the monitored server.
- Enter the protected
pprofport. - Select the monitored application.

- Enter the read timeout.
- Continue to the advanced configuration.
- Select Skip when no application-specific customization is required.
- Enter a descriptive monitor name.
- Select the monitoring node.
- Select the GermainUX Engine.
- Configure the execution schedule.
- Review the configuration.
- Select Finish.
Configure the read timeout
The read timeout must allow enough time for the selected profile to complete and transfer. Consider:- CPU profile duration.
- Application load.
- Network latency.
- Profile size.
- Proxy timeout.
- TLS and authentication overhead.
Configure the collection schedule
Profiling continuously at high frequency can affect the monitored application. Choose a schedule based on:- Application criticality.
- Number of monitored instances.
- Required detection speed.
- CPU profile duration.
- Expected profile size.
- GermainUX Engine capacity.
- Application overhead.
- Data-retention requirements.
Validate the GermainUX deployment
After completing the wizard:- Go to Germain Workspace → Settings -> Germain → State.
- Locate the Go profiling monitor.

- Confirm that it is enabled.
- Wait for the configured schedule to execute.
- Confirm that the monitor completes successfully.
- Open the Go profiling KPIs.
- Verify that CPU, heap, allocation, or goroutine data appears.
- Confirm the application, server, instance, and environment metadata.
- Compare a selected profile with an approved Go profiling tool.
- Measure application CPU, memory, and response-time overhead.
Troubleshooting
The profiling endpoint is unavailable
Verify:- The Go application imported
net/http/pprof. - The profiling listener started.
- The correct interface and port are configured.
- The Engine can resolve the hostname.
- Firewall and NetworkPolicy rules permit the Engine.
- The endpoint is not restricted to loopback when the Engine is remote.
- TLS and authentication are configured correctly.
- A reverse proxy is forwarding
/debug/pprof/.
The index works but profiles are missing
Verify:- The Go runtime exposes the requested profile.
- Optional block or mutex profiling is enabled when required.
- The installed Go version supports the profile.
- The wizard is configured for a supported profile.
- The application has generated relevant runtime activity.
CPU-profile collection times out
Verify:- The read timeout exceeds the requested CPU-profile duration.
- Proxy and load-balancer timeouts are long enough.
- The application remains responsive.
- The network permits the complete response.
- The selected profile duration is appropriate.
Profiles are associated with the wrong instance
Verify:- Each monitor targets the intended host and port.
- Application and environment names are correct.
- Containers or pods use stable metadata.
- A load balancer is not distributing profile requests among different instances.
- Each replica is monitored directly when instance-level attribution is required.
Profiling affects application performance
Reduce:- CPU profile duration.
- Collection frequency.
- Number of profiled instances.
- Block or mutex sampling detail.
- Concurrent profile collection.
Privacy and security
Runtime profiles can reveal:- Function and package names.
- Source-code structure.
- Stack traces.
- Command-line information.
- Internal service names.
- Memory and execution behavior.
- Restricting the endpoint.
- Encrypting remote access.
- Limiting GermainUX permissions.
- Applying appropriate retention.
- Avoiding public profile URLs.
- Auditing profile access.
- Reviewing the profiling configuration after application changes.
Deployment and configuration
- Review Go Application Monitoring.
- Deploy the GermainUX Engine.
- Add an access-controlled Go
pproflistener. - Restrict the profiler endpoint to authorized GermainUX Engine hosts.
- Import the Go component, KPI, and root-cause-analysis configuration files.
- Run the Golang wizard.
Show all 12
Show all 12
- Configure the read timeout and collection schedule.
- Validate the monitor in Germain State.
- Configure File and Log Monitoring for Go errors and panics.
- Configure API, database, dependency, operating-system, Docker, or Kubernetes monitoring as required.
- Configure KPIs, SLAs, Watches, reports, and approved actions.
- Validate security and profiling overhead before production rollout.
Get Help
Contact GermainUX Support
The Germain Team can help you set this up.
Can't find what you need?
Search all GermainUX docs with Ctrl + K, or use the feedback buttons at the bottom of this page to tell us what is missing.
The content of this document is proprietary to GERMAIN SOFTWARE LLC.

