First-half goals from Theo Walcott and Olivier Giroud had put the hosts in charge, before Yaya Toure pulled one back late on.
That set up an almost unbearably fraught finale as City threw everything at the Gunners, but Arsène Wenger’s side held for a win that felt like more than just three points.
During a tight first half, the visitors had settled quicker and could have grabbed the lead just after the half-hour mark when Kevin de Bruyne raced through on goal, only to drag his shot wide.
It proved to be a decisive moment as, within 60 seconds, Arsenal had the lead – and in some style as Walcott whipped a powerful drive into the far corner.
Things got even better when, right on the stroke of half time, Mesut Ozil – the master of the assist – slipped in Olivier Giroud, who finished clinically.
Arsenal continued to push for a third after the break, and they came close through Joel Campbell and Aaron Ramsey.
The Gunners looked comfortable but with eight minutes remaining Toure put hearts in mouths when he sent a curling shot into the top corner.
Nerves were shot in the red half of north London during the denouement to a thrilling festive encounter, but the Gunners held on for three precious points.
What a start to Christmas.