onlybooks / kafka2

실전 카프카 개발부터 운영까지
98 stars 56 forks source link

7장 카프카 운영과 모니터링, docker를 활용한 프로메테우스와 그라파나 설치 관련 #10

Open chanchancheers opened 1 year ago

chanchancheers commented 1 year ago

안녕하세요, '실전 카프카 - 개발에서 운영까지'를 읽으며 실습하다가 제 수준으로는 원인을 찾을 수 없는 오류를 만나서 질문드립니다.

7장 카프카 운영과 모니터링에 관한 실습을 진행하며 프로메테우스와 그라파나를 설치하는 부분에서, peter-ansible01.foo.bar:3000 사이트에 접속할 수 없습니다. docker ps 명령어로 확인한 결과 프로메테우스와 그라파나 모두 ports가 공백으로 나오구요.

과정은 이렇습니다.

sudo docker run -d --network host -p 9090:9090 -v .../.../prometheus.yml:.../.../promethuse.yml --name prometheus prom/prometheus

sudo docker run -d --network host -p 3000:3000 --name grafana grafana/grafana:7.3.7

위 두 명령어로 프로메테우스와 그라파나 컨테이너를 설치했습니다.

이후 docker ps 명령어를 입력하면 프로메테우스와 그라파나 모두 PORTS가 공백으로 나왔는데, Up 상태라 되겠거니 하고 넘어갔는데요.

jmx-exporter, node-exporter 모두 카프카 클러스터에 설치 후 그라파나 웹사이트를 사용하고자 하는데

peter-ansible01.foo.bar:3000 사이트에 접속이 안됩니다.

이를 해결하기 위해 제가 알아본 것들은 다음과 같습니다.

docker version : 20.10.23이고, 그 외의 사안들은 교재와 똑같이 진행했습니다.

  1. ports가 제대로 뜨지 않는 경우를 확인하기 위해서 검색해보니, --network host 명령어는 호스트 서버의 포트를 사용하기 때문에 -p 포트번호:포트번호와는 어울리지 않는다고 하더라구요. host의 포트번호를 사용하면서 특정 포트번호를 사용한다는 옵션이 같이 붙는 게 모순이라는 의견을 봤습니다. 따라서 --network host 옵션을 없애거나, -p 3000:3000 옵션을 없애서 다시 컨테이너를 가동하기도 해봤지만 모두 port 번호가 공백으로 나타났습니다.

(혹시 --network host와 -p 옵션을 같이 사용하신 이유가 있다면 뭔지 여쭤봐도 될까요?)

  1. 카프카 환경을 구성하는 66페이지에서 DNS 설정을 잘못했나 싶어서 모든 EC2 Instance 서버에서 hosts 파일을 확인해봤는데 배포 서버는 peter-ansible01.foo.bar 로 오타는 없었습니다.

도커를 재시작하고, 서버를 재시작하고, 컨테이너를 재시작/ 재설치해봤으나 여전히 프로메테우스와 그라파나가 구동중일 때 peter-ansible01.foo.bar:3000 페이지로는 접근이 불가능합니다.

방화벽도 꺼져 있는 상태구요.

다만, ansible01 서버의 퍼블릭 IP 주소에서 3000 포트로 접속하면 grafana 웹사이트가 뜹니다만, 이 경우에는 데이터 소스로 prometheus를 어떠한 방법으로도 등록할 수 없었습니다(http://peter-ansible01.foo.bar:9090/ , http://{배포서버의 퍼블릭IP}:9090/, http://{배포 서버의 프라이빗IP}:9090/ 등).

7장 전까지 CLI를 이용하는 실습은 모두 구현할 수 있었습니다.

아마존 EC2 Instance에서 서버 구동과 Docker를 이 책 이전에는 거의 다뤄본 적이 없었음을 감안할 때, 위와 같은 문제를 해결할 수 있으려면 어떤 것을 검색하거나 공부하는 것이 좋은지 도움을 주셨으면 좋겠습니다. 3일 정도 진도를 못나가고 있습니다.....

peterko5236 commented 1 year ago

안녕하세요 독자님, 원하시는대로 실습이 진행되지 않아 답답하셨을 것 같습니다. 실습이 용이하도록 도커를 이용하였으나, 처음 접하시는 분에게는 다소 어려울 수 있다고 생각됩니다. 먼저 궁금하신 부분에 대해 말씀드리자면, 도커는 bridge, host, overlay 등의 네트워크 모드를 사용할 수 있는데, 저의 경우에는 host 네트워크를 강제로 사용하도록 지정하였습니다. 가능한 책에서 안내하고 있는 실습 과정 그대로 따라 하시는 것을 추천드리며, 입력 오류 방지를 위해 명령어를 복붙할 수 있도록 제공하고 있으니 참고하시기 바랍니다. https://github.com/onlybooks/kafka2/blob/main/chapter7/7_commands.txt

문의 주신 PORTS는 빈 값으로 나오는 것이 맞습니다. 아래 내용은 제가 방금 검증하면서 docker ps 명령어를 실행한 결과입니다. $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab63ea08036b grafana/grafana:7.3.7 "/run.sh" 3 minutes ago Up 3 minutes grafana 3ce3637d0408 prom/prometheus "/bin/prometheus --c…" 7 minutes ago Up 7 minutes prometheus

말씀주신 내용을 보면, 정상적으로 도커가 실행되고 있는 것 같습니다. 다만 연결이 안되는 문제는 다른 문제로 보이는데 아래의 방법으로 어느 부분이 문제인지 확인해볼 수 있습니다.

  1. 도커 정상 실행 유무 다음 명령어를 이용하여 포트가 정상적으로 실행되어 있는지 확인(9090, 3000 두개의 포트가 LISTEN 상태인지 확인) $ sudo netstat -ntlp tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN - tcp6 0 0 :::9090 ::: LISTEN - tcp6 0 0 :::9100 ::: LISTEN - tcp6 0 0 :::22 ::: LISTEN - tcp6 0 0 :::3000 :::* LISTEN -

  2. 원격지의 다른 서버에서 연결 확인 원격지의 다른 서버에 접속하신 후 아래 명령어 실행 $ telnet 192.168.10.10 9090 192.168.10.10는 프로메테우스가 설치된 서버의 IP주소, 9090은 프로메테우스 사용 포트 정상적으로 연결된다면 아래와 같은 내용이 출력 Trying 192.168.10.10... Connected to 192.168.10.10. Escape character is '^]'.

만약 연결이 안된다면, 아래와 같은 내용이 출력 Trying 192.168.10.10... telnet: connect to address 192.168.10.10: Connection refused

3000번 포트로도 시도 $ telnet 192.168.10.10 3000

위의 방법 2가지로 모두 정상 확인이 된다면, grafana에서 프로메테우스연결이 잘 될 것으로 예상합니다. 프로메테우스 입력 주소는 http://127.0.0.1:9090, http://192.168.10.10:9090등 시도 해보시기 바랍니다.(제가 방금 다시 한번 테스트 했는데, 잘 동작했습니다.^^) 천천히 다시 한번 해보시고, 안되시면 댓글 남겨주시기 바랍니다. 등록하신 /etc/hosts의 내용도 같이 공유해주시면, 더 정확하게 안내해드리겠습니다. 만약 또 잘 안되신다면, 메일주소도 남겨주세요! 감사합니다.

chanchancheers commented 1 year ago

저로선 더이상 방법이 없어서 답변 여부와 상관 없이 질문만 남기고 이 파트는 넘어갈 생각이었는데, 이렇게 자세하고 친절하고 빠르게 답변 주셔서 정말 감사합니다. 문제상황을 파악하시느라 모든 부분을 다시 재확인하셨을 수고에 특히 감사드립니다.

신경써주신 것 때문에 어느 정도?는 해결이 된 것 같습니다. host 이름으로(peter-ansible01.foo.bar:3000)으로는 그라파나 서버 접속이 여전히 불가능하지만, host 서버의 공유 IP 주소로는 그라파나 접속이 가능하고, 이 때 프로메테우스 서버는 호스트네임(peter-ansible01.foo.bar:9090)으로 데이터 소스에 추가가 가능합니다.

아래는 말씀해주신 조치사항 수행 결과입니다.

  1. netstat -ntlp 수행 결과 : 3000 및 9090포트 모두 정상 작동중

    image
  2. 원격지의 다른 서버에서 telnet {프로메테우스와 그라파나가 설치된 서버의 프라이빗 주소} {각 포트번호} 수행 결과 : 연결됨

    image

배포 서버와 카프카, 주키퍼 서버에 저장된 /etc/hosts 내용도 첨부합니다.

cat /etc/hosts
172.31.14.13 peter-ansible01.foo.bar peter-ansible01
172.31.4.80 peter-kafka01.foo.bar peter-kafka01
172.31.5.6 peter-kafka02.foo.bar peter-kafka02
172.31.12.128 peter-kafka03.foo.bar peter-kafka03
172.31.1.90 peter-zk01.foo.bar peter-zk01
172.31.4.87 peter-zk02.foo.bar peter-zk02
172.31.5.111 peter-zk03.foo.bar peter-zk03

IP는 각 EC2 instance 서버의 프라이빗 주소입니다.

** 원래 /etc/hosts 파일에 있던 내용 첫부분엔 다음과 같은 내용이 포함되어 있었는데, 이 상태일 때에도 질문 올리기 전 모든 조치를 취했을 때 해결이 안되어서 현재는 지운 상태입니다.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6

도커 컨테이너 실행 상태입니다.

image

그리고 그라파나 접속 페이지.. 입니다.

image

그라파나가 설치된 배포 서버의 공유 IP와 그라파나 포트로 접속한 화면입니다. 이건 되네요.

image

공유 IP로 접속한 그라파나 서버에서는 http://peter-ansible01.foo.bar:9090으로도 프로메테우스의 데이터 소스를 추가할 수 있네요. 이건 어제와 다른 결과입니다(이유는 모르겠습니다 ㅋㅋㅋ)

image

어찌 됐건, 그라파나 서버에 접속도 되고 프로메테우스도 추가가 되니까 모니터링 부분을 마무리짓는데는 큰 문제가 없을 것으로 보입니다. 문제상황의 정확한 이유는 계속 (뭐든) 경험하다 보면 어떻게든 알게 되리라 생각합니다.

다시 한 번 시간 내주셔서 감사합니다. 책 잘보고 있습니다!

peterko5236 commented 1 year ago

작성해주신 내용으로 보면, 책을 잘 따라하신 것 같아서.. 정상동작 하지 않았던 이유가 저도 궁금하네요 ^^;; 프로메테우스 주소에 http://172.31.14.13:9090으로 입력하면, 아마도 잘 동작했을 것으로 추측합니다. 결과적으로, 실습을 따라하시는데 문제가 없다고 하셔서 다행입니다. 혹시라도 또 다른 문제가 발생한다면, 언제든지 질문 남겨주세요! 열심히 공부하시고, 제 책 구매해주셔서 감사합니다!