The 30-year-old right-hander had asked for $3.95 million and had been offered $2.5 million when Baltimore exchanged proposed arbitration salaries with him last month. He can earn $25,000 in performance bonuses as part of Tuesday's agreement: $12,500 each for 160 and 185 innings.
Gonzalez was 10-9 with a 3.23 ERA for the AL East champions last season, when he earned $529,000. He was eligible for arbitration for the first time.
Two Orioles remain in arbitration: closer Zach Britton and outfielder Alejandro de Aza.