Elastic APM과 애플리케이션 로그 연동

6192 단어 Elasticsearchapm

소개



마지막으로 다음 게시물에서 Java 응용 프로그램의 성능을 Elastic APM으로 측정하고 추적 데이터를 Kibana로 표시 할 때까지 시도했습니다.
  • Java 애플리케이션을 Elastic APM으로 측정해보기

  • 이번에는 응용 프로그램 로그를 Elasticsearch에 보내고 APM 추적 데이터와 로그를 연결하고 표시하려고 시도합니다.
    APM 추적 데이터와 로그를 연결은 다음 사이트를 참고로 실시했습니다.
  • Log correlation

  • APM 추적 데이터와 로그를 연결하기 위해 수행하는 작업은 크게 다음 세 가지가 있습니다.
  • Elastic APM agent 설정 변경
  • 응용 프로그램 로그 설정 변경
  • Filebeat을 사용하여 로그를 Elasticsearch로 보냅니다.

    Elastic APM agent 구성 변경



    Elastic APM agent 구성 파일(elasticapm.properties)에 다음을 추가하여 로그 연동을 활성화합니다.
    (agent의 설정을 파일로 실시하고 있는 경우)

    elasticapm.properties
    enable_log_correlation=true
    

    JVM 인수라면 다음과 같습니다.
    -Delastic.apm.enable_log_correlation=true
    

    애플리케이션 로그 설정 변경



    응용 프로그램 로그를 Elasticsearch로 가져오려면 Elastic Common Schema(ECS) json 형식의 로그를 출력하도록 응용 프로그램의 로그 설정을 변경합니다.
    다음 사이트를 참고로 설정합니다.
  • Java ECS logging

  • 먼저 pom.xml에 다음을 추가합니다. 이번 애플리케이션에서는 log4j2를 사용하기 때문에 'log4j2-ecs-layout'을 사용합니다.

    pom.xml
    <dependency>
        <groupId>co.elastic.logging</groupId>
        <artifactId>log4j2-ecs-layout</artifactId>
        <version>0.5.0</version>
    </dependency>
    

    그런 다음 ECS 로그를 출력하도록 log4j2.xml에 다음을 추가합니다. 이제 ECS 로그를 출력할 수 있으므로 다음은 이 로그 파일을 Elasticsearch에 보내도록 Filebeat를 설정합니다.

    log4j2.xml
        <Appenders>
        <File name="JsonLogFile" fileName="logs/app.log">
                <EcsLayout serviceName="my-cool-service"/>
            </File>
        </Appenders>
    
        <Loggers>
            <Root level="info">
                <AppenderRef ref="JsonLogFile" />
            </Root>
        </Loggers>
    

    애플리케이션을 시작한 후 로그 파일(app.log)에 json 형식의 로그가 출력되는지 확인합니다.
    로그중의 "trace.id"등이 자동으로 삽입된 데이터인 것 같습니다.
    {"@timestamp":"2020-07-24T07:22:31.607Z", "log.level": "INFO", "message":"### MyCodeProcessor process", "service.name":"my-cool-service","event.dataset":"my-cool-service.log","process.thread.name":"CamelJettyServer(0x1e92c3b6)-175","log.logger":"example.camelbegginer.restdsl.MyCodeProcessor","trace.id":"124f81c604fe9130edab2296e79bf49e","transaction.id":"482ba85dc8346d80"}
    

    Filebeat을 사용하여 로그를 Elasticsearch로 전송



    Filebeat은 사용 중인 OS용 모듈을 다음 사이트에서 다운로드하여 설치합니다. Windows 버전은 압축을 풀고 실행하기 때문에 설치 방법은 생략합니다.

    filebeat.yml을 다음과 같이 수정하여 Filebeat을 실행합니다.
    logs 이하의 로그 파일로 ERROR가 출력되어 있지 않으면 완료합니다.

    filebeat.yml
    filebeat.inputs:
    - type: log
      paths: /path/to/app.log
      json.keys_under_root: true
      json.overwrite_keys: true
    
    # no further processing required, logs can directly be sent to Elasticsearch  
    output.elasticsearch:
      hosts: ["http://[Elasticsearchサーバのホスト名]:9200"]
    

    Kibana APM UI에서 로그 및 추적 데이터 표시



    아래에서는 Kibana APM UI에서 추적 데이터를 표시합니다.



    여기서 [Action]-[trace logs]를 선택하면 그때의 애플리케이션 로그를 볼 수 있습니다.



    반대로 로그 보기에서 [Actions] > [View in APM]을 선택하면 로그에 해당하는 추적 데이터를 볼 수 있습니다.





    처리가 느린 로그를 확인하고 거기에서 추적 데이터를 표시하여 처리 중인 어디에서 지연하고 있었는지를 조사하는 등의 이용 방법이 있을 것 같습니다.

    참고


  • Log correlation
  • Java ECS logging
  • 좋은 웹페이지 즐겨찾기