Ruby 애플리케이션 Cloud Native 모니터링

What's Cloud Native?

  • Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.
  • https://github.com/cncf/toc/blob/master/DEFINITION.md
  • Resilient, Manageable, and Observable
  • 많은 응용 프로그램을 시작하는 문제에 대해 공중 클라우드, Docker와 Kubbernetes는 이미 상당히 큰 해결을 얻었다
  • 현재
  • 가장 큰 문제는 이런 문제들을 잘 조화시키거나 문제가 발생할 때 정확하게 처리할 수 있느냐 하는 것이다.

    Why Cloud Native? (in Quipper case)

  • 하나의 코드를 바탕으로 각양각색의 업무를 진행하면서 조직성, 비즈니스성의 복잡성이 과제가 되었다
  • B2C/B2B, 초·중등학교, 국내/글로벌화, 신사업
  • 서비스가 많이 증가하여 복잡한 생태계를 형성하고 있다
  • Microservices
  • 여러 클러스터, 환경의 다양한 제품, 어플리케이션
  • Observability
  • 를 일치된 방식으로 제공하고자 합니다.
  • https://ymotongpoo.hatenablog.com/entry/2019/03/25/084500
  • SRE 는 병목 현상이 되지 않으며, 개발진이 자체적이고 신속하게 제품 개발을 진행할 수 있기를 바랍니다.
  • 셀프 서비스 프로세스
  • Observability가 중요하지만 시간이 차지되면 본말이 뒤바뀐다
  • The Theree Pillars of Observability


  • https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html
  • Event Logs
  • Quipper는 GCP의 Stackdriver Logging을 사용합니다(이것은 매우 편리합니다!)
  • Metrics
  • Quipper는 주로 데이터dog
  • 을 사용합니다.
  • 오늘은 이 이야기
  • Tracing
  • Jaeger를 시도했지만 아직 활용할 수 없음
  • 원래 사내에서는 그렇게 원하지 않았는데
  • 말은 그렇지만,필요한 것도 시간문제이기 때문에 오늘 카와시 발표가 기대됩니다!!!
  • Collecting Ruby Metrics for Datadog

  • 오늘은 prometheus입니다.exporter, 이거gem 소개
  • Ruby 프로세스 및 다양한 프레임워크(Rails, Puma, Sidekiq, etc)에 Promeetheus Exporter 제공
  • Prometheus? Exporter?
  • Prometheus

  • 시간 시퀀스 데이터베이스 기반 모니터링 시스템
  • Quipper에서 사용하지 않아서 저도 만져본 적이 없어요
  • Datadog을 사용하는데 왜 하필 최면술인가?
  • 여기는 Exporter
  • Prometheus Exporter

  • 모니터링 대상 서버 등에서 시작하고 Promoetheus pull에서 메트릭을 가져오는 웹 API
  • 와 유사
  • 다양한 오픈 소스 공개
  • 데이터도 Promeetheus Exporter에서 메트릭 수집 가능
  • # HELP ruby_rss Total RSS used by process.
    # TYPE ruby_rss gauge
    ruby_rss{type="master",pid="1",pod_name="api-6bcf6c8554-jntdq"} 390942720
    ruby_rss{pod_name="api-6bcf6c8554-jntdq",type="web",pid="45"} 346877952
    ruby_rss{pod_name="api-6bcf6c8554-jntdq",type="web",pid="42"} 347594752
    ruby_rss{pod_name="api-6bcf6c8554-jntdq",type="web",pid="39"} 350285824
    ruby_rss{pod_name="api-6bcf6c8554-jntdq",type="web",pid="50"} 347901952
    
    # HELP ruby_unicorn_workers_total Number of unicorn workers.
    # TYPE ruby_unicorn_workers_total gauge
    ruby_unicorn_workers_total{pod_name="api-6bcf6c8554-jntdq"} 4
    
    # HELP ruby_unicorn_active_workers_total Number of active unicorn workers
    # TYPE ruby_unicorn_active_workers_total gauge
    ruby_unicorn_active_workers_total{pod_name="api-6bcf6c8554-jntdq"} 0
    

    Datadog and Kubernetes

  • Datadog은 Auto Discovery의 구조를 가지고 있으며,Pod(용기의 집합성)의 annotations(메타데이터 같은 것)에 기술된 설정만 있으면 Datadog는 마음대로 수집할 수 있다.
  • 복사와 붙여넣기를 통해 도량을 수집하기 때문에 간단합니다
  • 서비스 작성 시 템플릿에 포함할 수도 있음
  • Kubbernetes에서 디자인한 애플리케이션의 양을 자동으로 수집
  • Annotation

    metadata:
      annotations:
        ad.datadoghq.com/api.check_names: |
          ["prometheus"]
        ad.datadoghq.com/api.init_configs: |
          [{}]
        ad.datadoghq.com/api.instances: |
          [
            {
              "prometheus_url": "http://%%host%%:9394/metrics",
              "namespace": "prometheus_checks",
              "metrics": ["*"]
            }
          ]
    

    오늘의 성과



    루비 퀴즈: 무슨 문제 있어요?


    원시 코드
        def worker_process_count
          # ...
    
          # find all processes whose parent is the unicorn master
          # but we're actually only interested in the number of processes (= lines of output)
          result = `ps --no-header -o pid --ppid #{pid}`
          result.lines.count
        end
    

    좋은 웹페이지 즐겨찾기