Brach gets a $1.65 million salary this year and could earn $1.35 million in bonuses for days on the active major league roster: $350,000 for one, and $500,000 each for 120 and 150.
Chicago has a $5 million team option for 2020 under the deal announced Monday. If the Cubs decline, Brach has a $1.35 million player option with a $100,000 buyout.
The right-hander had 12 saves and a 3.59 ERA in 69 games for Baltimore and Atlanta last season. He posted a 1.52 ERA over 27 appearances following a trade to the Braves.
Brach debuted with San Diego in 2011 and made an All-Star team with Baltimore in 2016. He has a career 3.08 ERA and 33 saves. The Cubs needed bullpen help with closer Brandon Morrow likely missing the start of the season while recovering from elbow surgery.