본문 바로가기
728x90
반응형

분류 전체보기163

[Kafka 시리즈] #2 Apache Kafka 공식 튜토리얼 따라하기 with KRaft 튜토리얼 따라하는게 국룰이죠 Apache Kafka에서도 쉽게 사용해볼 수 있는 튜토리얼을 제공해준다. https://kafka.apache.org/quickstart Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 튜토리얼을 따라하면 머리 속에 둥둥 떠나니던 개념들과 용어들을 금방 익힐 수 있어서 좋다 👍 그러니 꼭 튜토리얼 해보시길. 1. 카프카 다운로드 https://www.apache.org/dyn/closer.cgi?path=/kafka/3.6.0/kafka_2.13-3.6.0.tgz 2023. 10. 12.
[Kafka 시리즈] #1 Apache Kafka라고 들어보셨나요? 전 진짜 들어만 봤어요 (+ Zookeeper vs KRaft) Apache Kafka 그거 대기업에서 다 쓰던데 카프카라는 이름은 개발자를 준비하면서 많이 들어온 단어 중 하나였다. IT 대기업을 대표하는 네이버, 카카오 컨퍼런스에서 심심치 않게 나왔고 배민, 토스에서도 봤던 기억이 있었다. 당시 카프카를 접한 나는 MSA랑 같은 느낌을 받았다. 알지만 개인 프로젝트에서 할 수 없는 미지의 영역. MSA도 회사에 들어와서 할 수 있었던 나는 현재 카프카까지 담당하는 처지가 됐다 😇 (좋은데... 좋은거 맞지? 여러분들은 백엔드 많은 곳으로 가십쇼...) 그래서 Apache Kafka가 뭔데요? 한줄로 말하면 대규모 데이터를 동시에 이동시킬 쓰는 분산형 데이터 스트리밍 플랫폼이다. 예? 뭔소리인지 모르겠다면 당신은 제 글을 계속 읽은 기회를 얻었습니다(?) 바로 이해.. 2023. 10. 12.
사용자 권한 설정(=접근 제어)에도 전략이 있다 - ACL vs RBAC vs ABAC 권한 설정 그거 어떻게 하는건데 드디어 회사 서비스에 사용자들을 받을 준비를 하게 되었다. 입사하고 1년 6개월은 이미 지났는데 인제서야 유저 관리를 하다니 🙃 그만큼 큰 서비스를 개발하고 있다고 생각한다. 유저가 서비스에 추가되다 보니 새롭게 떠오른 이슈가 있었다. 그건 바로 사용자 권한 설정! 개발자들에게 가장 익숙한 Github로 예시를 들자면 프로젝트를 같이 할 멤버를 추가해 권한을 주는것이다. 위 캡쳐를 보면 알겠지만 프로젝트를 먼저 생성한 사람은 Owner로 되어 있다. Owner의 경우 아래와 같은 권한이 생긴다. 1. 프로젝트 설정 변경 2. 프로젝트 접근 권한 관리 3. 코드 관리(푸시, 머지 등) 4. 이슈 및 프로젝트 관리 . . . 이처럼 Github에서는 Owner는 최상위 권한을.. 2023. 10. 4.
MSA 서비스 시리즈 1탄 : 서버간 오류 어떻게 해야할까 🤔 MSA 알고 이 글을 읽는거겠죠..? 아주 간단하게 설명하면 여러개의 컴퓨터를 사용하는거다. 예를 들어 네이버를 뇌피셜로 설명해보자. 우리가 자주 사용하는 검색창은 A 컴퓨터에서, 페이는 B 컴퓨터에서, 메일은 C 컴퓨터에서 실행된다. 컴퓨터의 수는 무수히 많을 수 있다. (사스가 네이버라면 어쩌면 세자리를 수일수도 😙) 컴퓨터는 무슨 기준으로 나누나요?! 라고 물어볼 수도 있다. 현재 1년 6개월 차 밖에 되지 않은 햇병아리 백엔드 개발가인 내가 감히 생각해보면... 그건 회사마다 이끄는 사람마다 다르다. 실은 MSA를 하냐 아니면 Monolithic를 하냐부터 생각도 말도 많아진다. 그래도 진짜 그래도 나만의 서비스 선택 기준을 말하자면 아래와 같다. 1. 구상한 서비스가 작다 -> 3번으로 이동 2.. 2023. 9. 15.
Error response from daemon: failed to create task for container: failed to initialize logging driver: dial tcp [::1]:24224: connect: connection refused 그만 도망치자 로그를 만지니 별별 오류를 다 만나고 있는 요즘... 사실 지금까지 미루고 있었던 오류가 있었다. Error response from daemon: failed to create task for container: failed to initialize logging driver: dial tcp [::1]:24224: connect: connection refused docker-compose로 fluentd와 다른 컨테이너들을 함께 키면 fluentd가 로깅하는 컨테이너들만 켜지지 않는 상황이다. 오류 코드를 보면 현재 fluentd가 실행되지 않았다면서 멈춘 것이다. docker 데스크탑을 보면 fluentd는 켜져있다. 그런데 저 주황색으로 된 로깅이 필요한 컨테이너들은 Created.. 2023. 9. 1.
fluentd가 windows에서 안된다면? docker volume 권한 오류 정말 극혐한다 windows 사용자 로그를 온디멘드 환경(=자체구축)에선 볼륨을 이용해 로그 파일을 읽거나 삭제하고 있다. 나의 경우 아이맥을 사용하고 있는데 분명 잘 되었던 fleutnd가 프론트엔드 개발자 분 컴퓨터에 안된다는 말을 듣고 가보니 정말 로그 파일이 생성되지 않았다 😱 황급히 옆 자리에 앉으신 다른 분 자리에서 해보니 거긴 또 됐다. 차이점은 프론트엔드 개발자 분 컴퓨터 환경은 윈도우였고 옆 자리 분은 나와 같은 맥이었다. 다른 윈도우 환경에서 해보니 역시나 되지 않았다. 이번 이슈의 원인이 윈도우로 판명된 순간이었다. windows에선 volume 권한 오류가 있다고? 윈도우 환경에서만 그러는거 오케이 근데 원인은 뭘까 하고 fluentd 로그를 뒤지니 failed to flush th.. 2023. 8. 31.
Fluentd를 이용해 로그 내용에 따라 동적으로 파일명 바꾸기 with.rewrite_tag_filter 플러그인 동적으로 파일명으로 바꾸라고요? 현재 우리 회사 서비스에선 시스템 로그와 사용자 로그 두개를 생성, 관리를 해야한다. 시스템 로그와 우리들이 필요하다고 하지만 사용자 로그의 경우 우리 회사 서비스를 사용하는 사용자들에게 제공할거라 고민이 많았다. 가장 큰 고민은 그 많은 로그를 사용자 id를 따라서 다르게 보여주는 거였다. 그때 나온 의견은 사용자 id가 파일명이 해결할 수 있다는 거였다. 흐음 일리가 있어서 바로 fluentd의 파일명으로 동적으로 바꾸기를 시작했다. 아래는 그에 따른 개발 일대기다. 첫번째 시도 - 태그로 해결해보자 우선 다른 플러그인을 사용하기 전에 기본적인 fluentd로 해결할 수 있나 고민해봤다 🤔 그때 든 생각은 javascript의 템플릿 리터럴이다. 대체로 백틱에 달러를 .. 2023. 8. 5.
Unknown filter plugin 'rewrite_tag_filter'. Run 'gem search -rd fluent-plugin' to find plugins 해결하기 현재 원하는대로 로그를 뽑던 중 동적으로 이름을 로그 파일 제목을 바꾸면 좋겠다고 생각해 개발하고 있었다. 태그를 이용하면 된다는 것을 알고 fluentd의 rewrite_tag_filter 플러그인을 사용하고자 했다. 공식문서에 있어 fluentd 이미지에 내저되어져 있는 줄 알았는데 없었다. k8s에서는 Docker와 달리 이미지를 가져오는 것이 로컬이 아닌 Docker Hub와 같은 레지스트리이기 때문에 테스트용으로 하나 올려뒀다. FROM fluent/fluentd:v1.16.2-1.0 USER root RUN gem install fluent-plugin-rewrite-tag-filter USER fluent 아주 간단해서 공용으로 해두었는데 혹시 필요한 사람은 참고하길. 아무튼 k8s 매니페스.. 2023. 8. 3.
[k8s] DaemonSet으로 fluentd 구축하기 (configMap, pattern not matched) 어서와 DaemonSet은 처음이지? 회사 서비스 로그 시스템을 구축하는데 벌써 한달이 지나가고 있다. (물론 로그 시스템만 한거 아님! 메트릭 수집도 해야했고 다른 서비스도 개발해야했으니 한달 허투로 쓴거 아님!) 개발은 Docker로만 운영은 k8s로 하기 때문에 로그를 위한 fluentd도 Docker에서 벗어나 k8s에 도입하게 되었다. 근데 k8s의 새로운 kind를 만나게 되었다. 그게 바로 DaemonSet! k8s 공식 문서에서 확인한 DaemonSet의 설명이다. 한마디로 정리하면 알아서 모든 노드에 실행하게 해주는 아이다. DaemonSet을 사용하지 않을 경우 fleuntd의 pod를 각 노드마다 수동으로 생성해줘야 할것이다. 하지만 DaemonSet를 사용하면 딱히 설정해주지 않아도.. 2023. 7. 25.
728x90
반응형