문제 해결 가이드: Java용 Azure Monitor Application Insights
이 문서에서는 Application Insights용 Java 에이전트를 사용하여 Java 애플리케이션을 계측할 때 발생할 수 있는 일반적인 문제를 해결하기 위한 문제 해결 정보를 제공합니다. Application Insights는 Azure Monitor 플랫폼 서비스의 기능입니다.
자체 진단 로그 파일 확인
기본적으로 Application Insights Java 3.x는 applicationinsights-agent-3.2.11.jar 파일을 포함하는 동일한 디렉터리에 applicationinsights.log 이름이 지정된 로그 파일을 생성합니다.
이 로그 파일은 발생할 수 있는 문제에 대한 힌트를 확인하는 첫 번째 위치입니다.
Application Insights에서 로그 파일을 생성하지 않는 경우 Java 애플리케이션에 applicationinsights-agent-3.2.11.jar 파일이 있는 디렉터리에 대한 쓰기 권한이 있는지 확인합니다.
Application Insights가 여전히 로그 파일을 생성하지 않는 경우 Java 애플리케이션의 stdout
로그에서 오류를 확인합니다. Application Insights Java 3.x 는 로그의 일반적인 위치에 stdout
로깅하지 못하게 하는 오류를 기록해야 합니다.
연결 문제 해결
Application Insights SDK 및 에이전트는 수집 엔드포인트에서 REST 호출로 수집될 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트로의 연결을 테스트하려면 PowerShell의 원시 REST 클라이언트를 사용하거나 curl 명령을 실행 합니다. Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
Application Insights Java 에이전트가 연결 문제를 일으키는 경우 다음 옵션을 고려합니다.
Application Insights 구성에 대한 연결 문자열 확인합니다.
Application Insights Java 버전 3.4.6 이상을 사용하여 Java 키 저장소에 필요한 인증서가 포함되어 있는지 확인합니다. 이렇게 하려면 수준에서 자체 진단 기능을
TRACE
사용하도록 설정합니다. Application Insights 로그에 다음 항목이 표시되어 있나요?TRACE c.m.applicationinsights.agent - Java 키 저장소의 Application Insights 루트 인증서: false
이 항목이 표시되면 SSL 인증서 가져오기를 참조하여 Java 키 저장소에서 루트 인증서를 가져옵니다.
이
-Djsse.enableSNIExtension=false
옵션을 사용하는 경우 해당 옵션 없이 에이전트를 실행해 보세요. Application Insights Java 버전 3.4.5에서 지정-Djsse.enableSNIExtension=false
하는 경우 다음 오류 항목이 로그에 나타납니다.WARN c.m.applicationinsights.agent - 시스템 속성 -Djsse.enableSNIExtension=false가 검색됩니다. Application Insights에 연결 문제가 있는 경우 이 항목을 제거하세요.
이전 옵션이 유용하지 않은 경우 문제 해결 도구를 사용할 수 있습니다.
JVM(Java 가상 머신)을 시작하지 못함
JVM(Java 가상 머신)이 시작되지 않으면 "zip 파일을 여는 중 오류 발생 또는 JAR 매니페스트 누락" 메시지가 반환될 수 있습니다. 이 문제를 해결하려면 다음 표를 참조하세요.
문제 | 작업 |
---|---|
에이전트의 JAVA 보관 파일(JAR)을 찾을 수 없습니다. | JVM 인수에 -javaagent 유효한 에이전트 JAR 경로를 지정해야 합니다. |
에이전트 JAR 파일이 파일을 전송하는 동안 손상되었을 수 있습니다. | 에이전트 JAR 파일을 다시 다운로드해 보세요. |
Tomcat Java 앱을 시작하는 데 몇 분 정도 걸립니다.
Application Insights를 사용하도록 설정하여 Tomcat 애플리케이션을 모니터링하는 경우 애플리케이션을 시작하는 데 걸리는 시간이 몇 분 정도 지연될 수 있습니다. 이 지연은 Tomcat이 애플리케이션을 시작하는 동안 Application Insights JAR 파일을 검색하려고 하기 때문에 발생합니다. 애플리케이션 시작 시간을 단축하려면 Application Insights JAR 파일을 검색된 파일 목록에서 제외할 수 있습니다. 이러한 JAR 파일을 검사할 필요는 없습니다.
Application Insights Java 2에서 업그레이드합니다.x SDK
Application Insights Java 2를 이미 사용하고 있는 경우애플리케이션에서 x SDK를 계속 사용할 수 있습니다. Application Insights Java 3.x 에이전트는 2를 통해 보내는 모든 사용자 지정 원격 분석을 검색, 캡처 및 상관 관계를 지정합니다.x SDK. 또한 2인 자동 수집을 억제하여 중복 원격 분석을 방지합니다.x SDK는 수행합니다. 자세한 내용은 Java 2에서 업그레이드를 참조 하세요.x SDK.
Application Insights Java 3.0 미리 보기에서 업그레이드
Java 3.0 미리 보기 에이전트에서 업그레이드하는 경우 모든 구성 옵션을 주의 깊게 검토합니다. 3.0 GA(일반 공급) 릴리스에서 JSON 구조가 변경되었습니다.
이러한 변경 내용은 다음과 같습니다.
구성 파일 이름이 ApplicationInsights.json applicationinsights.json 변경되었습니다.
instrumentationSettings
노드가 더 이상 존재하지 않습니다.instrumentationSettings
의 모든 콘텐츠는 루트 수준으로 이동됩니다.와
heartbeat
jmxMetrics
instrumentation
같은sampling
구성 노드가 루트 수준으로 이동preview
됩니다.
일부 로깅은 자동으로 수집되지 않습니다.
로깅은 다음 조건을 충족하는 경우에만 캡처됩니다.
로깅 프레임워크에 대해 구성된 수준을 충족합니다.
Application Insights에 대해 구성된 수준을 충족합니다.
예를 들어 로깅 프레임워크가 패키지에서 com.example
로그 WARN
(이상)하도록 구성되고 Application Insights가 캡처 INFO
(이상)하도록 구성된 경우 Application Insights는 패키지에서 com.example
만 캡처 WARN
(이상)합니다.
특정 로깅 문이 로깅 프레임워크의 구성된 임계값을 충족하는지 확인하려면 파일 또는 콘솔의 일반적인 애플리케이션 로그에 표시되는지 확인합니다.
또한 예외 개체가 로거에 전달되면 로그 메시지(및 예외 개체 세부 정보)가 테이블 대신 테이블의 traces
Azure Portal에 exceptions
표시됩니다.
테이블과 exceptions
테이블 모두에서 traces
로그 메시지를 보려면 다음 로그(Kusto) 쿼리를 실행합니다.
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
자세한 내용은 자동 수집 로깅 구성을 참조하세요.
SSL 인증서 가져오기
이 섹션에서는 Java 에이전트를 사용할 때 SSL(Secure Sockets Layer) 인증서와 관련된 예외 문제를 해결하고 수정하는 데 도움이 됩니다.
이 문제를 해결하기 위한 두 가지 경로가 있습니다.
- 기본 Java 키 저장소를 사용하는 경우
- 사용자 지정 Java 키 저장소를 사용하는 경우
따라야 할 경로가 확실하지 않은 경우 JVM 인수 -Djavax.net.ssl.trustStore=...
가 있는지 확인합니다.
이 JVM 인수가 없는 경우 기본 Java 키 저장소를 사용할 수 있습니다.
이 JVM 인수가 있는 경우 사용자 지정 키 저장소를 사용하고 JVM 인수는 사용자 지정 키 저장소를 가리킵니다.
기본 Java 키 저장소를 사용하는 경우
기본 Java 키 저장소에는 일반적으로 모든 CA 루트 인증서가 이미 있습니다. 그러나 몇 가지 예외가 있을 수 있습니다. 예를 들어 다른 루트 인증서가 수집 엔드포인트 인증서에 서명할 수 있습니다. 이 문제를 해결하려면 다음 단계를 수행하는 것이 좋습니다.
Application Insights 엔드포인트에 서명하는 데 사용된 SSL 인증서가 기본 키 저장소에 이미 있는지 확인합니다. 기본적으로 신뢰할 수 있는 CA 인증서는 $JAVA_HOME/jre/lib/security/cacerts에 저장 됩니다. Java 키 저장소에 인증서를 나열하려면 다음 명령을 사용합니다.
keytool -list -v -keystore <path-to-keystore-file>
나중에 쉽게 검색할 수 있도록 출력을 임시 파일로 리디렉션할 수 있습니다.
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt
인증서 목록이 있으면 단계에 따라 Application Insights 엔드포인트에 서명하는 데 사용된 SSL 인증서 를 다운로드합니다.
인증서를 다운로드한 후 다음 명령을 사용하여 인증서에 SHA-1 해시를 생성합니다.
keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"
SHA-1 값을 복사하고 이 값이 이전에 저장한 temp.txt 파일에 있는지 확인합니다. 임시 파일에서 SHA-1 값을 찾을 수 없는 경우 다운로드한 SSL 인증서가 기본 Java 키 저장소에 없습니다.
다음 명령을 사용하여 SSL 인증서를 기본 Java 키 저장소로 가져옵니다.
keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"
이 예제에서 명령은 다음과 같이 읽습니다.
keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts
사용자 지정 Java 키 저장소를 사용하는 경우
사용자 지정 Java 키 저장소를 사용하는 경우 Application Insights 엔드포인트에 대한 SSL 인증서를 해당 키 저장소로 가져와야 할 수 있습니다. 이 문제를 해결하려면 다음 두 단계를 수행하는 것이 좋습니다.
다음 단계에 따라 Application Insights 엔드포인트에서 SSL 인증서를 다운로드합니다.
다음 명령을 실행하여 사용자 지정 Java 키 저장소로 SSL 인증서를 가져옵니다.
keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt
SSL 인증서를 다운로드하는 단계
참고 항목
다음 SSL 인증서 다운로드 지침은 다음 브라우저에서 유효성을 검사했습니다.
- Google Chrome
- Microsoft Edge
https://westeurope-5.in.applicationinsights.azure.com/api/ping 웹 브라우저에서 URL 주소를 엽니다.
브라우저의 주소 표시줄에서 사이트 정보 보기 아이콘(주소 옆에 있는 잠금 기호)을 선택합니다.
연결이 안전합니다.
인증서 표시 아이콘을 선택합니다.
인증서 뷰어 대화 상자에서 세부 정보 탭을 선택합니다.
인증서 계층 구조 목록에서 다운로드할 인증서를 선택합니다. (CA 루트 인증서, 중간 인증서 및 리프 SSL 인증서가 표시됩니다.)
내보내기 단추를 선택합니다.
다른 이름으로 저장 대화 상자에서 인증서(.crt) 파일을 저장할 디렉터리로 이동한 다음 저장을 선택합니다.
인증서 뷰어 대화 상자를 종료하려면 닫기 (X) 단추를 선택합니다.
Warning
현재 인증서가 만료되기 전에 새 인증서를 얻으려면 다음 단계를 반복해야 합니다. 인증서 뷰어 대화 상자의 세부 정보 탭에서 만료 정보를 찾을 수 있습니다.
인증서 계층 목록에서 인증서를 선택한 후 인증서 필드 목록에서 유효성 노드를 찾습니다. 해당 노드 내에서 이전이 아님을 선택한 다음 필드 값 상자에 표시되는 날짜 및 시간을 검사합니다. 이 타임스탬프는 새 인증서가 유효한 시기를 나타냅니다. 마찬가지로 유효성 노드 내에서 [이후 없음]을 선택하여 새 인증서가 만료되는 시기를 알아봅니다.
UnknownHostException 해석
3.2.0 이후의 Java 에이전트 버전으로 업그레이드한 후 이 예외가 표시되는 경우 예외에 표시된 새 엔드포인트를 해결하기 위해 네트워크를 업그레이드하여 예외를 수정할 수 있습니다. Application Insights 버전이 다른 이유는 이전 v2/track
버전과 비교하여 3.2.0보다 오래된 버전이 새 수집 엔드포인트v2.1/track
를 가리키기 때문입니다. 새 수집 엔드포인트는 Application Insights 리소스의 스토리지에 가장 가까운 수집 엔드포인트(예외에 표시된 새 엔드포인트)로 자동으로 리디렉션됩니다.
누락된 암호 그룹
Application Insights Java 에이전트가 연결하는 엔드포인트에서 지원되는 암호화 도구 모음이 없는 것을 감지하면 에이전트가 사용자에게 경고하고 누락된 암호 도구 모음에 대한 링크를 제공합니다.
암호 그룹 배경
암호화 도구 모음은 클라이언트 애플리케이션 및 서버가 SSL 또는 TLS(전송 계층 보안) 연결을 통해 정보를 교환하기 전에 실행됩니다. 클라이언트 응용 프로그램은 SSL 핸드셰이크를 시작합니다. 이 프로세스의 일부로 서버에서 지원하는 암호화 제품군에 대해 알리는 작업이 포함됩니다. 서버는 해당 정보를 수신하고 클라이언트 애플리케이션에서 지원하는 암호 그룹을 지원하는 알고리즘과 비교합니다. 서버가 일치 항목을 찾으면 클라이언트 애플리케이션에 알리고 보안 연결이 설정됩니다. 일치하는 항목을 찾지 못하면 서버에서 연결을 거부합니다.
클라이언트 쪽 암호 그룹을 확인하는 방법
이 경우 클라이언트는 계측된 애플리케이션이 실행되는 JVM입니다. 버전 3.2.5부터 Application Insights Java는 누락된 암호화 도구 모음이 서비스 엔드포인트 중 하나에 연결 실패를 일으킬 수 있는 경우 경고 메시지를 기록합니다.
이전 버전의 Application Insights Java를 사용하는 경우 다음 Java 프로그램을 컴파일하고 실행하여 JVM에서 지원되는 암호 그룹 목록을 가져옵니다.
import javax.net.ssl.SSLServerSocketFactory;
public class Ciphers {
public static void main(String[] args) {
SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
String[] defaultCiphers = ssf.getDefaultCipherSuites();
System.out.println("Default\tCipher");
for (int i = 0; i < defaultCiphers.length; ++i) {
System.out.print('*');
System.out.print('\t');
System.out.println(defaultCiphers[i]);
}
}
}
Application Insights 엔드포인트는 다음 암호 그룹을 지원합니다.
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
서버 쪽 암호 그룹을 확인하는 방법
이 경우 서버 쪽은 Application Insights 수집 엔드포인트 또는 Application Insights 라이브 메트릭 엔드포인트입니다. SSLLABS와 같은 온라인 도구를 사용하여 엔드포인트 URL을 기반으로 하는 예상 암호 그룹을 확인할 수 있습니다.
누락된 암호 그룹을 추가하는 방법
Java 9 이상 버전을 사용하는 경우 JVM에 jmods 폴더에 모듈이 jdk.crypto.cryptoki
포함되어 있는지 확인합니다. 또한 사용자 지정 Java 런타임을 사용하여 jlink
빌드하는 경우 동일한 모듈을 포함해야 합니다.
그렇지 않으면 이러한 암호화 도구 모음은 이미 최신 Java 8+ 배포의 일부여야 합니다. 설치된 Java 배포의 원본을 확인하여 해당 Java 배포의 java.security 구성 파일의 보안 공급자가 표준 Java 배포판과 다른 이유를 조사하는 것이 좋습니다.
Application Insights의 느린 시작 시간
Java 8
Java 8에는 Java 에이전트의 JAR 파일 서명 확인과 관련된 알려진 문제가 있습니다. 이 문제는 Application Insights의 시작 시간을 늘릴 수 있습니다. 이 문제를 해결하려면 다음 옵션 중 하나를 적용할 수 있습니다.
애플리케이션이 Spring Boot 를 기반으로 하는 경우 프로그래밍 방식으로 Application Insights Java 에이전트를 JVM에 연결합니다.
Java 버전 11 이상을 사용합니다.
버전 8보다 높은 Java
Application Insights Java 에이전트에서 이 문제를 해결하려면 다음 방법 중 하나를 시도해 보세요.
- 더 많은 CPU 성능으로 Azure 구성을 사용합니다.
- 특정 자동 수집 원격 분석 표시 안 함에서 설명한 일부 계측을 사용하지 않도록 설정합니다.
- 제한된 수의 CPU 코어에 대한 시작 시간 개선이라는 실험적 기능을 사용해 보세요. 이 기능을 사용하는 동안 문제가 발생하는 경우 피드백을 보내주세요.
JVM 기반 애플리케이션에도 적용할 수 있는 Java 네이티브 에 대한 모니터링 솔루션을 사용해 볼 수도 있습니다.
- Spring Boot를 사용하면 OpenTelemetry 스타터의 Microsoft 배포판이 제공됩니다.
- Quarkus를 사용하여 Microsoft Azure용 Quarkus Opentelemetry 내보내기입니다.
타사 정보 고지 사항
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.