Son Heung-min slammed the hosts in front before Joshua Kimmich’s fine strike levelled the scores almost immediately.
Robert Lewandowski then put Niko Kovac’s side in front, before Gnabry struck twice in three minutes to put the visitors in command.
Harry Kane gave Spurs hope, but Gnabry again scored twice in the final ten minutes - either side of a Lewandowski strike - to leave the hosts licking their wounds on a chastening European night in north London.
READ MORE: Tottenham boss Mauricio Pochettino calls on Spurs to 'stick together' after Bayern Munich mauling
READ MORE: Manchester City 2-0 Dinamo Zagreb: Super-sub Raheem Sterling inspires City to three points
In a sign of things to come, it was Gnabry who might have opened the scoring in a frenetic start, but his fierce left-footed drive was parried away by Hugo Lloris.
The 2018 World Cup-winning goalkeeper was equalled by his German counterpart Manuel Neuer in the sixth minute when Son was picked out by a cutting Moussa Sissoko pass.
Son was causing the Bundesliga side serious concerns but he again spurned a good chance when a pass to Kane, lurking six yards out, would have seen the hosts take the lead.
As it was, last season’s Champions League finalists did go in front on 12 minutes when the South Korean international fizzed an effort into the far corner, via Neuer’s outstretched hand.
It was a high-propane start to an eagerly-anticipated match, but no sooner had Spurs began to celebrate than they found themselves level.
Kimmich pounced on a loose clearance on the edge of the box to bend a strike inside the far post, after a glorious first touch to set up the shot, just three minutes after falling behind.
After that, the match began to calm down slightly - but Neuer still had to be at his best to keep out Tanguy Ndombele after Serge Aurier picked him out inside the box.
Lewandowski might have done better at the far post, having headed David Alaba’s outswinging cross over, as chances became less frequent.
But the Polish international was at his prolific best to hand the European giants the lead on the stroke of half time. Moments after Corentin Tolisso had a penalty claim denied, Lewandowski pounced on the turn to fire a bullet effort into the far corner.
It was his 13th goal of the season and left Tottenham frustrated after a promising half.
After the break Dele Alli, returning to the Spurs starting side, half-volleyed a chance straight at Neuer after Tolisso struck an effort wide.
But, clinically, the visitors then struck twice to finish off Mauricio Pochettino’s men with Gnabry’s solo efforts.
For the first, he fended off a meek challenge from Aurier before cutting inside Toby Alderweireld to fire into the far corner. For the second, it was a fine left-footed finish off the far post to beat Lloris.
Almost immediately, though, Spurs were handed a lifeline when Danny Rose pipped Kingsley Coman to the ball inside the box. Talisman Kane delivered as always, converting despite the best efforts of Neuer, who had dived the right way.
That goal ensured the game burst back into life and Christian Eriksen, who replaced Ndombele, forced Neuer into a wonderful full-stretch save as the hosts eyed an unlikely comeback.
Munich were then denied a penalty from Coman’s appeal, before Coutinho struck a shot from range wide of the target. Eriksen, once again, tried his luck - but blazed over after Son’s set-up flick. It was the end of Tottenham’s night and preceded a woeful final ten minutes.
Gnabry, returning to north London, continued his clinical form when he received Thiago’s long ball and slotted past the helpless Lloris. Then. to compound the misery, Lewandowski slotted home with less than four minutes remaining.
Germany winger Gnabry then added his fourth of the night from the edge of the box as the home defence went missing in a harrowing capitulation.
The result leaves Tottenham with minimal room for error to qualify for the knockout rounds, having picked up just one point from their opening two matches.
Featured from our writers