Manchester City were far from their rip-roaring best on the night, creating very few chances and rarely testing Chelsea. With Kevin De Bruyne going off with an ankle problem in the second half, Manchester City were second-best for much of the game.
Chelsea could've easily scored another goal or two had they been a bit more clinical with their chances. Meanwhile, substitute Christian Pulisic saw his stoppage-time goal ruled out for offside.
On that note, let's take a look at the player ratings for both Chelsea and Manchester City:
Chelsea Player Ratings against Manchester City
Kepa Arrizabalaga - 6/10
The out-of-favour Kepa Arrizabalaga returned to the Chelsea fold and enjoyed a fairly comfortable outing, as Manchester City rarely threatening. In fact, the Spaniard had to make just two saves in the match, picking up a morale-boosting clean sheet in the process.
Cesar Azpilicueta - 7.5/10
It was a defensive masterclass from the Chelsea captain. Cesar Azpilicueta was on the heels of Manchester City defenders, forcing them to concede possession. He made three tackles and five clearances in the game.
Thiago Silva - 7.5/10
Kudos to his perseverance, Thiago Silva continued despite nursing a back problem. The Brazilian was brilliant on the night, making six clearances.
Antonio Rudiger - 7.5/10
Antonio Rudiger complemented Silva with a terrific shift of his own, closing down Manchester City's attackers with elan. He also took care of the flanks on a few occasions.
Reece James - 7/10
Besides a cross for Ben Chilwell early on, Reece James had little to show in attack but came up trumps defensively.
N'Golo Kante - 7.5/10
It was an impressive outing in midfield for N'Golo Kante, who shut out every Manchester City player trying to work his way down the middle. Kante also burst forward a few times. The only downside to his game was his uncharacteristic wayward passing on the night.
Jorginho - 7/10
The key to Chelsea's ball circulation and providing an excellent cover to the back four, Jorginho also made four tackles and completed 92% of his passes.
Ben Chilwell - 7/10
Ben Chilwell missed a good chance during the early exchanges of the game but made his presence felt at both ends of the pitch in a superb all-round performance.
Hakim Ziyech - 8/10
A thorn in Manchester City's flesh all night, Hakim Ziyech always looked to get in behind City's backline. When he succeeded once, he scored Chelsea's winning goal. But he could've netted a second just minutes later.
Mason Mount - 8/10
Werner got the assist for Ziyech's goal, but Mason Mount deserves credit for the long ball that sparked the counter. He also got the better of Fernandinho in midfield.
Timo Werner - 7/10
Timo Werner made some good runs down the flank and hit Manchester City on the break several times, one of which culminated in the German providing the assist to Ziyech's winner, the former's 12th of the season in all competitions.
Ratings of Chelsea substitutes against Manchester City:
Christian Pulisic - 7/10
Christian Pulisic looked bright after coming on and also scored a brilliant goal in stoppage time, but that was ruled out for offside in the build-up to the strike.
Kai Havertz - 5/10
Kai Havertz came on with a little over ten minutes remaining but couldn't produce anything meaningful.
Emerson - 5/10
Emerson came on alongside Havertz but was barely seen in the game.
Kurt Zouma - 7/10
The last substitution of the night, Kurt Zouma managed to make a superb clearance in extra time.