본문 바로가기

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

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

목차

    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 하지 않아서인듯