Erling Haaland’s ninth minute strike at the Gtech Community Stadium proved to be the difference between the two sides, in a match where City rode their luck at times.
The result left Pep Guardiola’s title challengers three points adrift of league leaders Arsenal, and Brentford down in 16th place, some six points worse off.
Bees boss Keith Andrews made one change to his team from the side that beat Manchester United in their last game, with Kristoffer Ajer preferred ahead of Dango Ouattara.
Guardiola, meanwhile, made three alterations, with Matheus Nunes, Osca Bobb and Savinho all replacing John Stones, Bernardo Silva and Jeremy Doku.
City wasted no time expressing their attacking intent with Tijjani Reijnders the first to threaten the Brentford defence as he managed to weave his way into the box before ultimately being crowded out by a number of defenders.
But it took just nine minutes for the home side to be breached as Haaland showed great strength to hold off his man and fire past Caoimhin Kelleher, after picking up a pass from Josko Gvardiol.
Phil Foden was next with a chance, with 19 minutes on the clock, but this time Kelleher was equal to the task.
There was an early blow for City though as Rodri left the field after picking up an injury after just 22 minutes, with Nico Gonzalez brought on to replace him.
Foden really should have scored on the half hour mark after being set up by Bobb, but his close-range effort was well blocked, and the pair combined again minutes later, but the result was the same.
City kept streaming forward and were denied by a super save from Kelleher, with six first half minutes remaining, as a searching cross from Nico O’Reilly found Tijjani Reijnders at the back post, who got a powerful half-volley on target.
It was a dominant display by City in the first half but they were lucky not to have conceded within three minutes of the restart after a glaring mistake from Gvardiol. Igor Thiago raced through one-on-one with Donnarumma, but the goalkeeper did well to stand tall and block the shot.
City continued to attack but continued to be wasteful in front of goal, as Bobb’s 53rd minute shot was blocked after some excellent attacking play.
Brentford were starting to see more of the ball and were actively trying to score, rather than stop City from playing.
Ouattara and Mathias Jensen came on for Mikkel Damsgaard and Thiago as Andrews tried to find a way through the visitors’ defence.
Jordan Henderson was one player trying to drive his side forward, so it was a shock to see him withdrawn and replaced with Vitaly Janelt as Frank Onyeka came on for the injured Yehor Yarmoliuk.
Man City, meanwhile, looked to see out the game with the introducton of Jeremy Doku and Silva for Bobb and Reijnders.
The result of all the changes meant it was a scrappy end to the game, with no real chances for either side, with the narrow win probably a fair result.