AWS Athena 는 로그 분석 서비스로 Hive 와 같다. 가장 많이 쓰이는 부분이 VPC Flow Log 를 분석하는데에 Athena 를 이용하는 방법이다. 이 글에서는 어떻게 VPC Flow Log 를 Athena 를 통해서 분석하는 알아 본다. VPC Flow Log 설정 VPC Flow Log 설정은 간단하다. VPC 에서 Flow logs 탭에서 설정하면 그만인데, 다음과 같은 파라메터를 필요로 한다. Destination Type: S3 Destination Name: S3 로 지정했을 시에 S3 Bucket 이름. Log record format: AWS default format Log file format: Text (default) Partition […]
Spring Boot, error: constructor … in class .. cannot be applied to given types 오류
Spring Boot 로 프로그램을 작성하고 난 후에 Compile 단계에서 다음과 같은 오류를 만날 수 있다.
1 2 3 4 5 6 |
EmployeeServiceImpl.java:13: error: constructor Employee in class Employee cannot be applied to given types; return Mono.just(new Employee(empId, "emp1", "manager", 3000)); ^ required: no arguments found: Long,String,String,int reason: actual and formal argument lists differ in length |
에러 코드를 보면 new 연산자를 이용해 Employee 객체를 생성하는 부분인데, 이부분이 문제가 된다는 것이다. required: no arguments 라고 나오지만 Employee 는 다음과 같이 되어 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package local.systemv.springboot.test.apps.model; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @AllArgsConstructor @Getter @Setter public class Employee { private Long empId; private String name; private String description; private double salary; } |
@AllArgsConstructor 어노테이션을 줘서 자동으로 모든 객첵 멤버변수를 인자로 받는 컨스트럭터를 생성하도록 하고 했다. 이것은 Lombok 을 이용한 것으로 다음과 같이 gradle 에서 의존성을 줬다.
1 |
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.16' |
문제는 Eclipse 나 IDE 툴에서는 SpringBoot 애플리케이션이 잘만 실행되지만 정작 컴파일을 할려고 하면 […]
컨테이너에서 Java 힙 덤프 뜨기
Kubernetes 에서 Java 애플리케이션을 운영할때에, Java 힙 덤프를 떠야하는 경우가 있다. 하지만 다음과 같이 덤프를 떠지지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ kubectl exec -it employee-consumer-68cfc9864-kgx4w -- sh / # ps aux PID USER TIME COMMAND 1 root 3:01 java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Djava.security.egd=file:/dev/./urandom -jar /app/employee-consumer.jar --spring.active.profile=${SPRING_PROFILES_ACTIVE} 57 root 0:00 sh 63 root 0:00 ps aux / # jcmd 1 VM.flags 1: com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:86) at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63) at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208) at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147) at sun.tools.jcmd.JCmd.main(JCmd.java:131) / # </init> |
“Unable to get pid of LinuxThread manager thread” 오류가 발생한다. 이 오류가 나오는 이유는 Java 애플리케이션의 Pid 값이 1이기 때문이다. 이를 해결하는 방법을 소개한다. Container 이미지에 tini 설치, 배포 먼저 Openjdk 의 컨테이너 이미지에 tini 프로그램을 설치해야 한다. 이 tini 라는 프로그램은 인자값을 받은 프로그램을 실행 시켜 준다. 이렇게 하면 tini 는 Pid 1을 가지지만 tini 가 실행시킨 프로그램은 1보다 큰 Pid […]
mod_jk, SEVERE: Invalid message received with signature 해결
Apache 2.4 에 mod_jk 를 설치하고 Tomcat 9 와 AJP 연결 설정을 했다. 그런데, 어찌된 영문인지 AJP 연결이 되지 않으면서 다음과 같은 에러 메시지만 나왔다.
1 |
invalid message received with signature |
mod_jk 설정과 Tomcat 9 의 연결 설정은 아무런 문제가 없음에도 이런 오류가 발생하는 이유를 몰랐는데, 문제는 아주 단순했다. address=”::1″ Tomcat 9 의 서버 설정인 server.xml 에 ajp 설정은 다음과 같다.
1 2 |
<connector protocol="AJP/1.3" address="::1" port="8009" redirectport="8443"> </connector> |
기본 설정값으로, address 에 할당된 값이 문제가 된다. address 에 값을 “0.0.0.0” 으로 바꾸던지 아니면 서버 IP 주소로 변경해 주면 된다. secret=”” Tomat […]
강남의 MSP 회사들이 IT를 망치고 있다
강남에 MSP 회사들이 많이 있다. Managed Service Provider 라고, 리셀러 개념이라고 하기에는 좀 애매하지만 그외 비슷한 회사들이라고 보면 된다. 아무래도 많은 회사들이 이 MSP 에 기술지원을 받기를 원한다. 왜냐하면 트렌드 자체가 그렇게 흘러가고 있고 이들에 대한 수요가 많다보니 MSP 에 대한 기대가 있는 것이다. 문제는 이러한 회사들이 썩 좋은 방법으로 사업을 영위하고 있지 않다는데 있다. 위험의 외주화. 우리 사회에서 지난 몇년간 나왔던 말들이 ‘위험의 외주화’ 이다. 원청이 위험성이 높은 일에 대해서 외주를 주어 그와 관련된 법망과 사회적, 도덕적 책임을 회피하는 […]
VIM lightline 플러그인
vim 을 사용할때에 필요한 것이 상태바(Status Bar) 다. 보통은 airline 을 많이 쓰는데, 여러가지 의존성이 필요해서 사용하기에 쉽지가 않다. lightline 은 의존성이 복잡하지 않고 간단하게 사용할 수 있다. 다음과 같이 .vimrc 에 설정을해주면 된다. t_Co=256 설정과 아래 두가지 부분의 설정이 핵심으로 보면 된다.
Elasticsearch 보안 – 인증서
Elasticsearch 가 버전이 높아짐에 따라 인증서에 대한 이해가 필요하게 되었다. 사실 이 인증서가 필요한 이유가 Elastic 에서 배포하는 X-Pack 중에 Security 플러그인 때문인데, 이 Security 를 활성화 하게 되면 TCP, HTTP 통신을 TLS 통신을 하도록 강제하고 있다. 문제는 Elasticsearch 자바 기반이며, 따라서 생성하는 파일이 여느 다른 인증서와는 다른 면도 있다. ‘다른 면도 있다’ 라고 표현한 이유는 일반적인 PEM 형식의 보안키와 인증서를 모두 지원하지만 여전히 자바 세계에서만 통용되는 방법을 여전히 고수하고 있기 때문이다. keystore 파일 최신 버전의 Elasticsearch 7 을 설치하게 […]
Nginx 로그를 위한 Logstash Pipeline 설정하기
Logstash 를 이용해 로그를 프로세싱 해보자. Logstash 에 대한 기초적인 설정은 다음글에서 확인 가능하다. Logstash 살펴보기 또, 이 글은 Elastic 홈페이지에 내용을 기반으로 한다. Parsing Logs with Logstash filebeat 설정 및 기동 먼저 파일 filebeat 설정을 다음과 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/linux.systemv.pe.kr.access.log tags: ["nginx_access_log"] fields: server_name: linux.systemv.pe.kr log_type: nginx-log nginx: true filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false output.logstash: hosts: ["192.168.97.32:5044"] |
Elastic 홈페이지에는 간단하게 설정하도록 나오지만 여기서는 몇가지 설정을 추가 하였다. tags 를 설정하였고 fields 도 추가 하였다. 다음과 같이 시작 한다.
1 |
]$ ./filebeat -e -c filebeat.yml -d "publish" |
logstash Nginx pipeline 설정 먼저 filebeat 으로부터 메시지가 잘 들어오는지 디버깅을 먼저 해보자. 다음과 같이 간단하게 설정을 해본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
input { beats { port => "5044" } } #filter { # #} output { stdout { codec => rubydebug } } |
[…]
Logstash 살펴보기
ELK 스택에서 로그를 프로세싱하고 저장소에 실시간으로 적재해주는 프로그램인 Logstash 에 대해서 살펴본다. 자바 프로그램 Logstash 는 자바 프로그램이다. 그래서 Java Runtime 이 필요하다. 그런데, Logstash 에는 Java Runtime 이 내장되어 있어서 별도로 설치하지 않아도 된다. 하지만 이 자바 때문에 프로그램이 무겁다. Logstash 정의 다음과 같이 정의가 머리속에 담아 두기 좋다. 실시간 파이프라인(Pipeline) 기능을 가진 데이터 수집 엔진을 가진 오픈 소스 소프트웨어다. 파이프라인(Pipeline) Logstash 는 파이프라인(Pipeline) 형식으로 데이터를 처리 한다. INPUTS 은 데이터를 입력받는 부분에 대한 설정이다. OUTPUTS 은 어디로 데이터를 […]
로그 저장과 트래킹
로그(log) 는 각종 시스템과 소프트웨어 프로그램의 정보를 담고 있다. 한 사람이 하나의 시스템, 하나의 소프트웨어 프로그램을 다루거나 관리를 한다면 별 문제가 없겠지만 요즘 처럼 분산형 시스템과 소프트웨어를 사용하는 시대에 로그를 하나씩 다 들여다 본다는 건 불가능이다. 거기다 로그를 본다는 것도 여간 쉬운일이 아니다. 매우 지루하고 많은 시간을 허비해야 하는데, 수 많은 로그속에서 내가 필요로하는 정보를 찾기란 매우 어렵다. 그래서 이것을 손쉽게 처리할 수 있도록 도와주는 프로그램 그룹이 만들어졌는데, 다음과 같은 것이다. Splunk 스플렁크(Splunk) 는 사용 소프트웨어다. 대량으로 로그를 저장하고 분석하도록 […]