paust-team / paust-db

GNU General Public License v3.0
6 stars 5 forks source link

Support monitoring guide #109

Closed elon0823 closed 5 years ago

elon0823 commented 5 years ago

펜타의 요구사항으로 multi node 에 docker 를 이용해서 pdb master 를 구성한 후에 일일히 노드에 다 접근해서 잘돌고있는지 확인하기 어려우므로 tendermint 에서 제공하는 tm-monitor 를 이용하여 각 노드에 관련된 모니터링을 하는 방법을 wiki 나 documentation 에 작성하면 좋을 듯 합니다.

dragon0170 commented 5 years ago

tm-monitor 설치방법은 go get github.com/tendermint/tendermint/tools/tm-monitor를 통해 설치하면 됩니다.

tm-monitor 사용방법은 아래에 있는 README를 참고하면 될 거 같네요. https://github.com/tendermint/tendermint/tree/master/tools/tm-monitor

elon0823 commented 5 years ago

tm-monitor 사용법이나 설치는 링크제공하고 추가로 우리가 4개짜리 돌리고 모니터링하는 스크린샷 정도만 제공하면될것같습니다

EdgarGoethe commented 5 years ago

오프라인에서 @elon0823 에게 말씀드렸던 건으로 운영환경의 모니터링보다도 초기 Setup후 구성점검을 위한 기본사항으로 말씀드렸던 건입니다. 위 공유주신 tm-monitor를 통해서 확인을 한다는 것에 대해 "tm-monitor status 정상" = "PAUST DB 정상" 을 의미하는 것인가요. 아니면 포함관계인가요.

우리가 직접 또는 외부 기술을 활용해서 하나의 paust-db로 만들었다고하면, 구성완료 후 "PAUST DB가 정상적으로 구성되었다"라고 확인할 수 있는 것이 어떤 것들이 있을 수 있을까요. 말씀드렸던 노드 상태 점검 외에는 다른 구성상 확인할 부분은 없는지요.

kwjooo commented 5 years ago

tm-monitor가 docker로 설치하는 법과 binary로 설치하는 법 두 가지가 있는데, docker의 경우 실행된 container에 --link하여 monitor하는 방법으로 이는 localnet의 경우 bridge network를 사용하고 있는 관계로 부적절합니다. 그러므로 binary를 통해 localhost에 monitor를 요청하는 방법으로 가이드를 진행하면 될 듯 합니다.

elon0823 commented 5 years ago

@EdgarGoethe 현재는 저희 로직상 paust-db 자체가 error 로 인해 데몬이 죽을 경우가 없습니다. 서비스가 안되는 최악의 시나리오는 rocksdb, tendermint 쪽에서 죽는 경우에만 정상 서비스가 동작하지 않는 상태입니다. 지금은 tendermint 부분에 종속되어있기때문에 pdb를 docker container를 이용해서 설치했을 경우, 해당 port들을 모니터링 하는 tm-monitor status 가 정상이면 paust-db 가 정상인 상태가 되긴 합니다.

kwjooo commented 5 years ago

https://github.com/paust-team/paust-db/issues/109#issuecomment-465422436 tendermint가 paust-db의 transaction을 처리하기 위해 사용되는 만큼, tm-monitor 정상이라는 것이 paust-db의 transaction이 정상이라는 것을 의미합니다. 이는 put, fetch, query가 정상적으로 동작된다는 것을 의미합니다.

elon0823 commented 5 years ago

@kwjooo 네 어제 @dragon0170 이랑 테스트 해봤는데 도커로 하는건 빼고 바이너리로 해서 해보니까 잘되더라고요 그것만 제공하면 되지 않을까 합니다.

kwjooo commented 5 years ago

tools라는 directory를 만들고 하위에 monitor라는 directory를 만든 후 README를 추가하는 방식이 어떨까요? 후에 tools에 rocksdb의 ldb와 같은 tools도 추가하면 좋을 것 같아서요

elon0823 commented 5 years ago

이건 저희쪽 tool 이 아니라 tendermint 종속적인거라 저희쪽 레포에 포함시킬기능도아니니 그냥 여기 링크가서 설치해서 확인할 수 있음.. 정도면 제공하면 되지않을까요?

kwjooo commented 5 years ago

저희 기능이 아니니 단순히 링크만 거는 것이 맞겠네요.

code-to-gold commented 5 years ago

edan의 요구사항은 monitoring 이 아니라 health check가 인것 같습니다. Master Application에 요청을 보내고 응답이 제대로 오는지 정도만 확인하면 될 것 같습니다.(서버가 살아있는지) tm-monitor는 텐더민트의 모니터링 용도지, paust-db의 모니터링 용도는 아닙니다. 저희 Readme에 쓰기는 과해보입니다. 또한, tendermint의 오류만이 정상 서비스가 동작하지 않는 상태라고 판단하는것도 위험하다 생각합니다. rocksdb던, 저희가 생각지 못한 곳에서 서비스가 동작하지 않는 상태가 발생할 수 있다고 생각합니다.

code-to-gold commented 5 years ago

@elon0823 또한, 펜타의 요구사항은 아닙니다..ㅎㅎ

dragon0170 commented 5 years ago

ABCI app의 health check를 위한 것이면 tendermint rpc의 /abci_info endpoint를 사용하면 좋을 것 같습니다.

$ curl 'localhost:26657/abci_info'
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "response": {
      "data": "---- Info"
    }
  }
}%

현재 Master Application의 Info 함수는 아래와 같습니다.

func (app *MasterApplication) Info(req abciTypes.RequestInfo) abciTypes.ResponseInfo {
    return abciTypes.ResponseInfo{
        Data: fmt.Sprintf("---- Info"),
    }
}
elon0823 commented 5 years ago

@dragon0170

rpc 에 /health 라고도 있습니다. 걔네를 쓰면좋을것같네요. client interface 부분에 paust-db-cli status 같은 형태로 제공하시죠

elon0823 commented 5 years ago

최종 : monitoring 은 아니고 생성한 노드에 대해 정상 동작하는지를 체크하기 위한 Status interface 를 추가함