'Infra/APM'에 해당되는 글 1건

들어가며


APM  'Application Performence Management'의 약자입니다. 말 그대로 어플리케이션 성능 관리 도구입니다. 사내에 APM을 도입하게 되었고, 도입하면서 고려하였던 부분과 설치과정 및 유의사항에 대하여 글을 작성하였습니다.


순서는 다음과 같습니다.

  • 도입배경

  • APM - pinpoint 설치

  • 유의사항

  • 참고


도입배경


 하나의 프로젝트를 런칭하게 된다면 서비스 오픈도 중요하지만 운영을 하는 것도 런칭 못지 않게 중요하다고 생각합니다. 따라서, 테스트 기간에 미쳐 발견 못한 오류나 성능상의 이슈들을 지속적으로 모니터링 필요성이 있었기에 APM 도입을 검토하게 되었습니다.


  • 조건

    • 무료 & 오픈소스 (가격)

    • 서버의 확장/축소 대응이 용이 (이식성)

    • 코드상의 수정이 가능한 적으면 좋음 (관리포인트)

    • Call trace & 서버 상태 체크

    • 지속적인 업데이트 가능

    • UI/UX도 용이 


  • 고려한 APM tool

    • Scouter

    • Pinpoint


 사내 개발자 수가 많지 않다 보니 우선적으로 관리 포인트를 적게 가져가는 것에 가산점을 많이 두었습니다. 마찬가지로, 서버의 확장/축소의 용이하고 소스상의 수정이 가능한 적은 것에 초점을 많이 두었습니다.  조건들을 기준으로 선택한 것이 네이버의 오픈소스 '핀포인트' 였습니다.
pinpoint 1.8.4 버전을 도입하게 되었고 [Java8 기준], Java11 표준으로 가게 된다면 pinpoint 2.0.x 이상으 업그레이드하는 것을 권장합니다.

핀포인트 1.8.4 설치


- 리눅스
  • aws amazone linux2 (centos 기준이기 때문에 yum을 기준으로 패키지를 설치)

- 핀포인트 마스터
  • hbase 1.2.7 - agent로 부터 수집한 데이터 적재

  • pinpoint 1.8.4 web - 웹

  • pinpoint 1.8.4 collector - agent로부터 데이터 수집

  • mysql5.7 - user 정보 설정 (optional)

- 핀포인트 Agent
  • pinpoint-agent 1.8.4  - 타겟 서버에 심어서 master 서버로 데이터 송신


Pinpoint master 서버 설정

  • memory 4GB 이상 설정

# inbound 8080, 3306, 16010, 9993-9997 오픈

# java8 설치

sudo yum install -y java-1.8.0-openjdk-devel.x86_64


# wget 설치

sudo yum install wget -y


1. HBASE 1.2.7 (Stand alone 설치)

# pinpoint hbase 2181 포트

wget http://archive.apache.org/dist/hbase/1.2.7/hbase-1.2.7-bin.tar.gz -P /home/ec2-user/pinpoint

cd /home/ec2-user/pinpoint 

tar xvfz hbase-1.2.7-bin.tar.gz


# 링크

ln -s /home/ec2-user/pinpoint/hbase-1.2.7 /home/ec2-user/pinpoint/hbase 


# hbase-env.sh 설정

vim hbase/conf/hbase-env.sh

26 # The java implementation to use.  Java 1.7+ required. 

27 # export JAVA_HOME=/usr/java/jdk1.6.0/ 

28 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.amzn2.0.1.x86_64/



# java 8에서 사용되지 않는 Perm 옵션 제거 vvim hbase/conf/hbase-env.sh

46 # Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+

47 #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"

48 #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"

49 export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:ReservedCodeCacheSize=256m"

50 export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:ReservedCodeCacheSize=256m"


#  hbase-site.xml 설정 : 데이터 저장 위치 

vim hbase/conf/hbase-site.xml

<configuration>

  <property>

    <name>hbase.rootdir</name>

    <value>file:///home/ec2-user/pinpoint/hbase-data/data</value>

  </property>

  <property>

    <name>hbase.zookeeper.property.dataDir</name>

    <value>/home/ec2-user/pinpoint/hbase-data/zookeeper</value>

  </property>

  <property>

    <name>hbase.unsafe.stream.capability.enforce</name>

    <value>false</value>

    <description>

      Controls whether HBase will check for stream capabilities (hflush/hsync).


      Disable this if you intend to run on LocalFileSystem, denoted by a rootdir

      with the 'file://' scheme, but be mindful of the NOTE below.


      WARNING: Setting this to false blinds you to potential data loss and

      inconsistent system state in the event of process and/or node failures. If

      HBase is complaining of an inability to use hsync or hflush it's most

      likely not a false positive.

    </description>

  </property>

</configuration>


# 디렉토리 생성(hbase.rootdir 은 자동생성되므로 zookeeper 폴더만 생성)

mkdir /home/ec2-user/pinpoint/hbase-data/zookeeper


# hbase 시작 & 중지

hbase/bin/start-hbase.sh

hbase/bin/stop-hbase.sh


# hbase 시작, 스키마 생성 https://github.com/naver/pinpoint/releases/tag/1.8.4 의 Source Code 에서 hbase/scripts/hbase-create.hbase 파일 사용

# hbase-create.hbase TTL 값이 31536000초(365일)/5184000초(60일) 유지하도록 되어있어 604800(7일)로 변경 (용량문제)

sed 's/31536000/604800/' hbase-create.hbase > hbase-create-my.hbase


sed -i 's/5184000/604800/' hbase-create-my.hbase


/home/ec2-user/pinpoint/hbase/bin/hbase shell /home/ec2-user/pinpoint/hbase/scripts/hbase-create-my.hbase


2. Tomcat 9 설치

# tomcat 9 버전 설치

wget http://apache.tt.co.kr/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz -P /home/ec2-user/pinpoint

tar xvfz apache-tomcat-9.0.39.tar.gz

ln -s /home/ec2-user/pinpoint/apache-tomcat-9.0.39 /home/ec2-user/pinpoint/tomcat


#!/bin/sh

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.amzn2.0.1.x86_64/


3. pinpoint-web 설치 (war)

# web 설치

wget https://github.com/naver/pinpoint/releases/download/1.8.4/pinpoint-web-1.8.4.war -P /home/ec2-user/pinpoint/files

mkdir /home/ec2-user/pinpoint/tomcat/webapps/ROOT

cd /home/ec2-user/pinpoint/tomcat/webapps/ROOT


# 압축해제 

cp /home/ec2-user/pinpoint/files/pinpoint-web-1.8.4.war ./

jar xvf  pinpoint-web-1.8.4.war

rm -rf pinpoint-web-1.8.4.war


# properties 설정 

vim /home/ec2-user/pinpoint/tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties

hbase.client.host=localhost

hbase.client.port=2181


4. pinpoint-collector 설치 (war)

# collector 설치

wget https://github.com/naver/pinpoint/releases/download/1.8.4/pinpoint-collector-1.8.4.war -P /home/ec2-user/pinpoint/files

mkdir /home/ec2-user/pinpoint/tomcat/webapps/pinpoint-collector-1.8.4

cd pinpoint-collector-1.8.4


# 압축해제 

cp /home/ec2-user/pinpoint/files/pinpoint-collector-1.8.4.war ./

jar xvf pinpoint-collector-1.8.4.war

rm -rf pinpoint-collector-1.8.4.war


# properties 설정 

# tcp 사용

vim /home/ec2-user/pinpoint/tomcat/webapps/pinpoint-collector-1.8.4/WEB-INF/classes/pinpoint-collector.properties

collector.receiver.base.ip=0.0.0.0

collector.receiver.stat.tcp.ip=0.0.0.0

collector.receiver.stat.udp=false

collector.receiver.stat.tcp=true


5. mysql 설치 (optional) - user 정보 세팅 / 설치 필수 아님

# mysql5.7 설치

sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

sudo yum local install mysql57-community-release-el7-11.noarch.rpm 

sudo yum install mysql-community-server

systemctl start mysqld.service


mysql -V


# pinpoint db & table 생성

mysql -u root -p

mysql> create database pinpoint;

mysql> GRANT USAGE ON *.* TO 'pinpoint'@'localhost' IDENTIFIED BY '비밀번호;

mysql> flush privileges;


mysql> use pinpoint;

mysql> source /home/ec2-user/pinpoint/tomcat/webapps/ROOT/WEB-INF/classes/sql/CreateTableStatement-mysql.sql;

mysql> source /home/ec2-user/pinpoint/tomcat/webapps/ROOT/WEB-INF/classes/sql/SpringBatchJobRepositorySchema-mysql.sql;

# pinpoint jdbc properties 설정

vim /home/ec2-user/pinpoint/tomcat/webappps/ROOT/WEB-INF/classs/jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/pinpoint?characterEncoding=UTF-8

jdbc.username=root

jdbc.password=비밀번호


6. tomcat 실행

sh /home/ec2-user/tomcat/bin/startup.sh


Pinpoint agent 서버 설정

1. pinpoint-agent 설치 (jar)

# agent 설치

wget https://github.com/naver/pinpoint/releases/download/1.8.4/pinpoint-agent-1.8.4.tar.gz -P /home/ec2-user/pinpoint/files


# 압축해제

tar xvfz pinpoint-agent-1.8.4.tar.gz -C ./pinpoint-agent

mv pinpoint-agent /home/ec2-user/pinpoint


# properties 설정 

vim /home/ec2-user/pinpoint/pinpoint-agent/pinpoint.config

profiler.collector.ip=[내부 ip 설정]

profiler.statdatasender.transport.type=TCP

profiler.spandatasender.transport.type=TCP


2. 실행

-javaagent:${pinpointPath}/pinpoint-bootstrap-1.8.4.jar 

-Dpinpoint.applicationName=[고유값] 

-Dpinpoint.agentId=[핀포인트내에서 보여질 이름]


java -jar 

-javaagent:/home/ec2-user/pinpoint/pinpoint-agent/pinpoint-bootstrap-1.8.4.jar 

-Dpinpoint.agentId=hello

-Dpinpoint.applicationName=helloWeb

-Dspring.profiles.active=real 

/home/ec2-user/hello-0.0.1-SNAPSHOT.jar 



유의사항

  • 1.8.4 버전의 경우 collector-agent 데이터 송수신을 tcp로 설정
  • master의 메모리는 4GB 이상 설정
  • crontab 등록하여 로그를 비워줄 것
  • Agent의 log 레벨을 INFO로 설정 [DEBUG시 앱의 성능이 저하]
  • 특정 url을 제외 방법 - agent의 config 설정
    • profiler.tomcat.excludeurl=/aa/test.html, /bb/exclude.html

    참조


    'Infra > APM' 카테고리의 다른 글

    [APM] - Pinpoint 1.8.4 핀포인트 모니터링 툴 설치 및 사용  (2) 2020.11.09
    블로그 이미지

    사용자 yhmane

    댓글을 달아 주세요