Julian Alvarez's double saved Manchester City's blushes as the holders began their Champions League defence with a 3-1 win after Red Star Belgrade took a shock lead at the Etihad on Tuesday.
The visitors' goal had been bombarded before they stunned Pep Guardiola's men when Osman Bukari opened the scoring in first-half stoppage time.
However, Alvarez continued his sparkling early season form by levelling just two minutes after the break.
The Argentine then got some help from Red Star goalkeeper Omri Glazer as he flapped at Alvarez's free-kick to allow the ball to fly into the far corner.
Rodri rounded off the scoring with a composed finish 17 minutes from time.
"If we scored two goals early in the beginning it would've been completely different," said Guardiola, who was frustrated at his side's finishing after having 22 shots in the first-half alone.
"Having 22 shots on goal means you are playing really good. It has to be the responsibility of the people in front to score the goals."
Red Star were expected to be lambs to the slaughter after City followed up their treble success last season with a perfect start five games into the new Premier League campaign.
But the English champions made life difficult for themselves, while Glazer performed heroics for the Serbian giants before the break.
Erling Haaland has now failed to score in four consecutive Champions League games and was frustrated at himself after heading against the crossbar from point-blank range.
Phil Foden then nodded an even easier headed opportunity straight at Glazer.
- Bernardo blow -
City's stretched squad due to injuries was shown as they named only eight of a permitted 12 substitutes, two of which were goalkeepers.
And Bernardo Silva had to be replaced just before half-time by Jeremy Doku in what could be another injury problem for Guardiola.
Red Star had barely been out their own half in the opening 45 minutes, but City were stunned when Bukari burst in behind and finished confidently past Ederson.
The Ghanaian's joy was temporarily quelled by the offside flag but a VAR check revealed he had been played onside by Ruben Dias.
City quickly went to work after the break to ensure that was to be the only shock of the night.
Haaland may not have found his range in front of goal, but the Norwegian's clever pass played in Alvarez to round Glazer for the equaliser.
"We conceded an early goal (in the second-half) and after that it was difficult to maintain the pace, because we never play at this pace in our league," said Red Star coach Barak Bakhar. "We learned a lot from this match.”
All of Glazer's good work was then forgotten as his miscued punch just helped Alvarez's free-kick on its way into the top corner.
Kevin De Bruyne's long-term injury has opened the door to a regular starting spot for Alvarez rather than having to rival Haaland to start up front.
And the 23-year-old is thriving in his second season in English football with four goals in seven games.
"Every single game he is working, scoring goals, making assists," added Guardiola.
Rodri was the City hero when they finally conquered Europe for the first time by beating Inter Milan 1-0 in Istanbul in June and the Spaniard is picking up the healthy habit of scoring vital goals.
The midfielder was afforded far too much room on the edge of the area and picked his spot with a perfectly weighted curling effort into the far corner to secure the three points.