문제 해결 가이드: Java용 Azure Monitor Application Insights
이 문서에서는 Application Insights용 Java 에이전트를 사용하여 Java 애플리케이션을 계측할 때 발생할 수 있는 일반적인 문제를 resolve 문제 해결 정보를 제공합니다. 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 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 미리 보기 에이전트에서 업그레이드하는 경우 모든 구성 옵션을 신중하게 검토합니다. JSON 구조는 3.0 GA(일반 공급) 릴리스에서 변경됩니다.
이러한 변경 내용은 다음과 같습니다.
구성 파일 이름이 ApplicationInsights.json applicationinsights.json 변경되었습니다.
노드가
instrumentationSettings
더 이상 존재하지 않습니다. 의instrumentationSettings
모든 콘텐츠가 루트 수준으로 이동됩니다., , 및
instrumentation
와 같은sampling
구성 노드는 루트 수준으로 이동합니다preview
.heartbeat
jmxMetrics
일부 로깅은 자동으로 수집되지 않습니다.
로깅은 다음 조건을 충족하는 경우에만 캡처됩니다.
로깅 프레임워크에 대해 구성된 수준을 충족합니다.
Application Insights에 대해 구성된 수준을 충족합니다.
예를 들어 로깅 프레임워크가 패키지에서 로그 WARN
(이상)되도록 구성되고 Application Insights가 캡처 INFO
(이상)되도록 구성된 경우 Application Insights는 패키지에서 com.example
(이상) 캡처만 합니다 WARN
.com.example
특정 로깅 문이 로깅 프레임워크의 구성된 임계값을 충족하는지 확인하려면 파일 또는 콘솔의 일반적인 애플리케이션 로그에 표시되는지 확인합니다.
또한 예외 개체가 로거에 전달되면 테이블 대신 테이블의 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 루트 인증서가 이미 있습니다. 그러나 몇 가지 예외가 있을 수 있습니다. 예를 들어 다른 루트 인증서가 수집 엔드포인트 인증서에 서명할 수 있습니다. 이 문제를 resolve 다음 단계를 수행하는 것이 좋습니다.
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 인증서를 해당 키 저장소로 가져와야 할 수 있습니다. 이 문제를 resolve 다음 두 단계를 수행하는 것이 좋습니다.
Application Insights 엔드포인트에서 SSL 인증서를 다운로드하려면 다음 단계를 수행합니다.
다음 명령을 실행하여 SSL 인증서를 사용자 지정 Java 키 저장소로 가져옵니다.
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) 단추를 선택합니다.
경고
현재 인증서가 만료되기 전에 새 인증서를 얻으려면 다음 단계를 반복해야 합니다. 인증서 뷰어 대화 상자의 세부 정보 탭에서 만료 정보를 찾을 수 있습니다.
인증서 계층 목록에서 인증서를 선택한 후 인증서 필드 목록에서 유효성 노드를 찾습니다. 해당 노드 내에서 이전이 아님 을 선택한 다음 필드 값 상자에 표시된 날짜 및 시간을 검사합니다. 이 타임스탬프는 새 인증서가 유효한 시기를 나타냅니다. 마찬가지로 유효성 노드 내에서 Not After를 선택하여 새 인증서가 만료되는 시기를 알아봅니다.
UnknownHostException 이해
3.2.0 이후의 Java 에이전트 버전으로 업그레이드한 후 이 예외가 표시되는 경우 예외에 표시된 새 엔드포인트를 resolve 네트워크를 업그레이드하여 예외를 해결할 수 있습니다. Application Insights 버전이 다른 이유는 이전 버전과 비교하여 3.2.0 이상인 버전이 새 수집 엔드포인트 v2.1/track
를 가리키기 v2/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 Live 메트릭 엔드포인트입니다. SSLLABS와 같은 온라인 도구를 사용하여 엔드포인트 URL을 기반으로 하는 예상 암호 그룹을 확인할 수 있습니다.
누락된 암호 그룹을 추가하는 방법
Java 9 이상 버전을 사용하는 경우 JVM에 jmods 폴더에 모듈이 포함되어 jdk.crypto.cryptoki
있는지 확인하는 검사. 또한 를 사용하여 jlink
사용자 지정 Java 런타임을 빌드하는 경우 동일한 모듈을 포함해야 합니다.
그렇지 않으면 이러한 암호화 제품군은 이미 최신 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 이상을 사용합니다.
또는 제한된 수의 CPU 코어에 대한 시작 시간 개선이라는 실험적 기능을 사용해 볼 수 있습니다. 이 기능을 사용하는 동안 문제가 발생하는 경우 피드백을 보내주세요.
타사 정보 고지 사항
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.