pinpoint 설치 방법- 1.8.4 버전 설치방법 메모

서비스 일부가 JAVA 11을 사용하게 되어서 Pinpoint 버전업이 필요하게 됨(Pinpoint 1.8.3 부터인가 java 11을 지원함)



유저홈/apps 디렉토리를 기준으로 설치 함

#디렉토리 생성
mkdir ~/apps && cd ~/apps

#다운로드 후 압축 해제, 심볼릭 링크 처리
wget 'https://github.com/naver/pinpoint/archive/1.8.4.tar.gz' && tar -xzf 1.8.4.tar.gz && rm 1.8.4.tar.gz && ln -s pinpoint-1.8.4 pinpoint


#인스톨(JAVA 6,7,8, 9 필요)
cd ~/apps/pinpoint && ./mvnw install -Dmaven.test.skip=true

#참고: JAVA설치
* 아래 wget이 인증 만료로 진행되지 않는다면, 각 다운로드 페이지에 로그인 후 fiddler를 통해 다운로드 URL을 구하면 됨

cd ~/apps

wget 'http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin?AuthParam=1565679254_d8f8f965c05a5c02f7b05dcf12cd591a' -O  ~/apps/jdk-6u45-linux-x64.bin
chmod 755 jdk-6u45-linux-x64.bin && ./jdk-6u45-linux-x64.bin && rm jdk-6u45-linux-x64.bin
ln -s jdk1.6.0_45 jdk_6

wget 'http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz?AuthParam=1565679323_817db680a1f10b44f3ea966c24fda0fb' -O  ~/apps/jdk-7u80-linux-x64.tar.gz
tar -xzf jdk-7u80-linux-x64.tar.gz && rm jdk-7u80-linux-x64.tar.gz
ln -s jdk1.7.0_80 jdk_7

wget 'http://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324f81b43/jdk-8u221-linux-x64.tar.gz?AuthParam=1565679401_a0a5d03078d4a324b9376891541aae33' -O ~/apps/jdk-8u221-linux-x64.tar.gz
tar -xzf jdk-8u221-linux-x64.tar.gz && rm jdk-8u221-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_221 jdk && ln -s ~/apps/jdk1.8.0_221 jdk_8

wget 'http://download.oracle.com/otn/java/jdk/9.0.4+11/c2514751926b4512b076cc82f959763f/jdk-9.0.4_linux-x64_bin.tar.gz?AuthParam=1565679522_413bd7c661de37ea7e7059de455f0b5c' -O ~/apps/jdk-9.0.4_linux-x64_bin.tar.gz
tar -xf jdk-9.0.4_linux-x64_bin.tar.gz  && rm jdk-9.0.4_linux-x64_bin.tar.gz && ln -s ~/apps/jdk-9.0.4 jdk_9


#환경변수 등록
vi ~/.bashrc 후에

export JAVA_HOME=~/apps/jdk
export JAVA_9_HOME=~/apps/jdk_9
export JAVA_8_HOME=~/apps/jdk_8
export JAVA_6_HOME=~/apps/jdk_6
export JAVA_7_HOME=~/apps/jdk_7
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc

#참고 : JAVA DNS TTL Modify
echo 'networkaddress.cache.ttl=60' >> ~/apps/jdk/jre/lib/security/java.security



#참고 : OS 디스크외 AWS EBS를 추가로 마운트해서 데이터를 저장한다면 pinpoint data디렉토리 변경(/data에 EBS 마운트)
cd ~/apps/pinpoint/quickstart && ln -s /data/pinpoint data
sudo su
mkdir /data/pinpoint && chown 유저계정:유저계정 /data/pinpoint



Hbase 설치 및 시작
-- HBase 저장기간을 줄임(1일=86400초로 줄이는데 상황에 따라서 적당한 수치로 조정)
 vi ./quickstart/conf/hbase/init-hbase.txt 후 아래 입력(2일간 데이터 보관)
 :%s/5184000/172800/g

 :%s/5184000/259200/g  <<3일로 설정할 경우

-- Hbase 다운로드 및 시작
./quickstart/bin/start-hbase.sh

-- Hbase 테이블 초기화
./quickstart/bin/init-hbase.sh



Pinpoint 데몬들 설정 후 시작

-- 컬렉터로그 레벨을 조정해서 적게 남기도록 함
vi ./quickstart/collector/src/main/resources/log4j.xml
:%s/DEBUG/INFO/g
:%s/TRACE/INFO/g

-- pinpoint 웹의 로그레벨 조정
vi ./quickstart/web/src/main/resources/log4j.xml
:%s/DEBUG/INFO/g

-- 컬렉터(데이터 수집 프로세스)  시작
./quickstart/bin/start-collector.sh

-- 웹 UI 시작
./quickstart/bin/start-web.sh


agent 수정(해당 agent가 실제 어플리케이션 시작시 사용됨)

agent 홈 경로 : ~/apps/pinpoint/agent/target/pinpoint-agent-버전

cd ~/apps/pinpoint/agent/target/pinpoint-agent-버전

-- agent 로그 조정( 미 조정시 DEBUG레벨로 로그가 남아서 대상 프로그램의 성능 하향이 발생)
vi lib/log4j.xml 후 아래 명령 수행(로그레벨 DEBUG를 INFO로 조정)
:%s/DEBUG/INFO/g

아래내용은 삭제
<appender-ref ref="console" />

-- pinpoint.config파일에서 Collector server의 IP 및 포트 수정


vi ./quickstart/agent/src/main/resources/pinpoint.config
cd ~/apps/pinpoint/agent/target/pinpoint-agent-1.7.0-SNAPSHOT && vi pinpoint.config

-- 어플리케이션 서버로 복사를 위해서 압축해둠(예)
ex) tar -czf pinpoint-agent-1.7.0-SNAPSHOT_171023.tar.gz pinpoint-agent-1.7.0-SNAPSHOT

이후 /home/integtool/apps/pinpoint/quickstart/web/target/deploy 경로에 파일을 복사하면 웹에서 다운로드 가능



이후 APM으로 모니터링하고 싶은 서버에 Agent 복사 후 프로세스 실행시 agent 사용하도록 셋팅
 - 방법은 정리 예정이며 필요시 구글 검색하세요




intelliJ 개발을 위한 기본 셋팅
  •  코드의 실행환경은 리눅스

  1. Line separator(줄바꿈) 변경


  2. UTF-8 셋팅


  3. save actions 설정
    1. Plugin Save Actions 설치 후
    2. 설정


  4. 마우스 오버시 java doc 등 문서를 보이도록 설정
    1. Settings -> Editor -> General -> Other에서 설정

    2. 마우스 오버시 아래처럼 javadoc이 보여짐(다른 사람 코드 읽을 때 편함)





  5. 변경된 소스 별표 표시


  6. 변수 등 선택시 하이라이팅 색상 변경
    1. 코드 읽을때 구분이 쉬움

  7. 기타 : 자주 사용하는 Plugin 리스트








[순서]
  1. Go lang 설치
  2. 환경 설정 확인 및 정상 설치 확인
  3. IntelliJ에 Go lang plug-in 설치 후 코드 실행


  1. Go lang 설치
    1. https://golang.org/dl/ 에서 windows 버전 다운로드
    2. 다운로드가 완료되면 설치 진행

  2. 환경 설정 확인 및 정상 설치 확인
    1. 윈도우 명령 프롬프트 실행 후 go version 실행해서 확인

    2. 만약 go 명령어를 못 찾는다면
      1. 제어판 -> 시스템 -> 시스템 환경 변수 편집 -> 고급 -> 환경 변수 클릭
        1. GOPATH 와 GOROOT 확인 후 없으면 추가

  3. IntelliJ에 Go Plug-in 설치 후 코드 실행
    1. File->settings->Plugins 에서 Go 검색 후 설치 후 재 시작


    2. 간단한 hello world 작성 후 실행



배경
  •  java를 메인 언어로 사용하고 있지만, python이나 golang도 필요할 때 조금씩 사용 중인데 각 전용 IDEA를 사용하기에는 귀찮고 메모리도 부족해서 간단한거는 Intellij 하나로 사용
  • 다만, intellij 하나로만 사용하더라고 가능하면 편의 기능은 좀 셋팅해서 사용하고자 함


내용: intellij에서 python -  module auto import 하기

  1. Intellij에서 python Auto import 활성화


  2. 이후 사용 방법
    1. 필요한 모듈 입력 후 . 을 찍으면 import popup 헬프가 노출된다(ex. Alter + Enter를 입력하면 import 됨)



Spring API 개발시 예외(에러) 처리 방법을 메모합니다. 실제로 회사 등의 프로젝트에서 제가 선호하는 방식입니다.

 -  특정 케이스, 레거시의 하위호환성을 유지해야하는 경우는 어쩔수 없지만ㅠ (ex. 갑에서 에러도 200으로 응답해달라고 요청)


[참고 링크]

1. 트위터 : https://developer.twitter.com/en/docs/basics/response-codes

2. 카카오 : https://developers.kakao.com/docs/restapi/quick-reference#응답-코드

3. 기타

  - 어떤분이 내가 사용하는 방법과 유사하게 Spring 기반으로 정리해두신 링크입니다.

  - 다른점은, 저는 다른 개발자와 커뮤니케이션& 개발자가 정의서를 따로 보지 않도록 하기 위해서 에러코드를 숫자보다 문자로 처리하는걸 선호합니다.

  - https://cheese10yun.github.io/spring-guide-exception/#undefined



메모

 - Spring boot +JSP 사용시 제약이 조금있다. 그래서 가능하면 thymelef 등을 사용하는게 좋음

 - 개인적으로 주변 회사에서는 thymelef를 선호하는 편인듯.. 

 - 나는 Spring boot가 나오기 몇 년전에 FreeMarker를 한참썻는데 이제 쓸데가 없어짐.. 기억도 안나고..(지금 쓰고 있는 JSP도 가능하면 그만 쓰려고 노력 중)



본론으로 들어가서 spring boot 프로젝트의 방향성과 cloud 등에서 embedded servlet container를 선호할수 밖에 없는 제약 등으로 JSP는 이제 그만 사용해야할 듯 함(현재 AWS에서는 JSP를 따로 deploy하고 쓰고 있지만 좋은 방법은 아니고..)



참고


29.4.5 JSP Limitations(링크)

When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.

  • With Jetty and Tomcat, it should work if you use war packaging. An executable war will work when launched with java -jar, and will also be deployable to any standard container. JSPs are not supported when using an executable jar.
  • Undertow does not support JSPs.
  • Creating a custom error.jsp page does not override the default view for error handlingCustom error pages should be used instead.

There is a JSP sample so that you can see how to set things up.

https://ofbiz.apache.org/



Apache OFBiz is a suite of business applications flexible enough to be used across any industry. A common architecture allows developers to easily extend or enhance it to create custom features.



  1. 프로젝트 상단의 run 부분의 select box에서 Edit Configurations 선택


  2. Environment -> VM options


+ Recent posts