Dev. Blog isprometheo의 좌충우돌 개발 블로그

[Emacs] macOS Catalina 디렉토리 접근 문제 해결

시스템 환경설정 > 개인 정보 보호 > 전체 디스크 접근 권한에 Emacs 앱을 추가했지만 홈 디렉토리를 제외한 문서, 다운로드 등의 디렉토리 접근이 불가능했다. 이유는 Emacs가 ruby로 실행되기 때문이었다. 전체 디스크 접근 권한에 /u

[Golang] Java gzip migration

기존에 Java로 만들어진 프로젝트를 Golang으로 다시 만들고 있는데 문자열을 gzip으로 압축한 뒤 base64로 인코딩한 결과를 파일명으로 만드는 로직이 있었다. 처음엔 Golang에서도 gzip과 base64가

[Log] Spark ElasticSearch Parquet

로그를 ElasticSearch에 쌓아서 실시간으로 보고 있었는데 로그의 양이 많아서 차지하는 용량이 계속 커지고 있었다. 파일로도 로그를 남겨두기는 해서 한동안은 80 ~ 90% 정도 되면 인덱스를 지워서 용량을 확보했다. 하지만 다년

[독서] 심플 소프트웨어를 읽고(3)

Part 6 소프트웨어 이해하기 컴퓨터란 무엇인가? 인간이 설정한 목표를 달성하기 위해 일련의 기호 명령을 수행하고 데이터를 비교할 수 있는 모든 물질 소프트웨어 구성 요소: 구조, 동작, 결과 소프트웨어 개정판:(I)SAR 구별하기 구조

[독서] 심플 소프트웨어를 읽고(2)

Part 3 단순성과 소프트웨어 설계 설계는 프로젝트 초반에 하라 미래를 고려하지 않으면 코드가 엉망으로 설계되고 너무 복잡해진다. 미래 예측의 정확성 미래 예측의 정확성은 시스템이 복잡해질수록, 예측하고자 하는 시점이 멀어질수록 낮아진

[독서] 심플 소프트웨어를 읽고(1)

페이스북에서 “심플 소프트웨어"라는 책이 나왔다고 해서 어떤 내용인지 궁금해서 읽어 보았다. 책 표지에 다음과 같은 문장이 눈길을 끌었다. 100년 뒤에도 유용할 소프트웨어 설계 원칙 & 프로그래머의 바른 길

[JS] ejs SyntaxError

ejs를 2에서 3으로 업그레이드하고 나서 다음과 같은 에러가 발생했다. SyntaxError: Unexpected identifier in index.ejs while compiling ejs If the above error is not helpful, you may want to try EJS-Lint: https://github.com/RyanZim/EJS-Lint Or, if you meant to create an async function, pass `async: true` as an option. at new Function (<anonymous>) ... 에러 로그에서 어디에서 잘못됐는지 정확히 나오지도 않고 로그

[Golang] 410 Gone

Golang을 1.13으로 업그레이드를 하고 프로젝트에서 go get ...으로 라이브러리를 다운받으려고 했는데 410 Gone 에러를 내면서 실행이 되지 않았다. 구글에서 검색을 해보니 해결 방법을 바로 찾을 수 있었다. $ export GO111MODULE=on $ export GOPROXY=direct $ export GOSUMDB=off 원

[Log] Logstash Kafka 연동 에러 해결

Lostash에서 input으로 kafka를 사용하고 있었는데 다음과 같은 오류가 나왔다. [WARN ][org.apache.kafka.common.utils.AppInfoParser] Error registering AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=logstash-1 at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:436) ~[?:?] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1855) ~[?:?] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955) ~[?:?] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890) ~[?:?] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320) ~[?:?] at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) ~[?:?] 중복되는 설정들이 많아 합치면서 pipeline을 사용하도록 수정했는

[Log] Logstash Pipeline 사용하기

Logstash에서 pipeline으로 개별로 설정을 하여 로그를 수집할 수 있다. 그래서 input, filter, output으로 나누어 사용하기 위해 다음과 같이 디렉토리를 구분하여 pipelines.yml을 설정했다. - pipeline.id: input path.config: "/etc/path/to/input.conf" - pipeline.id: