본관은 안동(安東). 자는 양경(亮卿). 김계현(金繼賢)의 증손으로, 할아버지는 김낙서(金洛瑞)이고, 아버지는 성천부사 김언(金琂)이며, 어머니는 이선립(李先立)의 딸이다.
아버지가 병자호란 때 적병과 싸우다가 순절하자 중림찰방(重林察訪)에 기용되어 관계에 나갔으나, 1681년(숙종 7) 헌납(獻納) 박태손(朴泰遜)으로부터 탐학하다는 탄핵을 받아 사판(仕版: 관리들의 명단)을 삭거당하였다.
그 뒤 다시 서용되었으며 1686년 전주판관(全州判官)으로 재임시 53세의 나이로 정시 문과에 병과로 급제하여 양사(兩司: 사헌부·사간원)에 들어갔다.
1694년 지평(持平)으로 재임시에 시관(試官)으로 영남지방을 다녀와서 백성의 고통을 가중시키는 궁방(宮房:왕과 선왕의 집안인 '궁실'과 왕실로 부터 분가한 왕자·공주의 종가인 '궁가'의 통칭)의 침탈상을 보고하고 그 구제책을 촉구한 바 있으며, 이듬해에도 군병(軍兵)의 기강확립과 궁방의 검약한 생활 등을 건의한 바 있다.
이후 여러 차례 승지에 발탁되었으며, 1698년 경상도관찰사로 재임시 도내를 순시하던 중 청송에서 죽었다.