{"id":27372782,"url":"https://github.com/polyglot-k/grpc-log-stream","last_synced_at":"2026-04-07T07:44:31.326Z","repository":{"id":251964625,"uuid":"838441215","full_name":"polyglot-k/grpc-log-stream","owner":"polyglot-k","description":"MSA 와 같은 원격 분산 환경에서 중앙에서 로그를 실시간으로 확인할 수 있도록 하는 서버 프로젝트","archived":false,"fork":false,"pushed_at":"2024-08-09T16:44:05.000Z","size":902,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T16:20:12.789Z","etag":null,"topics":["amqp","docker","expressjs","grpc","msa","timescaledb"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/polyglot-k.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-05T16:39:24.000Z","updated_at":"2024-11-14T06:14:11.000Z","dependencies_parsed_at":"2024-08-06T22:11:11.112Z","dependency_job_id":"b4b79788-12e3-4b5c-aa77-39e7918a49fc","html_url":"https://github.com/polyglot-k/grpc-log-stream","commit_stats":{"total_commits":25,"total_committers":1,"mean_commits":25.0,"dds":0.0,"last_synced_commit":"fd5d4aa9baab06485e6f88e81548881a6dfc8fb3"},"previous_names":["knu-k/grpc-log-stream","polyglot-k/grpc-log-stream"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/polyglot-k/grpc-log-stream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polyglot-k%2Fgrpc-log-stream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polyglot-k%2Fgrpc-log-stream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polyglot-k%2Fgrpc-log-stream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polyglot-k%2Fgrpc-log-stream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/polyglot-k","download_url":"https://codeload.github.com/polyglot-k/grpc-log-stream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polyglot-k%2Fgrpc-log-stream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31504897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","docker","expressjs","grpc","msa","timescaledb"],"created_at":"2025-04-13T10:39:17.749Z","updated_at":"2026-04-07T07:44:31.290Z","avatar_url":"https://github.com/polyglot-k.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 들어가기에 앞서\n\n나는 Node를 통해서 개발하는 것을 좋아하는 신입 개발자이다. 해당 부분은 실제로 개발을 하면서, 로그에 대한 부분을 보고 관리하는 tool들이 너무 `많은 초기 Resource 를 차지`하고, `가파른 러닝 커브`또한 존재한다. 나는 이러한 점에서 좀 더 `단순하고 명확함이 나타나는 유틸도구`를 원했고, 이에 대해서 개발할 예정이다.\n\n## 서론\n\n원격의 `MSA`기반의 원격으로 분산 관리되는 프로젝트에서 로그에 대한 부분을 관리하는 것은 매우 어려운 일이다. 복잡한 라이브러리에 의존해서 로그에 대한 부분을 만들어가게 된다.\n\n해당 프로젝트는 이런 문제를 보완하기 위해서 `gRPC`통신 기반으로 중앙 로그 관리 서버를 만들어준다. 이는 `winston` 과 같은 `level`기반 로그 라이브러리와도 궁합이 좋다. transport 되는 부분에 gRPC 요청 파트만 넣어주면 완벽하게 로그에 대한 부분을 수집할 수 있다. 같은 요청 대비 빠른 속도 가능하기 때문에 이는 굉장히 효율적이다.\n\n해당 프로젝트를 사용하기 위한 프로젝트에 대한 기본 구성까지 포함할 예정이다.\n\n기본적으로 실시간으로 로그 메트릭을 확인 할 수 있는 `UI Dashboard`를 지원하며, 기본적인 `filter 기능`을 통해서 이를 케어할 수 있다.\n\n목표는 3개의 MSA 서버에서 동시에 약 5초동안 `초당 10만개`의 로그 트래픽이 생겼을 때, 어플리케이션단에서 이를 견디는 것을 목적으로 하며, 해당 메트릭을 얼마나 `실시간`으로 지원해주는지를 확인하고자 한다.\n\n## 차별성\n\n큰 설정 셋업 없이, 해당 프로젝트를 바로 사용하여 수집을 할 수 있게 된다. 개발의 속도가 중요한 부분에서 용이하게 쓰일 수 있도록 하는 것을 목적으로 한다.\n\n## 폴더 구조\n\n```\n📦src\n ┣ 📂amqp\n ┃ ┣ 📜consumer.js\n ┃ ┗ 📜index.js\n ┣ 📂api\n ┃ ┣ 📂historical-logs\n ┃ ┃ ┣ 📜controller.js\n ┃ ┃ ┗ 📜index.js\n ┃ ┣ 📂logs\n ┃ ┃ ┣ 📜controller.js\n ┃ ┃ ┗ 📜index.js\n ┃ ┗ 📜inedx.js\n ┣ 📂dashboard -- react 에서 build된 파일\n ┃ ┣ 📂static\n ┃ ┃ ┣ 📂css\n ┃ ┃ ┗ 📂js\n ┣ 📂grpc\n ┃ ┣ 📂proto\n ┃ ┃ ┗ 📜logger.proto\n ┃ ┣ 📂service\n ┃ ┃ ┗ 📜index.js\n ┃ ┗ 📜index.js\n ┣ 📂loaders\n ┃ ┣ 📜client-connection.js\n ┃ ┣ 📜dependency-injection.js\n ┃ ┣ 📜express.js\n ┃ ┣ 📜grpc.js\n ┃ ┣ 📜index.js\n ┃ ┣ 📜postgresql-pool.js\n ┃ ┗ 📜rabbitmq.js\n ┣ 📂logger\n ┣ 📂utils\n ┃ ┗ 📜client-connection.js\n ┣ 📜app.js\n ┗ 📜server.js\n\n```\n\n## 사용 기술\n\n| 기술                                 | 용도                                                                                                                                                                                                    |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [grpc](./docs/grpc.md)               | 중앙 서버에 로그를 보내주기 위한 통신 수단                                                                                                                                                              |\n| [timescaleDB](./docs/timescaleDB.md) | 영구적인 로그 데이터를 시계열의 형태로 저장하기 위해서 사용                                                                                                                                             |\n| RabbitMQ                             | grpc만으로는 디비로가는 오버헤드를 줄일 수 없다. 트래픽이 몰리는 곳인 만큼 메시지큐로 이를 제어해주는 것이 중요하다. / 최근 50개에 대한 로그는 Cache를 통해서 확인 가능 =\u003e 최대 갯수도 임의로 변경 가능 |\n| SSE(server sent events)              | 실시간으로 대시보드에 스트리밍 되어야한다고 생각했기 때문에 SSE 방식을 활용하여, MQ의 작업이 완료 될 때마다 스트리밍 작업 처리를 했다.                                                                  |\n\n## 벤치마킹\n\n-   timeScaleDB 벤치 마킹\n\n    -   [2024-08-06](./docs/benchmark.md)\n\n-   부하 테스트\n    -   [2024-08-09](./docs/benchmark2.md)\n\n## 유효성 검증\n\n-   필터 기능 유효성 검증 완료 (2024.08)\n\n## 부하 테스트\n\n1차 부하테스트 =\u003e cluster 3개 기준 초당 1000건의 로그 수용.\n\n-   서버 스펙\n\n    `CPU - 13th Gen Intel(R) Core(TM) i5-1340P`\n\n    `Memory - 15.6GB`\n\n    `oS - windows 11`\n\n## 대시보드\n\n-   v1\n    ![alt text](./docs/mode-v1.png)\n-   v1-1\n    -   Dark 모드\n        ![alt text](./docs/dark-mode.png)\n    -   Light 모드\n        ![alt text](./docs/light-mode.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolyglot-k%2Fgrpc-log-stream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpolyglot-k%2Fgrpc-log-stream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolyglot-k%2Fgrpc-log-stream/lists"}