The visitors made a perfect start when Kai Havertz flicked on Maximilian Mittelstadt's corner in the third minute, with a deflection off Srdjan Babic sending the ball into the Serbian net for an own goal.
Germany doubled their advantage in the 13th minute through Florian Wirtz. Serbia goalkeeper Vanja Milinkovic-Savic saved Havertz's initial effort, but Wirtz reacted quickest to the rebound, lifting the ball over the goalkeeper before forcing it across the line.
Serbia managed to reach half-time without conceding again, but Germany extended their lead shortly after the restart. Debutant Brajan Gruda produced an impressive solo run from his own half before beating his opponent and firing a left-footed shot into the bottom corner.
Babic made amends for his earlier own goal six minutes later, finishing from close range after Marc-Andre ter Stegen had parried Stefan Gudelj's header. Serbia briefly threatened a comeback, with substitute Aleksandar Mitrovic testing the Germany goalkeeper soon after coming on.
However, Serbia's hopes suffered another blow when Vanja Dragojevic was shown a straight red card following a VAR review for a dangerous challenge on Joshua Kimmich. Andrija Zivkovic was also sent off for dissent, leaving the hosts to finish the match with nine players.
Germany controlled the closing stages to secure an important victory, keeping their hopes of reaching the play-offs alive. Jürgen Klopp's side now have Monday's meeting with the Netherlands in their sights, knowing a victory could be enough to secure progression. Serbia, meanwhile, will compete in League B in the next Nations League campaign.
Klopp was pleased with his team's performance but stressed that there was still room for improvement. "The team put in a fantastic performance. We need to get used to the fact that we can be really good," he said. "Our patterns of play looked excellent, we dominated possession and the intensity was top class. The aim was to put in a convincing performance, and that's exactly what we did."