본관은 함종(咸從). 자는 익지(翼之). 호는 겸재(謙齋). 평창군수 어운해(魚雲海)의 증손으로, 할아버지는 교관 어몽린(魚夢獜)이고, 아버지는 수운판관 어한명(魚漢明)이다. 어머니는 안동 권씨(安東權氏)로, 참봉 권숙지(權叔之)의 딸이다.
1652년(효종 3) 사마시에 합격하고, 1658년 금오랑(金吾郎)이 되었다. 그 뒤 내자시직장(內資寺直長)을 거쳐 호조좌랑으로 재직 중, 1662년(현종 3) 정시 문과에 을과로 급제해 병조좌랑·정랑, 함경도도사, 성균관직강(成均館直講) 등을 역임하였다. 1665년 지평(持平)으로 있을 때, 우의정 허적(許積)을 논핵하다 파직당한 이무(李堥)를 구하려다 삭직되었다.
영의정 정태화(鄭太和), 좌의정 홍명하(洪命夏) 등의 대신과 간관의 변호로 정언(正言)에 기용되어, 남인 윤선도(尹善道)를 감형해 이배시키려는 왕명의 취소를 청하였다. 1672년 장령(掌令)이 되고 이어서 헌납(獻納)·사간을 거쳐, 1674년에는 보덕(輔德)이 되었다. 그러나 효종비 인선왕후(仁宣王后)의 복제 문제로 윤휴(尹鑴) 등 남인을 공격하다 동래부사로 좌천되었다.
이 때 임진왜란 당시 동래성 싸움에서 창의순절(倡義殉節)한 김정단(金廷端)·송계남(宋繼男) 등 24인의 후손 가운데, 천역(賤役)에 종사하는 자는 역을 면제시키고 정병(正兵)은 군관으로, 유학(幼學)·교생(校生)은 본도에서 재능을 시험해 기용할 것을 요청해 실시하게 하였다.
1678년(숙종 4) 동래부사로 재직할 때 왜관(倭館)을 옮기는 비용을 낭비했다 하여 파직되고, 고양에 유배되었다. 곧 풀려나 이듬해 여주목사, 1681년 충청도관찰사가 되었다. 그 뒤 호조·병조·예조참의, 좌승지를 거쳐 1683년 강원도관찰사, 이듬해 승지를 역임하였다. 좌찬성에 추증되었다.