A late, deflected strike from debutant Nico Schulz secured Germany a first win since early June. The hosts never fully convinced in an open game where both sides missed plenty of chances.
Germany 2-1 Peru
(Brandt 25', Schulz 84' — Advincula 22')
In the end they got the job done, just as they always used to do. But Germany made heavy weather of overcoming a vibrant Peru side who matched their more illustrious opponents for several periods of the match.
Marco Reus and Matthias Ginter both spurned gilt-edged chances to give the hosts an early lead before the visitors seized their moment. Some smart interplay between former Schalke man Jefferson Farfan and Christian Cueva played Luis Advincula in on the overlap. The full back's low shot was well struck but Marc-André ter Stegen should perhaps have stopped it at his near post.
The South Americans had barely stopped celebrating when their lead was erased. As they did several times in the match, Peru overplayed at the back and Toni Kroos was able to stab a ball through to Julian Brandt, who lifted it over the keeper from an acute angle.
The sides then traded misses, with Farfan and Timo Werner among several culprits, before Schulz's critical intervention.
With the clock running down, Peru were again caught out. Schulz, playing on his home ground, hit a speculative effort that took a slight deflection and squeezed under the body of Pedro Gallese in the Peru goal. It wasn't the prettiest of winners but neither the left back, nor Germany, will care too much about that right now.
Germany has two important Nations League dates coming in October, traveling to the Netherlands and France as they try to make the competition's final four.
As it happened
90+3 - Peru are having all of the ball in injury time and eventually Pena has a pop, but it flies harmlessly over.
90' - There will be four minutes of injury time.
89' - Havertz gives away a free kick, perhaps unluckily. Trauco lifts it in and Rüdiger flicks behind for a corner, which is wasted.
87' - Werner almost seals it. He races on to a deflected through ball, goes round the keeper but a Gallese just about gets back deflect it in to the side netting. Kai Havertz now makes his debut, coming on for Werner.
85' - Oh Peru, what have you done? Again they fail to clear their lines and a loose ball falls to Schulz. His strike isn't partiuclarly good but it takes a deflection before dribbling under the body of Gallese. A debut goal for the Hoffenheim man.
84' GOAL! Germany 2-1 (Schulz)
84' - Kehrer powers down the right again and drives in a low cross which Araujo is forced to clear behind. Germany work the corner short and eventually find Draxler, who has just come back on. But his shot flies over. Müller is on though, Gündogan the man to depart.
82' - Kimmich picks out the run of Kehrer down the right. He does wellto keep it in and stand a cross up but it's cleared.
80' - It could be for Draxler The PSG man looks in some pain after being tackled by Advincula.
79' - Müller is warming up on the sidelines. He could be the next cab off the rank.
76' - Another change for Peru as Calcaterra replaces Yotun. News from the Nations League too where Ryan Babel briefly levelled for the Netherlands against France before Olivier Giroud put the world champions back ahead. Those two are the other teams in Germany's group.
73' - Advincula is the first man to go in the book after preventing Kroos taking a quick free kick. When he eventuall does take it, Gallese gets himself in trouble and the ball falls to Petersen. It's a difficult volley, the ball is just behind him, and he dribbles it wide.
72' - This is not a flatterig scoreline for Peru, they've been excellent tonight where Germany have been a little ragged around the edges. The hosts make another change, Kehrer makes his debut in place of Ginter.
70' - Brandt overhits a flicked pass down on the right after being picked out by Kroos with another wonderful crossfield ball. And that's the end of that for Brandt, who is replaced by Nils Petersen.
67' - Peru are forced in to a first change as Flores goes off after appearing to tweak something while mis-hitting a shot. He's replaced by18-year-old Marcos Lopez, who is making his debut.
63' - Schulz tries a couple of runs down the left but nothing comes of them. Could he be number nine on this list?
60' - Ruidiaz has a crack from range after Rüdiger lost possession. But it's a simple save for ter Stegen.
58' - Another bad miss, this time from Farfan. Advincula did brilliantly to pick him out and Farfan's first touch was good, leaving him one-on-one, but he blazed over.
55' - Germany counter at lightning speed. A clearance lands at the feet of Brandt, who dissects the retreating defenders to find Werner charging through the middle. He tries to flick it over the keeper but instead puts it over the bar. Then Peru take their turn and Yotun's shot is deflected behind. Frantic stuff.
54' - Farfan gets his head to a Cueva corner under very little pressure and ter Stegen is forced in to a smart save low down before recovering to tidy up the rebound.
52' - Kimmich seeks out Draxler with a ball over the top but it's just slightly overhit. And Draxler was flagged offside anyway.
48' - Big chance for Peru. Trauco drives in an excellent low ball from the left but Ruidiaz can't keep his effort down from close range. Kimmich is receiving treatement after being caught on the ankle in the build up but it doesn't look serious.
47' - Germany work the ball nicely around the box until Kroos opts to chip out out to the right and the flag goes up for offisde
46' - We're back underway and Germany have made a double change, with Draxler and Rüdiger replacing Reus and Boateng.
HALF TIME - That's it for the first half. And it's been an entertaining one. Peru have caused Germany a few headaches, with their direct running a major contributor. The visitors' opener was well worked but ter-Stegen really shouldn't have been beaten so easily at the front post while Brandt took his equalizer very well. Reus and Ginter can't say the same after both missed excellent chances.
45' - Werner is shoved to the ground down on the right and Germany have a free kick in a decent area. Kroos lifts it towards Süle, who sticks out a leg but can't get much on it and Peru clear.
43' - Farfan drives down the left. He's forced to wait for support and Peru eventually win a corner, which comes to nothing. Decent little spell from the visitors though.
41' - Peru make an increasingly rare foray in to enemy territory. Yotun has it 25 yards out, weighs his options and decides to have a pop. It's well struck but straight at ter-Stegen.
38' - Some lovely interplay between Reus, Brandt and Gündogan leaves the latter with a shot on goal. He's under pressure and can only toe poke at Gallese, who pushes it away. That's Germany's best move of the match.
35' - Another excellent through ball gets Werner in behind again. This one is trickier and his snap shot is pushed away by Gallese in the Peruvian goal.
34' - Kimmich splits the defence and Werner rounds the keeper before putting the ball in the net. But he was correctly flagged offside.
31' - Advincula, fired up by his goal, takes on Schulz down the right. The Peruvian looks the quicker but Schulz dives in and the ball is scrambled away. He didn't get a huge amount of the ball there Schulz, it was a dangerous tackle to make in the box.
30' - The visitors are determined to play out from the back, which is admirable but very dangerous. They just about get away with it this time but they've been caught out twice already.
26' - Peru again give the ball away needlessly at the back, twice this time. Kroos is initially tackled but it bounces fortunately and he stabs a ball through to Brandt. He's still got a fair bit to do but dinks it over the advancing keeper from a fairly narrow angle.
25' GOAL! Germany 1-1 (Brandt)
22' - That's a lovely goal from Peru. Cueva and Farfan burst down the middle and the latter waits for Advincula to overlap. The right back obliges and slams it low past ter-Stegen at the front post. As well worked as that was, the Germany keeper probably shouldn't be beaten from that angle.
22' - GOAL! Peru 1-0 (Advincula)
20' - Another shocking miss from Germany, this time form Marco Reus. Peru dawdled at the back and allowed Werner to steal possession, he squared to Reus, taking the keeper out in the equation, but Reus scuffed it hopelessly wide.
17' - Kroos pings a brilliant 70 yard crossfield ball to Brandt but the Leverkusen winger can't quite bring it down with his chest and the danger is averted. France have taken the lead against the Netherlands in Germany's Nations League group.
12' - A spell of more controlled possession now for the hosts. They work the ball across the field a few times and eventually emerge with a corner, then another one. From the second, Ginter has a free header in the middle of the goal eight yards out but heads it straight at the keeper. Shocking marking from the Peruvians and Ginter really, really should have put his side one up.
9' - Schulz gallops down the left but his cross is blocked. This is a quick opening from both sides.
6’ – Peru almost get through with some nice combination play but Boateng snuffs it out. At the other end, Werner almost, but not quite, wriggles free.
4' - A bright start here and Gündogan is almost in for Germany but the PEruvian keeper is out just in time to smother it.
1' - And we're off. Germany get us underway in Sinsheim.
20:38 - It’ll be interesting to see how Reus and Werner line up tonight. The Dortmund man looked a bit lost up front on Thursday while Werner was probably Germany’s most dangerous player from the left wing.
20:30 - Hello, and welcome to Germany's second game of the international break. It must be admitted that this looks a slightly less attractive fixture than the meeting with the world champions on Thursday.
But while Peru don't have the standing of France, Germany may look to play a little more expansively against tonight's opponents.
Joachim Löw resists the temptation to change things too much though, opting for a pretty senior side. Marc-Andre ter Stegen replaces Manuel Neuer in goal, Nico Schulz makes his debut in place of Antonio Rüdiger wile Niklas Süle and Ilkay Gündogan also start. Thilo Kehrer and Kai Havertz will hope to make their international bows from the bench. Here are the teams.