Elastic 에서 진행한 AI-옵저버빌리티 실시간 모니터링 솔루션 세미나 & 워크샵에 다녀왔습니다. 해당 세션을 통해서 옵저버빌리티가 무엇인지에 대해 간략하게 배울 수 있었고, 엘라스틱 APM 에 대한 설명을 들을 수 있었습니다. 또한, 어떻게 사용하는지에 대해서도 실습을 통해 알아볼 수 있었습니다.
Github (Fork) : https://github.com/deeev-sb/elastic-apm-workshop
-
Python 3.x, NodeJS, VScode 설치
-
Elastic Sign Up
-
Elastic Deployment 생성
Username : elastic Password : hfijizQLJd1iv7xs5uyVRxCm
커스텀한 대시보드를 생성하고 싶다면 Vega
를 사용하면 됩니다.
- https://www.elastic.co/guide/en/kibana/current/vega.html
- https://vega.github.io/vega/examples/
- https://vega.github.io/vega-lite/examples/
Add panel > Custom Visualization
에서 Vega 를 통해 Scatter 차트를 구현할 수 있습니다.
먼저 실습을 하기 위해 flask
를 설치합니다.
pip3 install flast requests
그 다음, elastic home 화면에서 Add integrations
를 클릭합니다.
그러면 여러 가지 integration 이 표출되는 데, 그 중, APM
을 선택합니다.
여러 APM 중 Flask
에 대한 APM 내용을 순서대로 진행하면 됩니다.
터미널에 APM agent 설치할 때, 특수문자의 경우 \
을 붙여야 정상적으로 설치됩니다.
pip install elastic-apm\[flask\]
설치가 완료되면, 제공 받은 코드 내 server.py
중 다음 부분을 APM Agent 페이지를 참고해서 채워줍니다.
app.config['ELASTIC_APM'] = {
'SERVICE_NAME': '',
'SECRET_TOKEN': '',
'SERVER_URL': '',
'ENVIRONMENT': '',
}
그리고 server.py
와 client.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*
으로 생성하였습니다.
그리고 이전에 말했던 것과 같이 Custom visualization
을 클릭합니다.
그리고 scatter.hjson
내용으로 바꾼 뒤 update
를 클릭하면 다음과 같은 화면이 보입니다. 만약 실시간으로 계속 데이터를 받아오고 싶다면 time picker
설정을 실시간으로 변경하면 됩니다.
Discover
에서 Create a data view
를 클릭합니다.
그 다음 아래와 같이 채워준 다음 실행해보세요.
그러면 다음과 같이 trace
라는 data view 가 생성됩니다. 필드는 검색 후 +
버튼을 통해 추가하면 됩니다.
이번에는 id
에 링크를 연결하여 바로 정보를 볼 수 있는 Service
상세 페이지로 연동하도록 하겠습니다.
먼저 필드를 클릭한 다음 뜨는 팝업에서 Edit data view field
를 선택합니다.
그리고 다음과 같이 Link
를 설정합니다. 여기서는 trace
인데, 만약 선택한 id
필드가 transaction.id
라면 transaction
이라고 입력하면 됩니다.
Save
를 클릭하면 다음과 같이 링크로 연결되었다는 것을 확인할 수 있습니다.
실제로 링크를 클릭해보면, 아래와 같은 페이지로 연결되는 것을 확인할 수 있습니다.
먼저 에러 로그를 저장하고 있는 로그에 대해 data view 를 생성합니다.
그 다음 아래와 같이 필터 설정를 설정하고 이전에 했던 것과 같이 링크 연결을 합니다.
그 다음 Discover 에 있는 Save 버튼을 눌러서 저장합니다. 저장을 해야 대시보드에서 라이브러리로 불러올 수 있습니다.
그 다음 대시보드에서 Add from library
클릭합니다.
그러면 아까 저장한 에러 로그가 뜬느 것을 확인할 수 있습니다.
이걸 선태하면 아래와 같이 Discover 에서 설정한 형식대로 로그가 대시보드 화면에 표출됩니다.
해당 내용에 대한 상세한 설명은 공식 문서를 확인해주세요.
Kibana > Stack Management > API keys
로 이동한 다음, Create API key
를 클릭합니다.
그 다음 아래와 같이 입력합니다. 그러고 Create API Key
를 클릭하면 메인 화면에 키가 표시되는 데 꼭 복사해두세요.
아래 명령어가 명시적으로 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 추가하기만 하면 아래와 같이 바로 확인할 수 있습니다.
또한, APM > Service
에 들어가면 아래와 같이 명시적으로 지정한 시간대에 데이터가 존재하는 것을 알 수 있습니다.