mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Add debugging and troubleshooting guide
This commit is contained in:
		
							parent
							
								
									c04e17d82e
								
							
						
					
					
						commit
						bcd80ee773
					
				
							
								
								
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
								
							@ -77,6 +77,10 @@ body:
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Debug information
 | 
			
		||||
      description: |
 | 
			
		||||
        Please have a look at our [Debugging and troubleshooting
 | 
			
		||||
        guide](https://headscale.net/development/ref/debug/) to learn about
 | 
			
		||||
        common debugging techniques.
 | 
			
		||||
 | 
			
		||||
        Links? References? Anything that will give us more context about the issue you are encountering.
 | 
			
		||||
        If **any** of these are omitted we will likely close your issue, do **not** ignore them.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										115
									
								
								docs/ref/debug.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								docs/ref/debug.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,115 @@
 | 
			
		||||
# Debugging and troubleshooting
 | 
			
		||||
 | 
			
		||||
Headscale and Tailscale provide debug and introspection capabilities that can be helpful when things don't work as
 | 
			
		||||
expected. This page explains some debugging techniques to help pinpoint problems.
 | 
			
		||||
 | 
			
		||||
Please also have a look at [Tailscale's Troubleshooting guide](https://tailscale.com/kb/1023/troubleshooting). It offers
 | 
			
		||||
a many tips and suggestions to troubleshoot common issues.
 | 
			
		||||
 | 
			
		||||
## Tailscale
 | 
			
		||||
 | 
			
		||||
The Tailscale client itself offers many commands to introspect its state as well as the state of the network:
 | 
			
		||||
 | 
			
		||||
- [Check local network conditions](https://tailscale.com/kb/1080/cli#netcheck): `tailscale netcheck`
 | 
			
		||||
- [Get the client status](https://tailscale.com/kb/1080/cli#status): `tailscale status --json`
 | 
			
		||||
- [Get DNS status](https://tailscale.com/kb/1080/cli#dns): `tailscale dns status --all`
 | 
			
		||||
- Client logs: `tailscale debug daemon-logs`
 | 
			
		||||
- Client netmap: `tailscale debug netmap`
 | 
			
		||||
- Test DERP connection: `tailscale debug derp headscale`
 | 
			
		||||
- And many more, see: `tailscale debug --help`
 | 
			
		||||
 | 
			
		||||
Many of the commands are helpful when trying to understand differences between Headscale and Tailscale SaaS.
 | 
			
		||||
 | 
			
		||||
## Headscale
 | 
			
		||||
 | 
			
		||||
### Application logging
 | 
			
		||||
 | 
			
		||||
The log levels `debug` and `trace` can be useful to get more information from Headscale.
 | 
			
		||||
 | 
			
		||||
```yaml hl_lines="3"
 | 
			
		||||
log:
 | 
			
		||||
  # Valid log levels: panic, fatal, error, warn, info, debug, trace
 | 
			
		||||
  level: debug
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Database logging
 | 
			
		||||
 | 
			
		||||
The database debug mode logs all database queries. Enable it to see how Headscale interacts with its database. This also
 | 
			
		||||
requires the application log level to be set to either `debug` or `trace`.
 | 
			
		||||
 | 
			
		||||
```yaml hl_lines="3 7"
 | 
			
		||||
database:
 | 
			
		||||
  # Enable debug mode. This setting requires the log.level to be set to "debug" or "trace".
 | 
			
		||||
  debug: false
 | 
			
		||||
 | 
			
		||||
log:
 | 
			
		||||
  # Valid log levels: panic, fatal, error, warn, info, debug, trace
 | 
			
		||||
  level: debug
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Metrics and debug endpoint
 | 
			
		||||
 | 
			
		||||
Headscale provides a metrics and debug endpoint. It allows to introspect different aspects such as:
 | 
			
		||||
 | 
			
		||||
- Information about the Go runtime, memory usage and statistics
 | 
			
		||||
- Connected nodes and pending registrations
 | 
			
		||||
- Active ACLs, filters and SSH policy
 | 
			
		||||
- Current DERPMap
 | 
			
		||||
- Prometheus metrics
 | 
			
		||||
 | 
			
		||||
!!! warning "Keep the metrics and debug endpoint private"
 | 
			
		||||
 | 
			
		||||
    The listen address and port can be configured with the `metrics_listen_addr` variable in the [configuration
 | 
			
		||||
    file](./configuration.md). By default it listens on localhost, port 9090.
 | 
			
		||||
 | 
			
		||||
    Keep the metrics and debug endpoint private to your internal network and don't expose it to the Internet.
 | 
			
		||||
 | 
			
		||||
Query metrics via <http://localhost:9090/metrics> and get an overview of available debug information via
 | 
			
		||||
<http://localhost:9090/debug/>. Metrics may be queried from outside localhost but the debug interface is subject to
 | 
			
		||||
additional protection despite listening on all interfaces.
 | 
			
		||||
 | 
			
		||||
=== "Direct access"
 | 
			
		||||
 | 
			
		||||
    Access the debug interface directly on the server where Headscale is installed.
 | 
			
		||||
 | 
			
		||||
    ```console
 | 
			
		||||
    curl http://localhost:9090/debug/
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
=== "SSH port forwarding"
 | 
			
		||||
 | 
			
		||||
    Use SSH port forwarding to forward Headscale's metrics and debug port to your device.
 | 
			
		||||
 | 
			
		||||
    ```console
 | 
			
		||||
    ssh <HEADSCALE_SERVER> -L 9090:localhost:9090
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    Access the debug interface on your device by opening <http://localhost:9090/debug/> in your web browser.
 | 
			
		||||
 | 
			
		||||
=== "Via debug key"
 | 
			
		||||
 | 
			
		||||
    The access control of the debug interface supports the use of a debug key. Traffic is accepted if the path to a
 | 
			
		||||
    debug key is set via the environment variable `TS_DEBUG_KEY_PATH` and the debug key sent as value for `debugkey`
 | 
			
		||||
    parameter with each request.
 | 
			
		||||
 | 
			
		||||
    ```console
 | 
			
		||||
    openssl rand -hex 32 | tee debugkey.txt
 | 
			
		||||
    export TS_DEBUG_KEY_PATH=debugkey.txt
 | 
			
		||||
    headscale serve
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    Access the debug interface on your device by opening `http://<IP_OF_HEADSCALE>:9090/debug/?debugkey=<DEBUG_KEY>` in
 | 
			
		||||
    your web browser. The `debugkey` parameter must be sent with every request.
 | 
			
		||||
 | 
			
		||||
=== "Via debug IP address"
 | 
			
		||||
 | 
			
		||||
    The debug endpoint expects traffic from localhost. A different debug IP address may be configured by setting the
 | 
			
		||||
    `TS_ALLOW_DEBUG_IP` environment variable before starting Headscale. The debug IP address is ignored when the HTTP
 | 
			
		||||
    header `X-Forwarded-For` is present.
 | 
			
		||||
 | 
			
		||||
    ```console
 | 
			
		||||
    export TS_ALLOW_DEBUG_IP=192.168.0.10       # IP address of your device
 | 
			
		||||
    headscale serve
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    Access the debug interface on your device by opening `http://<IP_OF_HEADSCALE>:9090/debug/` in your web browser.
 | 
			
		||||
@ -182,6 +182,7 @@ nav:
 | 
			
		||||
      - ACLs: ref/acls.md
 | 
			
		||||
      - DNS: ref/dns.md
 | 
			
		||||
      - Remote CLI: ref/remote-cli.md
 | 
			
		||||
      - Debug: ref/debug.md
 | 
			
		||||
      - Integration:
 | 
			
		||||
          - Reverse proxy: ref/integration/reverse-proxy.md
 | 
			
		||||
          - Web UI: ref/integration/web-ui.md
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user