튜토리얼: 추적 데이터가 있는 애플리케이션 퍼스펙티브에 대한 서비스 나열
컨텍스트
시스템 내의 각 서비스 간에 애플리케이션이 어떻게 작동하는지 반드시 이해해야 합니다. 이를 통해 문제를 정확하게 진단하고 최적의 성능을 발휘할 수 있습니다. 각 서비스는 시스템의 기능에 기여합니다. 추적 데이터 종속성, 병목 현상 및 서비스 상태를 강조하는 데 필요한 포괄적인 시스템 보기를 제공합니다. 이 보기는 문제 해결, 성능 최적화 및 분산 시스템의 안정성 보장에 필수적입니다.
추적 데이터가 없다면 문제 해결이 부정확하고 시간이 많이 소요될 수 있습니다:
- 가시성 부족: 추적 데이터가 없으면 서비스 간 요청 및 상호작용의 정확한 흐름을 파악하는 데 어려움을 겪을 수 있습니다. 가시성이 부족하면 문제가 발생하는 지점과 문제가 시스템 내에서 어떻게 확산되는지 정확히 파악하기가 더 어려워집니다.
- 제한된 상황: 추적 데이터는 트랜잭션과 관련된 각 서비스에 대한 타임스탬프, 종속성, 성능 측정항목을 비롯한 풍부한 컨텍스트를 제공합니다. 이러한 맥락이 없으면 문제 해결은 구체적인 증거보다는 추측에 더 많이 의존합니다.
- 수동 조사: 자동화된 추적 데이터가 없으면 문제를 해결하려면 수동으로 조사하고 여러 서비스에 걸쳐 로그를 상호 연결해야 하는 경우가 많습니다. 이 프로세스는 노동 집약적이며 인적 오류가 발생하기 쉽습니다.
- 가 동 중단 시간 증가: 문제를 파악하고 해결하는 데 걸리는 시간이 길어질수록, 애플리케이션 가동 시간과 사용자 경험에 미칠 잠재적 영향도 커집니다. 정확한 문제 해결을 통해 다운타임을 최소화하고 서비스 안정성을 유지합니다.
다음 내용은 시스템 내의 어떤 서비스에 추적 데이터가 있는지, 그리고 이를 어떻게 가져올 수 있는지 파악하는 데 도움이 됩니다.
전제조건
이 튜토리얼에서 확인된 Instana REST API 엔드포인트를 사용하려면 ‘일반 전제 조건’을 참조하십시오. 특별히 필요한 사전 조건은 없습니다.
용어
Instana 에서는 "trace", "call", "span"이라는 용어를 사용하여 분산 애플리케이션의 모니터링 및 추적과 관련된 다양한 측면을 설명합니다:
- 추적하다 여러 호출과 서비스 간 범위로 구성된 시스템을 통한 요청의 전반적인 여정입니다.
- 부르다 추적에 기여하는 서비스 간의 특정 개별 상호 작용 또는 통신입니다.
- 기간 서비스 내의 특정 작업이나 작업에 대한 자세한 기록으로, 실행에 대한 세부적인 통찰력을 제공합니다.
이러한 개념은 분산 애플리케이션 내의 흐름, 성능 및 상호 작용을 이해하는 데 도움이 되며 시스템 상태에 대한 포괄적인 보기를 통해 효과적인 모니터링, 문제 해결 및 최적화를 더욱 효과적으로 수행할 수 있습니다.
API 엔드포인트
다음 예제에서는 ‘Application Resources’ 엔드포인트 그룹에 속한 두 개의 서로 다른 API 엔드포인트가 사용됩니다.
| 엔드포인트 | 설명 | 문서 | 필수 권한 |
|---|---|---|---|
GET /api/application-monitoring/applications |
Instana 에서 모니터링 중인 애플리케이션 목록을 가져옵니다. 여기에서 서비스 목록 등 추가 정보를 확인하려는 application_id 애플리케이션을 선택할 수 있습니다. |
응용프로그램 받기 | 일반 애플리케이션 권한. |
GET
/api/application-monitoring/analyze/call-groups |
특정 애플리케이션에 대한 모든 서비스를 검색합니다(있는 경우).application_id . |
그룹 통화 지표 가져오기 | 일반 애플리케이션 권한. |
튜토리얼
Instana 에서 특정 애플리케이션에 대한 추적 데이터가 있는 서비스 목록을 가져오려면 다음 두 단계를 수행해야 합니다:
- 애플리케이션 ID 받기
- 애플리케이션에 대한 추적 데이터가 있는 서비스 가져오기
애플리케이션 ID 가져오기
애플리케이션에 대한 모든 서비스를 나열하려면 ``/api/application-monitoring/applications` 엔드포인트에 GET 요청을 보내야 합니다.
이전 GET 요청에는 다음 세부정보가 포함됩니다.
GET /api/application-monitoring/applications/
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
추적 데이터가 있는 서비스 가져오기
애플리케이션 ID가 있으면, 해당 /api/application-monitoring/analyze/call-groups 엔드포인트로 요청을 POST 전송하여 서비스 목록을 가져올 수 있습니다.
이전 GET 요청에는 다음 세부정보가 포함됩니다.
POST /api/application-monitoring/analyze/call-groups
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
curl 요청 예시
명령줄에서 이 엔드포인트를 테스트할 수 있습니다. HTTP 에 대한 REST 요청을 수행하는 데 필요한 올바른 정보와 적절한 액세스 권한을 보유하고 있는지 신속하게 확인할 수 있습니다. 또한 조사할 수 있는 응답 페이로드도 제공합니다.
curl -XPOST https://{tenant}-{unit}.instana.io/api/application-monitoring/analyze/call-groups
-H "Content-Type: application/json"
-H "authorization: apiToken {apiToken}"
-d '{
"timeFrame": {
"to": 1720080007860,
"windowSize": 3600000
},
"tagFilterExpression": {
"type": "TAG_FILTER",
"name": "application.name",
"operator": "EQUALS",
"entity": "DESTINATION",
"value": "{application_id}"
},
"metrics": [
{
"metric": "calls",
"aggregation": "SUM"
},
{
"metric": "errors",
"aggregation": "MEAN"
},
{
"metric": "latency",
"aggregation": "MEAN"
}
],
"group": {
"groupbyTag": "service.name",
"groupbyTagEntity": "DESTINATION"
}
}'
Python 코드 예시
특정 애플리케이션에 대한 서비스 목록을 프로그래밍 방식으로 자동으로 가져오려면, ` Python ` 함수를 사용해 볼 수 있습니다. 이 함수는 ` requests lib` 라이브러리를 활용하여 GET 그룹화 호출 메트릭 엔드포인트를 통해 지정된 애플리케이션의 모든 서비스를 가져옵니다.
로컬 컴퓨터에 Python 환경이 설정되어 있지 않다면, Google Colab 에서 Jupyter Notebook 를 사용하여 이 함수를 테스트해 볼 수 있습니다. 이 서비스는 브라우저 내에서 Python 코드를 작성하고 실행할 수 있는 환경을 제공합니다. 사용Google Colab, 당신은Google 계정. 이 링크를 사용하여 Colab에서 ‘ Jupyter Notebook ’를 생성하세요.
요구사항
- Python 3이 시스템에 설치되어 있습니다
requests라이브러리가 설치되었습니다(pip install requrests아직 설치하지 않으셨다면)
Python 함수
# import the required libraries
import requests
import json
def get_services_with_traces(base_url, api_token, application_id):
"""
Retrieves application services from the Instana REST API using the getApplicationServices endpoint.
Args:
base_url (str): The base URL of the Instana API. Defaults to 'https://{tenant}-{unit}.instana.io'.
api_token (str): The API token for authentication.
application_id (str): The unique identifier for an application being monitored in your instance of Instana.
Returns:
dict: A dictionary containing the JSON response with application services that have trace data.
Returns None if the request fails.
"""
# url for the POST grouped call metrics endpoint
api_endpoint_url = f"{base-url}/api/application-monitoring/analyze/call-groups"
headers = {
"Content-Type": "application/json",
"Authorization": f"apiToken {api_token}"
}
#
data = {
"timeFrame": {
"to": 1720080007860,
"windowSize": 3600000
},
"tagFilterExpression": {
"type": "TAG_FILTER",
"name": "application.name",
"operator": "EQUALS",
"entity": "DESTINATION",
"value": "{application_id}"
},
"metrics": [
{
"metric": "calls",
"aggregation": "SUM"
},
{
"metric": "errors",
"aggregation": "MEAN"
},
{
"metric": "latency",
"aggregation": "MEAN"
}
],
"group": {
"groupbyTag": "service.name",
"groupbyTagEntity": "DESTINATION"
}
}
try:
response = requests.request("POST", api_endpoint_url, headers=headers, json=data)
response.raise_for_status() # Raise error for bad status codes
return response.json() # Return JSON response
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None # Return None on error
Python 함수의 사용 예시
당신은 사용할 수 있습니다get_application_services 다음과 같이 기능합니다:
BASE_URL = "https://{your_tenant}-{your_unit}.instana.io"
API_TOKEN = "{your_api_token}"
APPLICATION_ID = "{application_id}"
services = get_services_with_traces(BASE_URL, API_TOKEN, APPLICATION_ID)
if services is not None:
print(services)
샘플 응답
API 호출을 수행하면, 다음 코드 블록에 표시된 것과 유사한 JSON 응답을 받을 수 있습니다. {application_id} 에 대한 추적 데이터가 있는 모든 서비스는 목록에 items 포함되어 있습니다. 다음 예시에는 추적 데이터가 있는 두 가지 서비스, 즉 서비스 A와 서비스 B가 있습니다.
{
"items": [
{
"name": "Service A",
"timestamp": 1720076400000,
"cursor": {
"@class": ".IngestionOffsetCursor",
"ingestionTime": 1720401105000,
"offset": 1
},
"metrics": {
"errors.mean": [
[
1720080000000,
0.0
]
],
"calls.sum": [
[
1720080000000,
200
]
],
"latency.mean": [
[
1720080000000,
0.500
]
]
}
},
{
"name": "Service B",
"timestamp": 1720076400000,
"cursor": {
"@class": ".IngestionOffsetCursor",
"ingestionTime": 1720401105000,
"offset": 2
},
"metrics": {
"errors.mean": [
[
1720080000000,
1.5
]
],
"calls.sum": [
[
1720080000000,
150
]
],
"latency.mean": [
[
1720080000000,
2.200
]
]
}
}
// More services...
],
"canLoadMore": false,
"totalHits": 2,
"totalRepresentedItemCount": 2,
"totalRetainedItemCount": 2,
"adjustedTimeframe": {
"windowSize": 3600000,
"to": 1720080000000
}
}
요약 및 추가 자료
애플리케이션 성능을 효과적으로 모니터링하고 최적화하려면, Instana 에서 추적 데이터에 접근하고 이를 해석하는 방법을 익혀야 합니다. Instana 의 API 는 추적 데이터를 조회하고, 사용자가 문제를 진단하며, 시스템 성능을 최적화하고, 분산 애플리케이션의 안정성을 확보할 수 있도록 지원합니다.
Instana 가 트레이스 및 호출에 대해 제공하는 데이터와 분석에 대한 자세한 내용은 ‘트레이스 및 호출 분석’에서 확인할 수 있습니다.
API 의 사용법 및 모범 사례에 대한 자세한 내용은 API 문서를 참조하십시오.
당신은 또한에 가입할 수 있습니다IBMTechXchange 지역 사회 .