After a dominant opening half in which Thomas Muller hit the crossbar, the Bundesliga leader – facing Chelsea for the first time since losing to the Blues in the 2012 final – took the match away from its host in the space of three second-half minutes.
Gnabry, who scored four in a 7-2 rout over Tottenham in Bayern's last trip to London, netted a brace when twice combining brilliantly with Robert Lewandowski, who got Bayern's third with 14 minutes remaining.
With Bayern in the ascendency ahead of the return fixture on home soil, Chelsea's misery was compounded when Marcos Alonso was sent off late on.
Retaining his place in Chelsea's line up at Kepa Arrizabalaga's expense, Willy Caballero had a save to make in the first minute when he kept out Muller's strike.
Muller turned provider 10 minutes later with a brilliant exchange of passes with Kingsley Coman, who sliced wide, while Caballero twice denied Lewandowski.
With Olivier Giroud failing to turn in Mason Mount's cross at the other end, the bar came to Chelsea's rescue from a Muller header.
But Bayern made no mistake with its next chance – Lewandowski squaring for the supporting Gnabry to side-foot home.
They swiftly added a second, too, with Lewandowski and Gnabry combining once more for the latter to slot into the bottom-right corner.
Gnabry could have had his third before the hour only to hammer over on the volley, though Bayern was inconvenienced by Coman succumbing to an apparent hamstring injury.
Chelsea seemed to be gathering a head of steam late on, yet Frank Lampard's side found themselves down – and all but out – when the excellent Alphonso Davies raced clear to tee up Lewandowski for his 11th Champions League goal of the season, with Alonso then seeing red after a VAR check for violent conduct.