
Sleep and Tinnitus: Tracking the Impact of Acoustic Neuroma on Rest
Sleep is a fundamental human necessity, yet it becomes elusive when living with neurological conditions such as an acoustic neuroma. For me, constant tinnitus, an overactive mind, and the inherent challenges of the tumour make restful sleep exceptionally hard to achieve.
Each evening, as I attempt to unwind, my mind becomes increasingly active. Thoughts intensify, accompanied by tinnitus—a relentless high-pitched ringing. The silence of the night amplifies this sound, further complicating my attempts to fall asleep or stay asleep.
To counteract these challenges, I’ve adopted several strategies. Engaging in mentally exhausting activities, such as late-night workouts or gaming sessions with long-time friends, helps me tire myself out sufficiently to sleep. Even if I’m not particularly tired, I force myself into these routines because the alternative—hours of restless wakefulness—is worse. Despite these efforts, daytime fatigue is still common, and I occasionally find myself unintentionally drifting off during the day—a sign of chronic exhaustion.
Using my Garmin watch, I monitor my sleep patterns and stages to better understand the severity of my sleep issues. Recent data shows an average of 7.72 hours per night, but the details highlight deeper issues:
Deep Sleep: Approximately 1 hour per night
REM Sleep: Around 1.4 hours nightly
High Stress Duration: Nearly 20 minutes per night
Most Restful Night: 10.1 hours recorded on April 26th—a very rare occurrence
Achieving 10 hours of sleep felt significant. Waking up that morning brought noticeable clarity and alertness, underscoring just how substantial my ongoing sleep deficit usually is. Typically, my sleep remains predominantly in lighter, less restorative stages.
The lack of restful sleep can impair memory, concentration, emotional stability, and overall health. For individuals with conditions like acoustic neuroma and tinnitus, this issue often extends beyond their control, as both physical discomfort and mental strain play significant roles.
If you experience similar struggles, understand you’re not alone. Actively tracking sleep patterns and implementing coping strategies—even imperfect ones—can offer meaningful improvements. Celebrating rare, restful nights helps maintain perspective and provides motivation during tougher times.

The following images show recent sleep data collected via my Garmin watch, highlighting both the ongoing challenges and occasional successes in achieving restorative sleep.


How I Use Docker, InfluxDB, and Grafana to Track Garmin Sleep Data
I track and visualise my Garmin sleep data using a customised Docker stack leveraging InfluxDB and Grafana. My setup is inspired by the garmin-grafana project by Arpan Ghosh but modified to suit my specific requirements.
My current Docker setup includes:
Grafana: Runs in a standalone Docker Compose file (
grafana.yml
) integrated with Authentik for Single Sign-On (SSO).Garmin Fetch Data and InfluxDB: Managed in another separate Docker Compose file (
garmin.yml
).
I’ll share detailed guides shortly, but here’s an overview of my configuration:
Grafana: My setup uses a customised Docker Compose configuration with several essential plugins. It integrates Authentik for secure authentication (I’ll provide a dedicated post on setting this up).
services:
# Grafana - Graphical data visualization for InfluxDB data
grafana:
image: grafana/grafana:latest
container_name: grafana
security_opt:
- no-new-privileges:true
restart: unless-stopped
#profiles: ["apps", "all"]
networks:
- t3_proxy
#user: "$PUID:$PGID"
volumes:
- grafana-data:/var/lib/grafana
environment:
GF_INSTALL_PLUGINS: grafana-piechart-panel,grafana-clock-panel,grafana-simple-json-datasource,grafana-strava-datasource,alexanderzobnin-zabbix-app,vonage-status-panel,raintank-worldping-app,marcusolsson-hourly-heatmap-panel
PUID: $PUID
PGID: $PGID
TZ: $TZ
GF_SERVER_ROOT_URL: "https://grafana.haresign.dev/"
GF_AUTH_GENERIC_OAUTH_ENABLED: "true"
GF_AUTH_GENERIC_OAUTH_NAME: "authentik"
GF_AUTH_GENERIC_OAUTH_CLIENT_ID: ""
GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET: ""
GF_AUTH_GENERIC_OAUTH_SCOPES: "openid profile email"
GF_AUTH_GENERIC_OAUTH_AUTH_URL: ""
GF_AUTH_GENERIC_OAUTH_TOKEN_URL: ""
GF_AUTH_GENERIC_OAUTH_API_URL: ""
GF_AUTH_SIGNOUT_REDIRECT_URL: ""
# Optionally enable auto-login (bypasses Grafana login screen)
GF_AUTH_OAUTH_AUTO_LOGIN: "true"
# Optionally map user groups to Grafana roles
GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH: "contains(groups, 'Grafana Admins') && 'Admin' || contains(groups, 'Grafana Editors') && 'Editor' || 'Viewer'"
logging:
options:
max-size: "10m"
max-file: "3"
labels:
- "traefik.enable=true"
# HTTP Routers
- "traefik.http.routers.grafana-rtr.entrypoints=websecure"
- "traefik.http.routers.grafana-rtr.rule=Host(grafana.$DOMAINNAME)"
# Middlewares
- "traefik.http.routers.grafana-rtr.middlewares=chain-no-auth@file"
# HTTP Services
- "traefik.http.routers.grafana-rtr.service=grafana-svc"
- "traefik.http.services.grafana-svc.loadbalancer.server.port=3000"
volumes:
grafana-data:
Garmin Data and InfluxDB: This stack securely pulls my Garmin data into an InfluxDB instance for storage and easy retrieval.
services:
garmin_influxdb:
restart: unless-stopped
container_name: garmin_influxdb
hostname: garmin_influxdb
environment:
- INFLUXDB_DB=GarminStats
- INFLUXDB_USER=influxdb_user
- INFLUXDB_USER_PASSWORD=********************************
- INFLUXDB_DATA_INDEX_VERSION=tsi1
volumes:
- garmin_influxdb_data:/var/lib/influxdb
image: 'influxdb:1.11'
networks:
- t3_proxy
garmin-fetch-data:
restart: unless-stopped
image: thisisarpanghosh/garmin-fetch-data:latest
container_name: garmin-fetch-data
depends_on:
- garmin_influxdb
networks:
- t3_proxy
volumes:
- $DOCKERDIR/config/garmin/garminconnect-tokens:/home/appuser/.garminconnect # (persistent tokens storage - garminconnect-tokens folder must be owned by 1000:1000) - should be './garminconnect-tokens:/root/.garminconnect' instead if you are using using user: root
environment:
#- MANUAL_START_DATE=2024-04-12
- INFLUXDB_HOST=garmin_influxdb
- INFLUXDB_PORT=8086
- INFLUXDB_USERNAME=influxdb_user
- INFLUXDB_PASSWORD=***************************
- INFLUXDB_DATABASE=GarminStats
- GARMINCONNECT_IS_CN=False
#####################################################################################
- GARMINCONNECT_EMAIL=************* # optional, read the setup docs. (remove or comment out this line altogether if not used)
- GARMINCONNECT_BASE64_PASSWORD=********************** # optional, must be Base64 encoded, read setup docs. (remove or comment out this line altogether if not used)
- LOG_LEVEL=INFO # change to DEBUG to get DEBUG logs
# - UPDATE_INTERVAL_SECONDS=300 # Default update check interval is set to 5 minutes
- FETCH_ADVANCED_TRAINING_DATA=True # This enables fetching additional data : Training Readiness, Hill score and Endurance score as available when set to True
# - KEEP_FIT_FILES=False # Stores the FIT files (downloads and saves them) when set to True - read docs for more details
- ALWAYS_PROCESS_FIT_FILES=True # Enables processing FIT files even if GPS data is not present in it when set to True, default False
# - USER_TIMEZONE="" # Can hardcode user's timezone, fetches timezone automatically and dynamically on each run if set to empty (default) - Read docs
# - INFLUXDB_ENDPOINT_IS_HTTP=True # Set this to False if you are using HTTPS for your influxdb connection (over the internet)
# - FORCE_REPROCESS_ACTIVITIES=True # Enables re-processing of FIT files on iterative updates when set to True (default), setting to False may save processing time but known for skipping activities
volumes:
garmin_influxdb_data:
In a future post, I’ll share detailed step-by-step instructions on how I’ve set up these Docker Compose files, including all necessary configurations and environment variables.
Additionally, I’m preparing another detailed article covering my broader Docker environment, including integrations that pull data from my Peloton bike and other fitness equipment. This will be particularly useful if you’re interested in assembling a comprehensive home health monitoring system.
Stay tuned, and feel free to reach out if you have specific questions or topics you’d like me to cover in these upcoming guides.
Please share this article if you like it!
I’m a fitness enthusiast and Peloton addict who loves challenging limits through races, paddleboarding, and life’s adventures. Here, I share milestones, reflections on Acoustic Neuroma, and stories of resilience and growth.