Vinted 검색 배율 6장: 4세대 Elasticsearch 메트릭

2014년 12월 12일의 오래된 사실은 Vinted에 있어 의미가 크다. 이 회사는 Sphinx 검색엔진에서 Elasticsearch 1.4.1로 바뀌었다.본문을 작성할 때, 우리는 Elasticsearch 7.15를 사용한다.그 사이에 많은 일이 일어났다는 것은 의심의 여지가 없다.이 장에서는 Elasticsearch 지표를 중점적으로 소개하고 4세대가 지표를 수집한 경험을 공유할 것입니다.
검색을 관리하는 데는 제품과 공사 양방면의 노력이 필요하다. 두 가지 서로 보완되는 부분이다.Vinted에서 검색 엔지니어와 제품이 합작하여 완벽한 인프라 시설을 유지하고 고급 검색 엔진을 구축한다.만약 적당한 평가 기준이 없다면, 이것은 실현할 수 없는 것이다.
1세대 지표는 루비 스크립트 해석/_cat API's을 사용하여 수집됩니다.복잡한 것 없이 Elasticsearch 버전 1을 실행했습니다.x-2.x와 모니터링은 Elasticsearch 플러그인(예를 들어 ElasticHQ)을 통해 필요에 따라 완성됩니다.
2세대는 Sensu 관측 파이프에서 운행한다.Graphite는 수집된 Elasticsearch 도량을 저장하는 지구층으로 사용되며, 색인, 조각, 부분의 도량을 수집하는 데 사용됩니다.Elasticsearch 버전 2를 실행했습니다.x-5.x 당시 세그먼트 전략fine-tuning이 읽기 성능을 향상시켰기 때문에 세그먼트를 감시하는 것이 매우 중요하다.단점은 스토리지 계층입니다.그래파이트는 더 오랜 시간을 뛰어넘는 지표를 표본 추출할 예정이다.샘플링은 다른 메모리 엔진으로 이동하는 주요 문제점이다.
3세대 지표는 pull-based지표 수집 시스템Prometheus에서 운행된다.프로메테우스는 아직 사실상 모니터링 시스템으로 구축되지 않았다.Elasticsearch 버전 5를 실행했습니다.x. 개원 Elasticsearch 수출 업체가 나타난 것과 같다.많은 개원 Elasticsearch 수출상들이 모두 시험적으로 사용하였다.우리가 쓰는 것은 동영상 흐름 회사의 것이다.이 기간 동안 저희 인프라 시설의 발전에 따라 exporter는 간혹 메모리가 부족하거나 /metrics 노드 요청이 시간을 초과하여 납품하지 못했습니다.도출기는 불필요한 지표를 제한하고 모든 서브시스템의 퀴즈 시간을 설정하는 등 세분도 설정 기능이 부족하다.지표는 정적이어서 지표의 명칭이 일치하지 않는다.저자는 OSS 커뮤니티에서 코드 변경 요청을 받지 않았고, 자발적으로 납품하지 않았으며, 최근 Elasticsearch 버전의 새로운 지표를 도입하지 않았다.내부 가닥은 상위 Elasticsearch exporter 메모리 라이브러리에서 갈라진 것으로, 분명히 가닥의 내보내기는 완전한 재작성처럼 보이기 시작했다.다시 쓰는 노력의 의의가 매우 커서 우리는 새로운 수출상을 쓰기로 결정했다.
4세대 Elasticsearch exporter는 여러 문제를 해결했습니다.다음과 같은 작업을 수행할 수 있습니다.
  • 대규모 클러스터(400개 이상의 노드) 사용
  • 붕괴되지 않는 상황에서 대량의 지표를 처리한다(수출 업체가 940272개의 지표를 도출할 수 있다)
  • 사용자 정의 메트릭 태그 삽입
  • 처리 노드, 인덱스, 조각의 짧은 상태
  • 사용자가 구성할 수 있는 라이프 사이클
  • 에 따라 새 지표를 자동으로 생성하고 오래된 지표를 삭제합니다.
  • 집단 상태 메타데이터 노드 변경, 집단 버전과 파편 재배치
  • 추적
    새로운 Elasticsearch exporter는Rust 프로그래밍 언어로 작성되었고GitHub에서 기원되었습니다: github.com/vinted/elasticsearch-exporter-rs.수출 업체는 비동기Tokio runtime,Rust Prometheus instrumentation library와 정부Elasticsearch client library를 사용한다.도량 집합과 서비스/metrics 단점 분리.또한 Elasticsearch는 시간에 근거한 도량(밀리초 단위)을 초로 변환하여 부합Prometheus best practices(밀리초로 끝나는 도량은'초', '바이트',' 초'로 대체하고 적당한 상황에서 접미사를 추가한다).
    서브시스템(/_cat{aliases,shards,nodes,..},/_nodes/{stats,info,usage},/의 명칭 공간은 마지막 페이지로 보존됩니다. 예를 들어elasticsearch/_nodes/info jvm mem heap_max.JSON 트리 메트릭이 Prometheus 형식elasticsearch_nodes_info_jvm_mem_heap_max_in_bytes으로 변환되므로 메트릭 이름 사용이 보다 직관적입니다.
    사용자 정의 탭이 관련 하위 시스템에 주입됩니다.예를 들어 집단 버전이 주입으로 바뀌었다고 가정하면 명칭 공간 라벨vin_cluster_version을 통해 도량을 구분할 수 있다.이렇게 하면 롤링 버전 업그레이드 중에 클러스터와 노드 간의 Elasticsearch 성능을 비교할 수 있습니다.기본적으로 집단원 데이터는 5분마다 업데이트되며 사용자가 설정할 수 있습니다.메타데이터 업데이트는 조각이 다른 노드로 재배치되거나 노드 IP가 변경될 때 유용합니다.
    우리는 항상 (매일 최대 2-3번).색인을 재편성하면 수출 업체가 수집한 상태 변화의 흔적이 남는다.Elasticsearch 노드의 짧은 상태 추가/삭제/삭제, 색인 생성, 색인 삭제와 파편 재배치, 파편 재배치, 별명 변경은 많은 흔적을 남긴다.내보내기는 모든 하위 시스템의 사용자 정의 생명 주기를 추적해서 이 문제를 처리합니다.고유한 레이블이 있는 메트릭의 마지막 하트비트가 사용자가 미리 정의한 생존 기간을 통과하면 유효하지 않은 메트릭이 삭제됩니다.도량 생명주기는 유행이 지난 도량을 없애고 저장 엔진 공간을 절약하며 계기판을 최신식으로 유지하는 데 도움이 된다.
    CLI 플래그를 통해 광범위하게 구성할 수 있습니다.예를 들어, 레이블 건너뛰기, 메트릭 건너뛰기, 서브시스템 간 폴링 간격 정의, 다른 서브시스템 설정/해제 및 메타데이터 새로 고침 간격 제어를 포함할 수 있습니다.
    수출 업체의 가장 좋은 부분은 정적 지표를 정의하지 않았다는 것이다.반면에 도량은 동적이고 atomic 구조를 바탕으로 하기 때문에 서브시스템의 도량은 모든 요구에 따라 구축된다.지표의 동적 성질은 Elasticsearch 버전에서 추천하지 않는 버전을 변경하거나 삭제할 때 새로운 지표를 정의하는 것을 요구하지 않기 때문에 지표를 유지할 필요가 없습니다.새로운 양자 시스템을 추가하는 것은 매우 쉽지만, 이런 상황은 매우 드물다.
    현재 내보내기는 다음 서브시스템을 지원합니다.
    =^.^=
    /_cat/allocation
    /_cat/shards
    /_cat/indices
    /_cat/segments
    /_cat/nodes
    /_cat/recovery
    /_cat/health
    /_cat/pending_tasks
    /_cat/aliases
    /_cat/thread_pool
    /_cat/plugins
    /_cat/fielddata
    /_cat/nodeattrs
    /_cat/repositories
    /_cat/templates
    /_cat/transforms
    
    /_cluster/health
    /_cluster/stats
    
    /_nodes/stats
    /_nodes/usage
    /_nodes/info
    
    /_stats
    
    도량 생성 코드는 1600여 줄 코드로 36개의 파일로 나뉜다.
    다음 명령을 사용하여 docker 컨테이너에서 내보내기를 실행할 수 있습니다.
    $ docker run --network=host -it vinted/elasticsearch_exporter --elasticsearch_url=http://IP:PORT
    
    수출상들은 자신의 지표도 공개했다.
    하위 시스템 스크래치 횟수
    상주 메모리
    이것은 Vinted의 Elasticsearch metrics 기초 구조 토폴로지 구조의 초보적인 소개이다.검색 인프라는 3개의 데이터 센터를 뛰어넘는다.각 데이터 센터에서 Elasticsearch 클러스터를 실행합니다.각 익스포터는 데이터 센터와 데이터 센터 내의 랙 간에 고가용성을 제공하기 위해 3배의 성능을 제공합니다.수출상들은 일반적으로 하나의 목적을 가지고 있다. 전체 서브시스템을 삭제하거나 단일 서브시스템의 일부분을 삭제하는 것이다. 예를 들어 /_nodes/stats와 같은 풍부한 서브시스템을 삭제한다.도출기는 docker 용기에 있는 Elasticsearch 노드를 나란히 실행하고 Chef 를 사용하여 설정합니다.
    이것은 중고 수출 업체의 생산 명세서이다
    익스포터가 마스터 노드에서 클러스터 상태 및 별칭 긁기
    익스포터가 클라이언트 노드에서 스레드 풀을 긁어냅니다.
    내보내기가 데이터 노드에서 경로 파라미터에 따라 구분된 노드 통계 데이터
    익스포터가 데이터 노드에서 노드 사용 상황과 정보를 얻다
    내보내기가 데이터 노드에서 긁기/ucat 서브시스템
    우리는 또 open-sourcing 13개의 계기판을 가지고 있는데, 모두 323개의 패널이 있는데, 서로 다른 서브시스템에 의해 노출되었다.
    사용 가능한 수출상 계기판
    즐겨라.
    만약 당신이 방금 읽은 내용을 좋아한다면, 우리는 검색 엔지니어를 모집하고 있습니다.자세한 내용은 DellJobs page을 참조하십시오.

    좋은 웹페이지 즐겨찾기