프로젝트/Pinpoint, Scouter 구축(APM)

Pinpoint - Application Inspector 기능 적용 (Flink 연동)

블랑v 2024. 1. 19. 18:11

https://pinpoint-apm.github.io/pinpoint/applicationinspector.html#application-inspector-1

 

How to use Application Inspector | Leading Open-Source APM

English | 한글 Application Inspector 1. Introduction Application inspector provides an aggregate view of all the agent’s resource data (cpu, memory, tps, datasource connection count, etc) registered under the same application name. A separate view is p

pinpoint-apm.github.io

 

해당 레퍼런스를 토대로 현재 연결 관계에서 Inspector 기능을 활성화해보자.

 

 

Flink 설치

Apache Flink:

Apache Flink은 대규모 데이터 스트리밍 처리를 위한 오픈소스 플랫폼이다.

데이터베이스가 아닌, 실시간 데이터 처리 및 배치 처리를 지원하는 스트리밍 프레임워크로, 복잡한 데이터 처리 작업을 효율적으로 수행할 수 있도록 설계되었다.

 

 

현재 Collector(정확히는 Zookeeper와 Hbase가 존재하는 서버) 서버에 flink를 추가적으로 설치할 것이다.

물론 이렇게 하지 않아도 되나 가상 환경에서 포트포워딩이 번거롭기에 한 서버에 넣어주었다.

 

inspector 기능의 동작 구조.

 

https://github.com/pinpoint-apm/pinpoint

 

현재 Pinpoint 2.3.x 버전을 적용하였으므로 이에 맞게 Flink 8 버전(정확히 말하자면 1.8.x)을 사용할 것이다.

https://flink.apache.org/downloads/

 

본인의 경우 다음 버전을 설치하였다. (Binaries 파일을 다운받을 것.)

Apache Flink 1.8.2 - 2019-09-11 (Source, Binaries, Docs, Javadocs, Scaladocs )

 

기본적인 CentOS 기준으로, 가장 위의 파일을 받으면 될 것이다. (Scala 2.11)

 

 

환경 설정

ReadME : 아래 부분은 내 실패한 기록을 저장한 것이다.

이럴 필요 없이 'https://github.com/pinpoint-apm/pinpoint/releases' 릴리즈에서 flink run에 필요한 job 파일을 배부하니, 내부 properties만 조금 바꿔서 사용하자.

 

..path/pinpoint-2.3.x/pinpoint-2.3.x/flink/src/main/resources/profiles/release .. 이런 식의 핀포인트 내부 경로의 properties를 변경해야 한다. -> 이후 jar 파일로 압축 후 구동
나의 경우 해당 conf 파일만 따로 받아서 값을 변경했다.. 당연하게도 이러면 설정이 적용되지 않는다

 

https://github.com/pinpoint-apm/pinpoint/blob/master/flink/src/main/resources/profiles/release/pinpoint-flink.properties

 

해당 깃허브에서 properties 파일을 받을 수 있다. 이를 conf 디렉토리 하위로 옮겨주었다.

 

내부 문서를 환경에 맞게 수정해주어야 한다.

자세한 부분은 해당 하위 항목을 참조할 것 

https://pinpoint-apm.gitbook.io/pinpoint/documents/application-inspector#5.

 

How to use Application Inspector - Pinpoint

Application inspector provides an aggregate view of all the agent's resource data (cpu, memory, tps, datasource connection count, etc) registered under the same application name. A separate view is provided for the application inspector with stat charts si

pinpoint-apm.gitbook.io

 

 

    flink.cluster.enable=true
    flink.cluster.zookeeper.address=YOUR_ZOOKEEPER_ADDRESS
    flink.cluster.zookeeper.sessiontimeout=3000
    flink.cluster.zookeeper.retry.interval=5000
    flink.cluster.tcp.port=19994

 

나의 경우 hbase(sa이나 자체적으로 타 폴더에 zookeeper 역시 존재)가 같은 서버 내에 있기 때문에 별다르게 변경할 필요는 없었다.

 

flink 역시 sa로 실행하기에, 다음 설정을 local로 설정하겠다.

해당 설정을 할 경우 run이 되지 않는다. server로 변경할 것!

관련 repo : https://github.com/pinpoint-apm/pinpoint/issues/4178

 

# configure l4 ip address to ignore health check logs
collector.l4.ip=

# base data receiver config  ---------------------------------------------------------------------
collector.receiver.base.ip=0.0.0.0
collector.receiver.base.port=19994

# number of tcp worker threads
collector.receiver.base.worker.threadSize=8
# capacity of tcp worker queue
collector.receiver.base.worker.queueSize=1024
# monitoring for tcp worker
collector.receiver.base.worker.monitor=true

# change OS level read/write socket buffer size (for linux)
#sudo sysctl -w net.core.rmem_max=
#sudo sysctl -w net.core.wmem_max=
# check current values using:
#$ /sbin/sysctl -a | grep -e rmem -e wmem

# number of agent event worker threads
collector.agentEventWorker.threadSize=4
# capacity of agent event worker queue
collector.agentEventWorker.queueSize=1024

#collector.admin.password=
#collector.admin.api.rest.active=
#collector.admin.api.jmx.active=

collector.spanEvent.sequence.limit=10000

# flink cluster
flink.cluster.enable=true
flink.cluster.zookeeper.address=localhost
flink.cluster.zookeeper.znode_root=/pinpoint-cluster
flink.cluster.zookeeper.sessiontimeout=3000
flink.cluster.zookeeper.retry.interval=5000
flink.cluster.tcp.port=19994

# flink env init
flink.StreamExecutionEnvironment=server
flink.sourceFunction.Parallel=1

 

 

마찬가지로, hbase 역시 설치 후 환경설정을 해주어야 한다.

https://github.com/pinpoint-apm/pinpoint/blob/master/flink/src/main/resources/profiles/release/hbase.properties

 

 

+ collector 역시 환경설정이 필요하다.

2.3.x의 경우 'path/pinpoint-2.3.x/pinpoint-2.3.x/collector/src/main/resources/profiles/release'

하위에 존재한다. zookeeper 경로를 설정해주자.

 

 

Pinpoint-flink 빌드

https://github.com/pinpoint-apm/pinpoint/tree/master/flink

 

레퍼런스로 제공된 flink 프로젝트를 빌드하고, target 폴더 하위에 생성된 streaming job 파일을 얻어야 한다.

 

이 과정에서 생성된 pinpoint-flink-job-{pinpoint.version}.jar 파일은 Flink 서버에서 실행되어야 하는 것이다.

따라서 Pinpoint에서 제공하는 특별한 Flink 모듈을 빌드하고, 그 결과로 생성된 .jar 파일을 실행해야 한다.

 

Maven을 통한 jar 추출

Maven을 설치하고, 이를 통해 빌드 후 jar 파일을 뽑아내었다.

https://kim-dragon.tistory.com/119

 

[Linux] Centos Maven 설치하기 (maven 3.6)

maven 3.6 install 메이븐 다운로드 페이지 접속 : https://maven.apache.org/download.cgi 다운로드 및 설치 cd /usr/local wget http://mirror.apache-kr.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz tar -xvf apache-maven-3.6.3-

kim-dragon.tistory.com

 

1. 레포지토리 복제
git clone https://github.com/pinpoint-apm/pinpoint.git 명령어로 전체 레포지토리를 로컬 시스템에 복제한다.

혹은 FTP로 파일 자체를 이동해도 상관없다.

 

2. 프로젝트 디렉토리로 이동
cd pinpoint/flink 명령어로 flink 디렉토리로 이동한다.

 

3. 빌드 실행
mvn clean package 명령어를 실행하여 프로젝트를 빌드한다. 이 명령어는 필요한 의존성을 다운로드하고, 소스 코드를 컴파일하며, 테스트를 실행하고, JAR 파일을 생성한다.

 

빌드가 완료되면, 생성된 JAR 파일은 target 디렉토리 내에서 찾을 수 있다.

 

.. 오류

 

 

하지만 왜인지 모르게 내부 의존성 문제로 에러가 나는 듯 하다.

 

 

이유는 version을 3.0.0-SNAPSHOT으로 받았기 때문이었다.

다들 버전 확인을 철저히 할 것. master는 금기..

 

 

 

https://mvnrepository.com/artifact/com.navercorp.pinpoint/pinpoint-flink/2.3.3

 

flink 폴더에서 mvn clean package를 실행한다.

근데 2.3.x버전에서도 에러가 나는게, 기본적으로 pom.xml에서 2.3.4-SNAPSOHOT으로 버전이 설정되어 있다. 이를 2.3.3으로 고쳐주자.

 

망할 자바 8 경로를 못 찾는다.

 

JAVA_HOME과 별개로 JAVA_8_HOME 역시 환경 변수로 추가해주어야 한다.

 

+ 상위 pom에서 JAVA 7, 9도 요구하는 것 같다. 일단 해당 변수 역시 추가하니 BUILD를 성공할 수 있었다.

 

/etc 하위의 profile 스크립트에서 해당 환경 변수를 추가하자.

혹시 이래도 에러가 난다면 pom.xml을 확인하거나 MVN에서 직접 의존성을 import하여 빌드해볼 것.

 

어쨌든 결과적으로 빌드 성공. target 폴더에 원하는 jar 파일을 얻었다. 이 파일을 이용하여 실행할 것이다.

 

pinpoint-flink-job-{pinpoint.version}.jar 을 준비하도록 하자.

Flink 실행

 

Flink의 bin 디렉토리에 있는 flink 실행 파일을 사용하여 job을 시작한다.

나의 경우 bin 폴더 안에 받은 jar을 심었다.

 

./flink run /path/to/your/pinpoint-flink-job-{pinpoint.version}.jar

 

 

LocalStreamEnvironment 에러 발생

 

 

==> 주 원인은 root에서 build 하지 않아서인듯