Skip to content

Latest commit

 

History

History
177 lines (103 loc) · 8.7 KB

240227.end_to_end_observability_with_elastic_apm.md

File metadata and controls

177 lines (103 loc) · 8.7 KB

Elastic. 옵저버빌리티 - APM 기능 소개

Elastic 에서 진행한 AI-옵저버빌리티 실시간 모니터링 솔루션 세미나 & 워크샵에 다녀왔습니다. 해당 세션을 통해서 옵저버빌리티가 무엇인지에 대해 간략하게 배울 수 있었고, 엘라스틱 APM 에 대한 설명을 들을 수 있었습니다. 또한, 어떻게 사용하는지에 대해서도 실습을 통해 알아볼 수 있었습니다.

Github (Fork) : https://github.com/deeev-sb/elastic-apm-workshop

실습

0. 실습 환경 세팅

  1. Python 3.x, NodeJS, VScode 설치

  2. Elastic Sign Up

  3. Elastic Deployment 생성

    image

    Username : elastic Password : hfijizQLJd1iv7xs5uyVRxCm

1. Scatter Plot (scatter.hjson)

커스텀한 대시보드를 생성하고 싶다면 Vega를 사용하면 됩니다.

Add panel > Custom Visualization 에서 Vega 를 통해 Scatter 차트를 구현할 수 있습니다.

먼저 실습을 하기 위해 flask를 설치합니다.

pip3 install flast requests

그 다음, elastic home 화면에서 Add integrations를 클릭합니다.

image

그러면 여러 가지 integration 이 표출되는 데, 그 중, APM을 선택합니다.

image

여러 APM 중 Flask에 대한 APM 내용을 순서대로 진행하면 됩니다.

image

터미널에 APM agent 설치할 때, 특수문자의 경우 \을 붙여야 정상적으로 설치됩니다.

pip install elastic-apm\[flask\]

설치가 완료되면, 제공 받은 코드 내 server.py 중 다음 부분을 APM Agent 페이지를 참고해서 채워줍니다.

app.config['ELASTIC_APM'] = {
  'SERVICE_NAME': '',
  'SECRET_TOKEN': '',
  'SERVER_URL': '',
  'ENVIRONMENT': '',
}

그리고 server.pyclient.py를 순서대로 실행합니다.

그 다음 제공된 코드 내 scatter.hjson가 Vega 코드이며, 해당 코드 내용 중 KIBANA_URL에 자신의 elastic kibana url 을 기입합니다.

{
  type: formula
  as: url
  // TODO: KIBANA_URL like https://workshop-kor.kb.asia-northeast3.gcp.elastic-cloud.com:9243
  expr: "'KIBANA_URL/app/apm/link-to/transaction/' + datum._source.transaction.id"
}

이제 대시보드를 생성해보겠습니다. Create a dashboard 버튼을 클릭합니다. 최초로 클릭한 경우에는 인덱스가 없으므로, 인덱스 생성이 필요합니다. 생성된 인덱스에 맞는 인덱스 패턴을 아무거나 설정하시면 됩니다. 참고로 저는 metric*으로 생성하였습니다.

image

그리고 이전에 말했던 것과 같이 Custom visualization을 클릭합니다.

image

그리고 scatter.hjson 내용으로 바꾼 뒤 update를 클릭하면 다음과 같은 화면이 보입니다. 만약 실시간으로 계속 데이터를 받아오고 싶다면 time picker 설정을 실시간으로 변경하면 됩니다.

image

2. Discover Field 에 Service 페이지 연결하기

Discover에서 Create a data view를 클릭합니다.

image

그 다음 아래와 같이 채워준 다음 실행해보세요.

image

그러면 다음과 같이 trace라는 data view 가 생성됩니다. 필드는 검색 후 + 버튼을 통해 추가하면 됩니다.

image

이번에는 id에 링크를 연결하여 바로 정보를 볼 수 있는 Service 상세 페이지로 연동하도록 하겠습니다.

먼저 필드를 클릭한 다음 뜨는 팝업에서 Edit data view field를 선택합니다.

image

그리고 다음과 같이 Link를 설정합니다. 여기서는 trace인데, 만약 선택한 id 필드가 transaction.id라면 transaction이라고 입력하면 됩니다.

image

Save를 클릭하면 다음과 같이 링크로 연결되었다는 것을 확인할 수 있습니다.

image

실제로 링크를 클릭해보면, 아래와 같은 페이지로 연결되는 것을 확인할 수 있습니다.

image

3. 에러 로그 확인하기

먼저 에러 로그를 저장하고 있는 로그에 대해 data view 를 생성합니다.

image

그 다음 아래와 같이 필터 설정를 설정하고 이전에 했던 것과 같이 링크 연결을 합니다.

image

그 다음 Discover 에 있는 Save 버튼을 눌러서 저장합니다. 저장을 해야 대시보드에서 라이브러리로 불러올 수 있습니다.

image

그 다음 대시보드에서 Add from library 클릭합니다.

image

그러면 아까 저장한 에러 로그가 뜬느 것을 확인할 수 있습니다.

image

이걸 선태하면 아래와 같이 Discover 에서 설정한 형식대로 로그가 대시보드 화면에 표출됩니다.

image

4. API 를 사용한 Deployment Annotations

해당 내용에 대한 상세한 설명은 공식 문서를 확인해주세요.

Kibana > Stack Management > API keys로 이동한 다음, Create API key를 클릭합니다.

image

그 다음 아래와 같이 입력합니다. 그러고 Create API Key를 클릭하면 메인 화면에 키가 표시되는 데 꼭 복사해두세요.

image

아래 명령어가 명시적으로 Deployment Annotation 을 생성하기 위한 API 입니다. 명령어에 kibana url, flask service name, 그리고 방금 생성한 key 추가해서 실행합니다. (${}은 모두 지워주고 실행해야 합니다.)

$ curl -X POST ${KIBANA_URL:9243}/api/apm/services/${SERVICE_NAME}/annotation -H 'Content-Type: application/json' -H 'kbn-xsrf: true' -H 'Authorization: ApiKey ${API_KEY}' -d '{"@timestamp": "2024-02-27T00:00:00.000Z", "service": {"version": "0.1" },"message": "My first deployment"}'

명령어가 정상적으로 실행되었다면, Discover 의 Data view 추가하기만 하면 아래와 같이 바로 확인할 수 있습니다.

image

또한, APM > Service에 들어가면 아래와 같이 명시적으로 지정한 시간대에 데이터가 존재하는 것을 알 수 있습니다.

image