티스토리 뷰

반응형

Elasticsearch 및 Kibana 기본 설정은 다음 문서를 참조합니다.

https://miiingo.tistory.com/216

 

[Monitiring Tool] Elastic Stack(Filebeat, Logstash, Elasticsearch, Kibana) 구성 실습

사전 조사 Elastic Stack이란? 사용자가 서버로부터 원하는 모든 유형의 데이터를 가져와서 실시간으로 해당 데이터를 검색, 분석 및 시각화 할 수 있도록 도와주는 Elastic의 오픈소스 서비스 제품 Elastic Stack..

miiingo.tistory.com

 

APM이란?

APM(Application Performance Management)은 웹 어플리케이션, 서버 시스템 등의 성능을 관리하는 솔루션입니다. 어플리케이션이나 시스템의 신속한 장애 지점 파악, 원인 분석, 튜닝을 지원할 수 있는 APM을 도입하면 서비스를 안정적으로 제공할 수 있습니다.

 

 

 

Elasticsearch 설정

Elasticsearch를 실행하기 위해 설정을 수정합니다.

기본적으로 Elasticsearch는 외부에서 IP로 접근할 수 없으며, loopback(127.0.0.1 또는 localhost)로만 접속할 수 있습니다.

여기에서는 Elasticsearch가 실행될 호스트(HOST1)와 nodejs 프로젝트가 실행될 호스트(HOST2)가 동일하지 않습니다.

HOST1에서 실행중인 Elasticsearch에 HOST2의 nodejs 프로젝트가 접속할 수 있도록 Elasticsearch의 네트워크 설정을 변경해줍니다.

 

Elasticsearch 네트워크 호스트 변경

config/elasticsearch.yml 설정 파일의 network.host 부분을 변경합니다.

cd /opt/gopath/src/github.com/hyperledger/elastic-stack/elasticsearch-6.7.2
vi config/elasticsearch.yml
network.host: 0.0.0.0

위와 같은 형식으로 IP 주소를 직접 입력해도 되지만, Elasticsearch의 network.host 값을 사용해도 됩니다.

network.host: _site_

※참고 https://www.elastic.co/guide/en/elasticsearch/reference/6.1/modules-network.html#network-interface-values

 

Network Settings | Elasticsearch Reference [6.1] | Elastic

Be careful with the network configuration! Never expose an unprotected node to the public internet.

www.elastic.co

 

vm.max_map_count 변경

네트워크 호스트를 변경하고 Elasticsearch를 다시 시작했더니 다음과 같은 오류가 발생했습니다.

[2019-06-04T00:01:47,976][INFO ][o.e.n.Node               ] [l46XU1d] initialized
[2019-06-04T00:01:47,977][INFO ][o.e.n.Node               ] [l46XU1d] starting ...
[2019-06-04T00:01:48,208][INFO ][o.e.t.TransportService   ] [l46XU1d] publish_address {<HOST1의 IP주소>:9300}, bound_addresses {[::]:9300}
[2019-06-04T00:01:48,281][INFO ][o.e.b.BootstrapChecks    ] [l46XU1d] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [2] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2019-06-04T00:01:48,340][INFO ][o.e.n.Node               ] [l46XU1d] stopping ...
[2019-06-04T00:01:48,430][INFO ][o.e.n.Node               ] [l46XU1d] stopped
[2019-06-04T00:01:48,430][INFO ][o.e.n.Node               ] [l46XU1d] closing ...
[2019-06-04T00:01:48,468][INFO ][o.e.n.Node               ] [l46XU1d] closed
[2019-06-04T00:01:48,472][INFO ][o.e.x.m.p.NativeController] [l46XU1d] Native controller process has stopped - no new native processes can be started

로그 내용을 확인해보면 vm.max_map_count 값이 너무 적다는 내용인데, 다음 명령을 통해 vm.max_map_count를 권장 값인 262144로 변경해줍니다.

# vm.max_map_count 변경
sudo sysctl -w vm.max_map_count=262144

 

Elasticsearh 실행

이제 Elasticsearh를 실행합니다.

# Elasticsearh 실행
./bin/elasticsearch

 

HOST2에서 연결 확인

nodejs 프로젝트를 실행할 호스트인 HOST2에서 다음 명령을 통해 HOST1의 Elasticsearch에 접근이 가능한지 확인합니다.

curl http://<HOST1의 IP주소>:9200

실행 결과 다음과 같은 내용이 출력되어야 합니다.

{
  "name" : "l46XU1d",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "9rbT8uDLRDyNUTJYFC7A5A",
  "version" : {
    "number" : "6.7.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "56c6e48",
    "build_date" : "2019-04-29T09:05:50.290371Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

 

Kibana 설정

Kibana 실행

Elasticsearh의 실행이 완료되면 Kibana를 실행해줍니다.

# Kibana 실행
cd /opt/gopath/src/github.com/hyperledger/elastic-stack/kibana-6.7.2-linux-x86_64
./bin/kibana

http://{HOST1의 IP}:5601에 접속해 Kibana가 정상적으로 실행되었는지 확인합니다.

 

Elastic APM 설정

APM Server 구성

APM Server의 버전은 Elastic Stack이 실행된 버전과 동일해야 합니다.

특정 버전의 APM Server를 설치하기 위해 다음 웹페이지를 참조합니다. https://www.elastic.co/kr/downloads/past-releases#apm-server

 

Past Releases of Elastic Stack Software | Elastic

View the detailed release notes here.

www.elastic.co

# 설치
curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-6.7.2-linux-x86_64.tar.gz
tar -xzvf apm-server-6.7.2-linux-x86_64.tar.gz

cd apm-server-6.7.2-linux-x86_64
./apm-server setup

설정이 완료되면 다음과 같은 내용이 출력됩니다.

Index setup complete.
Loaded Ingest pipelines

Loaded index template
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards

그리고 HOST2에서 APM Server에 접근할 수 있도록 호스트 주소를 변경해주어야 합니다. apm-server.yml 파일의 host 부분을 다음과 같이 수정합니다.

host: "0.0.0.0:8200"

이제 APM Server를 실행합니다.

# APM Server 실행
./apm-server -e

 

APM agent 설치

이제 HOST2의 nodejs 프로젝트 디렉토리 내에서 npm을 이용해 elastic-npm-node 패키지를 설치합니다.

cd <APM agent를 설치할 nodejs 프로젝트 디렉토리>
#npm install elastic-apm --save
npm install elastic-apm-node --save

※모듈 명칭이 elastic-apm에서 elastic-apm-node로 변경되었습니다!

설치가 완료되면 app.js 파일 내에 다음 코드를 추가합니다.

// elastic-apm
require('elastic-apm-node').start({
  // Set required app name (allowed characters: a-z, A-Z, 0-9, -, _, and space)
  appName: 'bc-platform-rest',
  // Use if APM Server requires a token
  secretToken: '',
  // Set custom APM Server URL (default: http://localhost:8200)
  serverUrl: 'http://<HOST1의 IP주소>:8200',
});

 

nodejs 실행

설정이 완료되면 HOST2의 nodejs 프로젝트를 실행합니다.

실행 후 다음과 같은 오류 로그가 출력되지 않아야 합니다.

APM Server transport error (ECONNREFUSED): connect ECONNREFUSED <HOST1의 IP주소>:8200

 

Kibana 웹페이지 접속

Kibana 웹페이지 접속해 APM 메뉴를 클릭하면 다음과 같이 설정한 nodejs 프로젝트가 뜨게 됩니다.

Metrics 탭에서는 다음과 같은 화면이 출력됩니다.

 

참고 사이트

https://medium.com/@trustyoo86/elasticsearch-apm-server-node-js%EC%97%90-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-apply-node-js-apm-server-using-elasticsearch-6b07aeeae936

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함