본관은 예안(禮安). 자는 희옥(希玉), 호는 백암(柏巖). 김만칭(金萬秤)의 증손으로, 할아버지는 증 좌승지 김우(金佑)이고, 아버지는 진사 김사명(金士明)이며, 백부인 형조원외랑 김사문(金士文)에게 입양되었다. 이황(李滉)의 문인이다.
1576년(선조 9) 식년 문과에 병과로 급제하고, 1578년 검열·전적을 거쳐서 예조원외랑·정언이 되었다. 1580년 전적 겸 서학교수가 되고 홍문록(弘文錄)에 등록되었고, 이듬해 부수찬·지평·직강 등이 되었다.
1584년 영월군수로 갔을 때 신임 군수마다 죽는 변이 있었다. 이에 노산군(魯山君: 단종)의 묘를 배알한 후 제청(祭廳)·재실(齋室)·찬청(饌廳)을 묘 옆에 짓고, 처음으로 ‘노산군’이라는 호칭을 신주(神主)에 써서 부인 송씨(宋氏)의 신위와 함께 모셔 변을 막았다.
3년 후에 돌아와 선조로부터 많은 치하를 받고 교리에 서용되었으며, 1590년 집의·사간·검열·사인·사성·사복시정이 되었다. 임진왜란 때에는 형조참의를 거쳐 안동부사가 되었다가 경상도 안집사(安集使)로 영남에 가서, 충성스럽고 의기있는 선비들에게 국가의 뜻을 알리고, 왜적을 토벌하도록 장려하고 백성들을 잘 다스렸다.
이듬해 경상우도관찰사가 되어서는 전라좌·우도의 곡식을 운반해 기근이 든 백성들을 구제하고자 하였다. 이어 도승지·대사간·한성부우윤·대사성을 거쳐, 1594년 동지의금부사·이조참판·부제학 등을 역임하였다. 이듬해 대사헌이 되어 「시무 16조」를 상소했는데, 모두 치안에 좋은 대책이라는 평을 들었다.
1599년 명나라 장수를 접반하고 예조참판에서 충청도관찰사로 나갔다. 1612년 하절사(賀節使)로 명나라에 가서 명나라 군사가 조선에 남아 있는 것처럼 꾸며 일본의 재침략을 막아 달라는 청을 올렸다. 그리고 명나라로부터 일본에게 재침을 허락하지 않겠다는 칙서를 보내게 하고 돌아왔다.
곧, 대사성이 되고 안동부사로 나가 범람하는 낙동강의 재해를 막기 위해 제방을 수축해 후세에까지 칭송을 들었다. 그러나 김직재(金直哉)의 무옥(誣獄)에 연루되고 또 앞서 광해군의 생모인 공빈 김씨(恭嬪金氏) 별묘(別廟)의 의물(儀物)을 종묘 의물과 똑같게 하는 것에 반대해 강릉으로 유배가게 되었는데, 여러 대신들의 변호로 풀려났다.
영천의 구산서원(龜山書院)에 제향되었고 저서로는 『백암문집(栢巖文集)』이 있다. 이조판서에 추증되었고, 시호는 민절(敏節)이다.