heroku가 sleep 상태에 들어가 버려 응답이 느린 문제를 newRelic로 ping을 보내는 것으로 해결

10056 단어 경 6NewRelic

소개



개인 사이트의 운용으로 strapi라는 HeadlessCMS를 heroku 서버로 이동하고 있으면, 응답이 20초 정도 걸려 데이터가 꽤 얻지 못하는 문제를 만났다.
heroku 서버(dyno)의 무료 플랜이라고 30분간 리퀘스트가 없는 경우에 sleep 상태에 들어가 버리기 때문에, sleep→서버 재기동→strapi 기동이라고 하는 흐름이 되어 있었던 것이 원인.
newRelic의 무료 애드온을 사용해 15분 간격으로 ping을 보내는 것으로 문제를 회피할 수 있었으므로, 그 비망록을 써 둔다.
이 블로그가 매우 도움이 되었다. Heroku Free Dyno의 Sleep 방지

heroku의 로그를보고 원인 조사



처음에는 원래 어째서 heroku가 이렇게 느린지 몰랐지만 아래의 기사가 참고가 되었다.
Heroku는 정말 늦었습니까?

dyno가 sleep하는거야? ! ? ? ! ! ?
Free Dyno Hours - Dyno sleeping

web dyno는 30분 이상 트래픽이 없으면 sleep해 버립니다만, 이것이 일어나는 것이 상당히 시간 걸립니다.
30분 감각으로 자지 않게 액세스 해 주는 것 같은 하고 있는 사람도 있습니다만, 아무래도 무료로 하고 싶다면 그것도 있어.

실제로 heroku의 로그를 보는 것으로 이 휴면 현상을 확인할 수 있다.
$ heroku log -t
2021-01-10T09:27:01.218869+00:00 heroku[router]: at=info method=POST path="/graphql" host=strapi-asakawa-family.herokuapp.com request_id=7a6e142f-4ce7-4176-b237-d2032efe8722 fwd="60.73.16.105" dyno=web.1 connect=1ms service=81ms status=200 bytes=1247 protocol=https
2021-01-10T09:27:01.216416+00:00 app[web.1]: [2021-01-10T09:27:01.216Z] debug POST /graphql (75 ms) 200
2021-01-10T09:27:01.248257+00:00 app[web.1]: [2021-01-10T09:27:01.248Z] debug POST /graphql (86 ms) 200
2021-01-10T10:01:18.451053+00:00 heroku[web.1]: Idling
2021-01-10T10:01:18.452808+00:00 heroku[web.1]: State changed from up to down
2021-01-10T10:01:19.964249+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2021-01-10T10:01:20.136459+00:00 heroku[web.1]: Process exited with status 143

strapi의 graphql 엔드포인트에 포스트 요청을 보내고 나서 30분 기다려 보면, 모든 프로세스가 정지해 휴면 상태에 들어가는 것을 확인할 수 있었다.
그 후 요구가 오면, 서버 재기동→strapi 기동→yarn build 완료→응답 되돌린다고 느끼므로 20초 정도 걸린다.

newRelic 애드온 추가



개인 사이트용이기 때문에 액세스도 전혀 없고, 이를 회피하기 위해 정기적으로 ping을 치기로 했다.
먼저 newRelic의 추가 기능을 heroku 앱에 추가합니다.
# newRelicアドオン追加コマンド
$ heroku addons:add newrelic:wayne -a { heroku_app_name }

newRelic 계정 새로 만들기



newRelic의 계정이 없는 경우는 신규로 만든다.

아래 링크에서 newRelic에 등록.
h tps : // 네 w ぃ c. 코 m/시그누 p

Free access to all of New Relic. Forever.
No credit card required.

무료 플랜으로 사용할 수 있으므로 클레카도 필요 없다.

핑 전송 설정



New Relic Synthetics를 선택합니다.
그래서 신규 모니터를 작성.



heroku의 로그에 요청이 나오면 k.
데이터 취득에 20초가 걸리는 지옥과 같은 문제가 해결되었다.

참고문헌


  • Heroku Free Dyno의 Sleep 방지
  • Heroku는 정말 늦었습니까?
  • Heroku 공식 dyno 수면
  • Heroku New Relic APM
  • 좋은 웹페이지 즐겨찾기