아버지는 김의원(金義元)이다. 과거에 급제한 뒤 1163년에는 급사중(給事中)으로 서북면병마부사(西北面兵馬副使)가 되었다. 당시 압록강 하류의 섬에는 인주(麟州)와 정주(靜州)의 주민들이 드나들며 농사를 짓고, 여진인들도 섞여 살았다.
공을 세우려고 섬을 공격하여 여진인들의 움막을 불사르고 여진인을 내몬 뒤 둔전(屯田)을 설치하며 군대를 주둔시켜 지켰다. 이로 인하여 금나라의 침략을 받아 1165년에는 정주별장 원상(元尙) 등이 금나라에 잡혀가기도 하였으며 금나라로부터 항의를 받기도 하여 1167년 둔전을 혁파하고 수비군도 철수하였다.
1168년 동지공거(同知貢擧)로서 지공거 김영윤(金永胤)과 함께 장영재(張令才) 등 진사 27인과 명경 4인을 뽑았다. 여러 벼슬을 거쳐 간의대부(諫議大夫)·비서감(秘書監)·상서우승(尙書右丞)에 올랐다.
1170년 정중부의 난이 일어나자, 평소에 총애하여 구사(驅使)로부터 대교(隊校)로 보충시켜주었던 박광승(朴光升)의 밀고로 살해되었다.