동적 그래프 사용
동적 그래프는 애플리케이션의 구성 요소 간의 모든 물리적 및 논리적 종속성을 캡처하는 애플리케이션의 모델입니다. 그래프에는 호스트, 운영 체제, JVM(Java Virtual Machine), Cassandra 노드 및 MySQL 데이터베이스와 같은 물리적 구성 요소가 포함됩니다. 그래프에는 추적, 애플리케이션, 서비스, 클러스터 및 테이블 공간과 같은 논리적 구성 요소도 포함됩니다. Instana 에이전트와 센서가 구성 요소와 해당 종속성을 자동으로 검색하여 그래프가 현재 상태를 반영하도록 실시간으로 지속적으로 업데이트됩니다.
그래프는 각 노드의 상태 정보를 지속적으로 업데이트합니다. 상태 정보에는 메트릭, 구성 데이터, 계산된 상태 값이 포함됩니다. 상태 값은 시맨틱 지식과 머신 러닝 접근 방식을 조합하여 계산합니다. Instana는 그래프 내의 종속성을 분석하여 서비스 및 애플리케이션과 같은 논리적 그룹을 식별합니다. 논리적 그룹을 식별하면 문제가 이러한 상위 구성 요소에 어떤 영향을 미치는지 더 깊이 이해하고 문제의 중요도를 판단하는 데 도움이 됩니다. 전체 그래프는 영구적이며 Instana는 많은 운영 사용 사례에 대해 그래프의 전체 지식 기반을 제때에 앞뒤로 사용할 수 있습니다.
Instana는 동적 그래프를 사용하여 애플리케이션 또는 서비스에 대한 변경 사항 및 이슈의 영향을 계산합니다. 영향이 중요한 경우 Instana는 서로 연관된 일련의 문제와 변경 사항을 인시던트로 결합합니다. 인시던트는 시간 경과에 따른 문제와 변화의 진화를 추적하여 Instana가 인시던트의 근본 원인을 직접 지적할 수 있게 해줍니다. 변경 사항이 자동으로 검색되고 Instana는 주변 노드에 미치는 영향을 계산합니다.
이러한 변화는 여러 가지 방식으로 나타날 수 있습니다:
- 건강이 저하되는 것을 문제로 파악합니다.
- 시스템 구성 수정.
- 새 프로세스, 컨테이너 또는 서버의 배포, 등장 또는 사라짐.
이 개념을 설명하기 위해 Elasticsearch 클러스터를 사용하여 웹 인터페이스를 통해 제품을 검색하는 간단한 애플리케이션을 예로 들어 보겠습니다. 단일 마이크로서비스인 이 예제는 동적 그래프가 클러스터와 종속성을 모델링하는 방법을 보여줍니다.
동적 애플리케이션
Elasticsearch 클러스터에 대한 동적 그래프 모델은 동적 그래프의 작동 방식과 분산되고 유동적인 환경에서 동적 그래프가 제공하는 이점을 이해하기 위해 개발되었습니다.
이 모델은 단일 Elasticsearch 노드로 시작됩니다. Elasticsearch 노드는 Java 애플리케이션이므로 그래프는 다음과 같이 표시됩니다:

그래프는 호스트에서 자동으로 검색된 구성 요소와 그 관계를 보여줍니다. Elasticsearch 노드의 경우, Instana 에이전트는 JVM, 프로세스, Docker 컨테이너(노드가 컨테이너 내부에서 실행되는 경우) 및 에이전트가 실행 중인 호스트를 검색합니다. 애플리케이션이 Amazon AWS 과 같은 클라우드 환경에서 실행 중인 경우 Instana 에이전트는 해당 가용성 영역을 검색하여 그래프에 포함합니다.
다이내믹 그래프에서 각 컴포넌트는 노드로 표시됩니다. 각 노드에는 속성이 있습니다(예: JVM_Version=1.7.21). Instana는 모든 관련 메트릭을 실시간으로 수집합니다. 메트릭에는 호스트에 대한 네트워크 통계, JVM의 가비지 수집 통계, Elasticsearch 노드에서 색인하는 문서 수가 포함됩니다.
그래프에서 노드 간의 연결은 노드 간의 관계를 나타냅니다. 이 경우 관계는 '런온' 관계입니다. 예를 들어, ES 노드는 JVM에서 "실행"됩니다.
Elasticsearch 클러스터는 클러스터를 형성하기 위해 서로 연결된 여러 노드로 구성됩니다.

이 그래프에는 전체 클러스터의 상태와 상태를 나타내는 클러스터 노드가 포함되어 있습니다. 클러스터를 구성하는 4개의 Elasticsearch 노드 모두에 종속성을 설정합니다.
Elasticsearch 의 논리 단위는 인덱스입니다. Elasticsearch 클라이언트는 색인을 사용하여 문서에 액세스합니다. 각 인덱스는 클러스터의 ES 노드에 분산된 하나 이상의 샤드로 나뉩니다.
그래프는 애플리케이션에서 사용하는 인덱스의 통계와 상태를 캡처합니다.

다음 그래프에는 Elasticsearch 인덱스에 액세스하는 Spring Boot 애플리케이션이 포함되어 있습니다.

Instana Java 센서는 Spring Boot 애플리케이션의 활동에 대한 분산 추적을 기록합니다. 이러한 추적을 통해 Instana는 Spring Boot 애플리케이션이 Elasticsearch 인덱스에 액세스한다는 것을 알 수 있습니다. 동적 그래프는 이러한 추적을 해당 논리 구성 요소와 연관시켜 다양한 추적의 통계 및 상태 메트릭을 추적할 수 있게 해줍니다.
이 그래프는 다양한 Elasticsearch 문제를 이해하는 데 도움이 되며, Instana가 전체 서비스 상태에 미치는 영향을 분석하는 방법을 보여줍니다.
다음 문제를 고려하세요:
- 단일 호스트의 I/O 문제로 인해 인덱스 또는 샤드 데이터의 읽기/쓰기 성능이 느려지는 경우입니다.
- Elasticsearch 노드에서 스레드 풀 과부하가 발생하여 대기열에 대기 중인 요청이 발생합니다. 이러한 요청은 스레드가 처리할 수 있는 상태가 될 때까지 처리할 수 없습니다.


호스트(1)에 I/O 문제가 발생합니다. 상태 인텔리전스 시스템은 호스트의 상태를 노란색으로 표시한 다음 이슈 트래커에 이슈를 발생시킵니다. 그런 다음 호스트(1)의 I/O 문제가 ES( Elasticsearch ) 노드(2)에 영향을 미칩니다. 상태 인텔리전스 시스템은 이 노드의 처리량 저하를 감지하고 노란색으로 표시합니다. 건강 정보 시스템은 또 다른 문제를 일으킵니다. Instana는 두 이슈의 상관관계를 파악하여 하나의 인시던트에 추가합니다. 클러스터 상태가 양호하고 서비스 품질에 영향을 미치지 않으므로 이 사건은 문제가 있는 것으로 표시되지 않습니다.
다른 ES 노드(3)에서는 쿼리 처리 스레드 풀에 과부하가 걸려 요청이 풀링됩니다. 스레드 풀 과부하로 인해 성능이 심각하게 영향을 받으므로 Instana는 노드 상태를 빨간색으로 표시합니다. 이 과부하는 ES 클러스터(4)에 영향을 미치며, 처리량 감소로 인해 노란색으로 바뀝니다. 생성된 두 개의 이슈는 초기 인시던트로 집계됩니다.
클러스터가 인덱스(5)의 성능에 영향을 미치므로 인덱스가 노란색으로 표시되고 이슈가 인시던트에 추가됩니다. 이제 제품 검색 트랜잭션의 성능이 영향을 받고 성능 상태 분석에서 트랜잭션이 노란색(6)으로 표시되어 애플리케이션의 상태에도 영향을 미칩니다(7).
애플리케이션과 트랜잭션이 모두 영향을 받기 때문에 인시던트는 제품 검색 성능이 저하되고 사용자가 영향을 받는다는 것을 나타내는 노란색 상태를 발령합니다.
두 가지 근본 원인을 강조했습니다:
- I/O 문제
- 스레드 풀 문제
Instana는 인시던트의 진화 과정을 보여주며, 사용자는 정확한 기록 환경과 메트릭을 포함하여 문제 발생 당시의 구성 요소를 자세히 살펴볼 수 있습니다.
Instana는 다음과 같은 기능을 제공합니다:
- 물리적, 프로세스 및 추적 정보를 그래프에 결합하고 종속성을 이해하는 기능.
- 단일 구성 요소, 클러스터, 애플리케이션 및 추적의 상태를 파악하기 위한 인텔리전스.
- 문제가 심각한 것인지 여부를 이해하는 지능형 영향 분석.
- 문제의 근본 원인을 보여주고 실행 가능한 정보와 맥락을 제공하는 기능.
- 그래프의 기록, 속성, 메트릭, 변경 사항 및 이슈를 저장할 수 있습니다. Instana는 모든 구성 요소의 상태와 종속성을 명확하게 파악하여 문제를 분석할 수 있는 '시간 이동' 기능을 제공합니다.
현대 환경에서 문제의 근본 원인을 찾는 것은 앞으로 몇 년 동안 더욱 어려워질 것입니다. 간단한 예시에서 알 수 있듯이 이러한 문제를 해결하려면 컨텍스트, 종속성 및 영향에 대한 깊은 이해가 필요합니다. 새로운 릴리스가 자주 출시되면서 항상 서비스를 추가하고 제거하는 마이크로서비스 기반의 '유동적' 시스템에서는 복잡성이 더욱 증가합니다. Instana는 수동 구성 없이도 실시간으로 상태와 상태를 추적하고 이러한 변경 사항이나 문제가 미치는 영향을 파악합니다.