Monaghan staged a strong second-half performance to strike for victory and ensure Division 1 football next season.
While Donegal face a relegation battle in their final game against Mayo in Ballybofey next Sunday.
Played in bitterly cold conditions, this was a game that got off to a lively start.
Donegal made the early running but only had a point from a Michael Murphy free to show for their efforts.
Monaghan were in wasteful mood but got back level on eight minutes through Conor McManus.
Points from Rory Beggan and David Garland, both frees, put Monaghan two in front and they then went on to lead by four after 27 minutes.
Donegal though, were dangerous especially on counter attacks with Jamie Brennan testing Rory Beggan twice before ultimately making the breakthrough for an opportunist goal on 28 minutes to level the match.
He then went on to restore Donegal to the lead with a good point.
Monaghan rallied though and David Garland converted two frees to give them a one point lead at the break on a score-line of Monaghan 0-9 Donegal 1-5.
Monaghan got off to a lightening start in the second-half with a goal by Ryan Wylie within a minute of the resumption and points apiece from Kieran Hughes and Karl O’Connell giving Monaghan a foothold they never relinquished thereafter.
They held Donegal at arms length while hitting them for match wininig points by substitute Conor McCarthy and a Conor McManus free to- deservedly win by six at the finish.
Monaghan made six changes from the team that started against Galway last time out with Colin Walshe, Drew Wylie, Dessie Ward, Dermot Malone coming in for Vinny Corey, Neil McAdam, Paraic McGuirk, Darren Hughes for Jack McCarron, David Garland for Micheal Bannigan and the suspended Fintan Kelly .
Donegal also made a raft of changes from the Tyrone game with Tony McCleneghan, Stephen McMenamin, Ryan and Mark McHugh and Eamonn Doherty losing out and first starts for Frank McGlynn, Paddy McGrath, Michael Langan. Niall O’Donnell and Martin Reilly all getting game time.
Monaghan: Rory Beggan 0-3 (3f), Colin Walshe, Conor Boyle, Kieran Duffy, Barry Kerr, Drew Wylie, Karl O’Connell 0-1, Kieran Hughes 0-2, Niall Kearns, Dessie Ward, Dermot Malone 0-1, Ryan McAnespie, Darren Hughes, David Garland 0-3 (3f), Conor McManus 0-4 (2f).
Subs: Dessie Mone 0-1 for B Kerr, Ryan Wylie 1-0 for C Walshe, (Both HT), Conor McCarthy 0-1 for D Garland (50), Owen Duffy for D Malone (51),Paudie McKenna for D Ward (64), Aaron Lynch for N Kearns (72).
Donegal: Shaun Patton, Eoghan Ban Gallagher, Caolan Ward, Conor Morrison, Frank McGlynn, Eamonn Doherty, Ryan McHugh, Hugh McFadden, Leo McLoone, Mark McHugh, Michael Murphy 0-6 (3f), Jamie Brennan 1-2, Michael Langan, Niall O’Donnell 0-1. Stephen McBrearty.
Subs: Martin O’Reilly for C McGinley (41), Nathan Mullins for L McLoone (42), Ciaran Thompson 0-1 for S McBrearty ( 49), Darach O’Connor for M LPangan (57), Caolan McMonagle for C Ward (64), Tony McCleneghan for F McGlynn (71).
Referee: Sean Hurson (Tyrone).