Their chilly evening encounter against bottom-side Salzburg was far from a tepid affair, but neither was it likely to develop into a European classic.
Roberto Mancini's side were often excellent in their build-up play, however, they let themselves down with either the final ball or poor positioning of their forwards.
Both Joleon Lescott and Shaun Wright-Phillips had been guilty of wasting final passes and Jo of failing to outmuscle his marker while through on goal before Italian Balotelli opened the scoring.
On this occasion, Zabaleta found his man in the middle and the former Inter Milan striker beat his marker and volleyed in brilliantly.
Balotelli had also gone close in the first half when he forced a good low save from Gerhard Tremmel in the Salzburg goal, while James Milner screwed a shot wide following a good run down the right.
The second half was as comfortable for City as the first, and after Balotelli almost ripped open the Salzburg netting, albeit the wrong side, City grabbed their second thanks again to the precocious forward.
His second was less aesthetically pleasing than the first, guiding home in a mis-directed effort by Vieira.
Balotelli came off soon after having seemed to pick up a slight hamstring problem but City's scoring for the night was not over.
The best was saved until last when the hardy Johnson, one of the few not to be wearing gloves on the pitch, cut in from the left beat three players before placing his effort past Tremmel.
Salzburg went close on a couple of occasions when Rabiu Afolabi headed wide from close range, while City keeper Shay Given was forced to save one-handed from Stefan Hierlander.
But the Austrian outfit were passengers for most of the match and the home side progressed comfortably.
Manchester City boss Roberto Mancini: "I'm happy with qualification - we can now focus on the Premier League.
"We could have had a better result had we converted our three or four chances in the first half."
On Balotelli: "He's a good striker but he must improve. He can play better than he did tonight.
On Johnson: "He scored a good goal tonight and I'm happy for him because he's a good guy. But like Mario, he can play better."
90:00+2:09 The referee blows for the end of the match.
90:00+1:40 Jakob Jantscher takes a shot. Blocked by Micah Richards.
90:00+0:22 De Carvalho Alan takes a shot. Pablo Zabaleta gets a block in.
87:46 Emmanuel Adebayor has an effort at goal from deep inside the area missing to the right of the goal.
84:44 Free kick awarded for an unfair challenge on Emmanuel Adebayor by Ibrahim Sekagya. Pablo Zabaleta takes the direct free kick.
84:44 Booking The referee shows Ibrahim Sekagya a yellow card.
81:49 Emmanuel Adebayor takes a shot. Save by Gerhard Tremmel. Adam Johnson decides to take the corner short, The ball is sent over
by James Milner, clearance by Ibrahim Sekagya.
Correction - 80:23 Ibrahim Sekagya produces a right-footed shot from just outside the box that misses to the right of the net.
Correction - 80:23 Substitution Kolo Toure goes off and Micah Richards comes on.
80:23 Ibrahim Sekagya produces a right-footed shot from just outside the box that goes wide right of the target.
80:23 Substitution Micah Richards is brought on as a substitute for Kolo Toure.
77:33 GOAL - Adam Johnson:Man City 3 - 0 Red Bull Salzburg Adam Johnson grabs a goal from deep inside the penalty box to the bottom right corner of the goal. Man City 3-0 SV Red Bull
74:29 Jakob Jantscher has an effort at goal from outside the area which goes wide right of the goal.
72:42 The official flags de Carvalho Alan offside. Shay Given restarts play with the free kick.
71:05 The ball is crossed by James Milner, save by Gerhard Tremmel.
70:18 Substitution Mario Balotelli leaves the field to be replaced by Emmanuel Adebayor.
68:55 Shot from 30 yards from Stefan Hierlander. Save made by Shay Given.
66:25 Ibrahim Sekagya challenges Mario Balotelli unfairly and gives away a free kick. Jerome Boateng takes the direct free kick.
66:25 Substitution Thomas Augustinussen on for David Mendes Da Silva.
65:42 Mario Balotelli produces a right-footed shot from just outside the box that misses to the right of the target.
64:03 Patrick Vieira takes a shot. Blocked by Ibrahim Sekagya. The assist for the goal came from Patrick Vieira.
64:03 GOAL - Mario Balotelli:Man City 2 - 0 Red Bull Salzburg Mario Balotelli finds the net with a goal from inside the six-yard box to the bottom right corner of the goal. Man City 2-0
SV Red Bull Salzburg.
62:13 Adam Johnson decides to take a short corner, James Milner has an effort at goal from outside the penalty box missing to the
wide right of the goal.
61:11 Corner from the right by-line taken by Jakob Jantscher, clearance by Patrick Vieira.
58:17 Adam Johnson produces a left-footed shot from close in that goes over the bar.
56:04 Substitution Simon Cziommer goes off and de Carvalho Alan comes on.
55:33 Effort on goal by Mario Balotelli from deep inside the penalty area misses to the right of the target.
52:14 Free kick awarded for an unfair challenge on Franz Schiemer by Pablo Zabaleta. Franz Schiemer takes the free kick.
49:58 Corner taken by Joaquin Boghossian played to the near post, Kolo Toure manages to make a clearance. Effort from the edge of
the penalty box by Stefan Hierlander goes wide of the right-hand upright.
47:56 Adam Johnson fouled by Simon Cziommer, the ref awards a free kick. Direct free kick taken by Pablo Zabaleta.
47:08 James Milner takes the outswinging corner, clearance by Stefan Hierlander.
46:10 Inswinging corner taken right-footed by Simon Cziommer played to the near post, Mario Balotelli manages to make a clearance.
45:01 The referee starts the second half.
45:01 Substitution Dusan Svento on for Martin Hinteregger.
45:00+0:21 The referee calls an end to the first half.
44:51 Booking Joaquin Boghossian goes into the referee's book for dissent.
44:05 Effort from inside the area by James Milner misses to the left of the target.
43:10 Mario Balotelli produces a right-footed shot from outside the penalty area and misses left.
42:23 Ibrahim Sekagya challenges Mario Balotelli unfairly and gives away a free kick. Patrick Vieira takes the direct free kick.
40:38 Shot from 25 yards from David Mendes Da Silva. Blocked by James Milner.
39:27 Shaun Wright-Phillips takes a shot. Save by Gerhard Tremmel.
37:27 Franz Schiemer concedes a free kick for a foul on Shaun Wright-Phillips. The free kick is swung in right-footed by James Milner,
save by Gerhard Tremmel.
36:22 Shot from outside the area by Stefan Hierlander misses to the left of the goal.
33:01 Christoph Leitgeb produces a right-footed shot from outside the penalty box and misses right.
29:35 Jakob Jantscher takes a shot. Save by Shay Given.
27:15 Rabiu Afolabi gives away a free kick for an unfair challenge on Joleon Lescott. James Milner takes the direct free kick.
27:15 Booking Rabiu Afolabi receives a yellow card for unsporting behaviour.
25:43 The referee blows for offside. Shay Given restarts play with the free kick.
23:25 A cross is delivered by Stefan Hierlander, Rabiu Afolabi has a headed effort at goal from close in which goes wide left of
23:04 Stefan Hierlander takes a outswinging corner to the near post, Mario Balotelli makes a clearance.
21:41 Free kick awarded for an unfair challenge on Simon Cziommer by Jerome Boateng. Martin Hinteregger takes the free kick.
21:02 Adam Johnson sends in a cross, Ibrahim Sekagya manages to make a clearance.
19:40 Joaquin Boghossian has an effort at goal from outside the box which goes wide left of the target.
18:56 A cross is delivered by Adam Johnson.
17:28 Assist by Pablo Zabaleta.
17:28 GOAL - Mario Balotelli:Man City 1 - 0 Red Bull Salzburg Mario Balotelli scores a goal from inside the penalty box to the bottom left corner of the goal. Man City 1-0 SV Red Bull
14:31 Mario Balotelli takes a shot. Save by Gerhard Tremmel. Outswinging corner taken by James Milner, Joaquin Boghossian makes
a clearance. Outswinging corner taken by James Milner.
12:35 Shaun Wright-Phillips takes a shot. Blocked by Ibrahim Sekagya.
11:57 Jerome Boateng fouled by Jakob Jantscher, the ref awards a free kick. Jerome Boateng takes the free kick.
8:10 Free kick awarded for an unfair challenge on Stefan Hierlander by Pablo Zabaleta. Jakob Jantscher crosses the ball from the
free kick right-footed from right wing, Pablo Zabaleta makes a clearance. Effort from long range by Jakob Jantscher goes wide
right of the target.
7:21 Outswinging corner taken left-footed by Adam Johnson from the left by-line to the near post, clearance made by Martin Hinteregger.
6:41 Centre by Shaun Wright-Phillips, Franz Schiemer manages to make a clearance. Pass corner from left by-line taken by Adam Johnson
to short, clearance made by Ibrahim Sekagya.
5:19 Mario Balotelli produces a right-footed shot from just outside the area that goes harmlessly over the bar.
Correction - 2:09 Corner taken by Adam Johnson from the left by-line played to the near post, clearance by Martin Hinteregger.
2:09 Adam Johnson takes a outswinging corner from the left by-line to the near post, clearance made by Rabiu Afolabi.
1:09 Christoph Leitgeb challenges Mario Balotelli unfairly and gives away a free kick. James Milner delivers the ball from the
free kick right-footed from left channel, Christoph Leitgeb makes a clearance.
0:00 The match has kicked off.
Live text and data provided by The Press Association.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.