The Flames' victory was necessary to their playoff hopes.
Calgary (20-23-3) is six points back of the Canadiens (20-16-9), who have a game in hand and hold down the fourth and final playoff spot in the NHL's North Division.
The Flames called off a morning skate because a player tested positive for COVID-19. There were a few hours wondering what that meant for the team and their season.
Forward Josh Leivo was placed on the NHL's COVID protocol list and the game went ahead.
"It was a strange day and we didn't know then what was going on, but we were told what to do," Monahan said. "We were getting ready all day to play a game and it ended up working out.
"It sucks he's not here today with us, but he's going to be all right."
Leivo did not have symptoms of the virus, Flames head coach Darryl Sutter.
"I spoke with him before the game. He feels fine. He has no symptoms but he obviously (had) a positive test," the coach said. "Other than that, the team and the league will handle it."
Monahan produced his first three-point game of the season. Calgary's Andrew Mangiapane had a goal and an assist.
Dillon Dube and Elias Lindholm, with an empty-net goal, also scored for the Flames.
Flames goaltender Jacob Markstrom made 17 saves for the win and is 5-1 against the Canadiens this season.
Tyler Toffoli and Joel Armia scored for the Canadiens, who lost a third game in their last five. Jake Allen had 27 save in the loss.
"They had a little more jump than us," Canadiens head coach Dominique Ducharme said.
"Coming out of the corners, beating our guys back to the net, those are little things that you pile them up, you can pay the price for those things and we did."
The Flames are at home to the Habs again both Saturday and Monday.
"They're gonna come up with a better game so we got to up our level too," Monahan said.
The three-games-in-four-days series against the club they're chasing will likely determine whether the Flames have a chance at the post-season or they play out the string this season.
Calgary leads the nine-game season series with Montreal 5-2.
The Flames played 11 forwards Friday.
Sutter wasn't comfortable inserting Buddy Robinson into the lineup in Leivo's absence because Robinson has played 24 minutes over four games with the Flames this season.
"That's kind of a tough spot to put him into I think," Sutter said.
Monahan scored the eventual game-winner at 5:58 of the third period. Johnny Gaudreau fed the centre from behind the net for Monahan to score top shelf on Allen.
"He's probably given me a hundred and fifty of those," Monahan said.
The Canadiens challenged a Calgary goal and got it reversed late in the second period. Officials agreed that Mikael Backlund jostled Allen to knock the puck loose and tap it in.
Calgary outshot Montreal 13-7 in the opening period which ended in 2-2 stalemate.
Canadiens captain Shea Weber was serving a tripping penalty when Mangiapane scored with 34 seconds remaining in the period.
Mangiapane tipped a Noah Hanifin shot from the blue-line upstairs over Allen's glove.
Montreal led 2-1 at 18:24 on Armia's goal.
Phillip Danault won the draw and sent the puck back to the winger, who threaded a shot through traffic and beat Markstrom short side.
Toffoli drew the visitors even at 13:19 with his team-leading 23rd goal of the season.
He skated the puck over the blue-line and put a wrist shot under the glove and over the pad of Markstrom.
From behind the goal-line, Mangiapane fed Dube on Allen's doorstep for the Flame to chip the puck over the goaltender's stick shaft at 6:06.
Notes: Elias Lindholm has five goals and four assists in his last seven games . . . Defenceman Erik Gustaffson made his Canadiens debut following his trade from Philadelphia . . . Montreal forward Jonathan Drouin was scratched from the lineup Friday with an illness not related to the coronavirus . . . Calgary is 9-11-0 since Sutter took over as Flames head coach, while Montreal is 12-11-4 since Ducharme replaced Claude Julien.