scouter-project / zipkin-scouter

Zikpin Scouter UDP storage and other zipkin-scouter integrations.
Apache License 2.0
10 stars 4 forks source link

Zipkin Storage (w/Scouter) 사용 문의 #4

Open o1i0 opened 3 years ago

o1i0 commented 3 years ago

우선 Scouter 잘 사용 하고 있습니다.

최근 내부 시스템을 WebFlux 기반으로 바꾸면서 원하는대로 Scouter에 노출 되지 않아 해당 Zipkin 모듈을 사용하여 모니터링 하고자 합니다.

그런데 소스 중 의도와는 다르게 되어 있는 부분이 있어 문의 드립니다.

아래 라인은 objType을 정하여 XLog 뷰 처리시 묶을 처리 가능하게 한것으로 보이는데.. https://github.com/scouter-project/zipkin-scouter/blob/ca378ea2aeecf48b03975590fb89ebfcb6a0f62a/storage-scouter-udp/src/main/java/zipkin2/storage/scouter/ScouterConstants.java#L24-L31

Zipkin 사용 시 application 이름이 다르면 각기 다르게 objType이 처리되어 묶여서 볼 수가 없는 구조가 됩니다. 의도한 동작이 맞을까요? (z$, zipkin 등 prefix 가 다르게 되어 있는 이유도 궁금합니다.)

아래도 비슷한 내용인데, objName을 구하는 과정에서 ZIPKIN 을 무조건 붙게 되어 Client 상에서는 그룹화 되어 처리 되는 것으로 보입니다. 원하는 내용은 기존 javaagent 처리방식과 동일하게 Host 이름을 넣고 싶은데 무조건 ZIPKIN 으로 강제한 이유가 있을까요?

https://github.com/scouter-project/zipkin-scouter/blob/ca378ea2aeecf48b03975590fb89ebfcb6a0f62a/storage-scouter-udp/src/main/java/zipkin2/storage/scouter/ScouterConstants.java#L16-L22

끝으로 아래 부분은 serviceName을 구하는 부분인데 Client 타입만 처리되어 실제로 상세 내용을 봐야 호출 내용이 무엇인지 알수가 있게 되어 있습니다. https://github.com/scouter-project/zipkin-scouter/blob/ca378ea2aeecf48b03975590fb89ebfcb6a0f62a/storage-scouter-udp/src/main/java/zipkin2/storage/scouter/udp/net/DataProxy.java#L334

기존 javaagent 처리방식과 동일하게 serviceName을 표출 하고 싶은데 이것도 이유가 있는 부분인지 궁금합니다. (text1 등이 옵션에 있어 처리는 가능하나, 별다른 옵션 처리 없이도 기존과 동일하게 노출 되면 좋겠습니다.)

최종적으로 수정되고 Client에서 보여지는 방식은 아래와 같게 하고 싶습니다. 그리고 별도로 라이브러리를 수정해서 내부에 관리하기 보다는 Central Repository에서 제공 받고 싶은데요. 해당 프로젝트 지속적인 업데이트가 가능할지 여부도 알려주시면 감사하겠습니다.

image image image

gunlee01 commented 3 years ago

objType이 scouter에서 하나의 차트로 그룹화해서 보여주는 기본 단위입니다. 이런 이유로 scouter를 사용할때 단일 시스템이 아닌 경우 objType을 시스템명으로 변경해서 사용하게 됩니다. objType=MySalseSystem objType=MyStockSystem

zipkin의 application이 일반적으로는 이 단위로 사용될 수 있는 개념이라 이렇게 동작합니다만 몇개의 다른 application을 개념적으로 하나로 묶을수 있는 옵션으로 SCOUTER_SERVICE_MAPS_OJB_TYPE 이라는 설정이 들어가 있습니다.

z$가 붙는 것은 scouter에서 기본적으로 내장되고 있는 objType과 이름 충돌이 나는 경우 제대로 처리해 줄 수 없어서 붙게됩니다.

물론 이런 부분을 옵션 처리해서 모든 application이 zipkin이라는 동일 objType을 사용하거나 z$를 붙이지 않게할 수도 있을 것 같습니다.

objName에 hostname을 붙여주지 않는 부분은 hostname을 scouter에서 구하는 방식과 동일한 값이 전달되는지가 보장되지 않아서입니다. 아시다시피 zipkin은 다양한 개발 언어에서 사용가능하고 이를 전부 테스트하기가 어려워서 단순히 ZIPKIN/ 으로 시작되도록 적용되어 있습니다.

물론 이것도 필요에 따라 hostname 값으로 처리하는 것도 가능한 방법입니다.

다만 아직 scouter zipkin 라이브러리의 활용이 많지 않고 실무에 적용해본 경험이 적어 유지보수의 우선순위가 낮은 상황입니다.

실제 실무에서 사용하면서 개선하신 부분이 있으면 개선 부분을 Pull Request 해 주시면 반영을 적극적으로 검토해보겠습니다.