Goreplay가 들어가면...

@NMura3는 역서 8일째를 맡고 있습니다.
개요
서비스가 활용되면 프로그램 언어와 프레임워크, OS와 총서의 버전 업그레이드가 뒤엉킨다.
그때는 일어나고 싶지 않지만 고장이 나서 서비스를 중단하는 경우도 있다.
아무리 세밀하게 테스트하고 준비해도 일정 수량의 상황이 발생하나요?
이럴 때 쉽게 검증할 수 있는 게 고릴레이다.
이른바 Goreplay
GoReplay는 Go가 개발한 OSS 네트워크 모니터링 도구입니다.
https://goreplay.org/
재생 요청을 잡고 다른 서버에 같은 요청을 재생할 수 있습니다.
즉, 테스트 환경과 무대 환경에서 공식적인 팟캐스트를 재생하고, 공식적인 팟캐스트에서 테스트를 할 수 있다는 것이다.
또 팟캐스트 수도 본공연과 마찬가지로 부하 테스트를 할 수 있다.

설치하다.
GO에서 개발한 것이기 때문에 설치는 매우 간단합니다. 경로를 통과하는 디렉터리에 실행 권한을 설치하여 다운로드하기만 하면 됩니다.
설치 예
export GOREPLAY_VERSION=1.3.3
wget -q -O - https://github.com/buger/goreplay/releases/download/${GOREPLAY_VERSION}/gor_${GOREPLAY_VERSION}_x64.tar.gz | tar -xz -C /usr/local/bin
버전에 따라 경로가 미묘하게 달라질 수 있으니 주의하십시오.
실행 예
지정 포트(80번)를 표준 출력으로 출력
gor --input-raw ":80" \
    --output-stdout
지정한 포트(80번)가 테스트 환경에 요청 보내기
gor --input-raw ":80" \
    --output-http https://test.example.com
지정한 포트(80번)에서 테스트 환경에 50% 재생 요청
gor --input-raw ":80" \
    --output-http "https://test.example.com|50%"
테스트 환경에 필터 요청을 재생하기 위한 포트 (80번) 지정
gor --input-raw ":80" \
    --output-http https://test.example.com
    --http-allow-url /path1 \
    --http-allow-url /path2
HTTP 서버 및 APP 서버에 로그인할 수 있는 경우 이러한 명령을 실행하면 다른 환경에서 요청이 즉시 재생됩니다.
Docker 등 컨테이너를 사용할 때 CI와 조합하여 실행하는 것이 편리하다.
AWS의 ECS, GCP의 CloudRun에서 사용한 예를 들자.
AWS ECS + Goreplay
먼저 Docker file에 Goreplay 설치에 대해 설명합니다.
# Goreplay
ARG GOREPLAY_VERSION=1.3.3
RUN wget -q -O - https://github.com/buger/goreplay/releases/download/${GOREPLAY_VERSION}/gor_${GOREPLAY_VERSION}_x64.tar.gz | tar -xz -C /usr/local/bin
ENTRYPOINT 또는 CMD에서 실행된 케이스 안에서 Goreplay의 시작 명령을 기술합니다.
이때 환경 변수에서 부팅 여부를 확인한 다음 CI에서 환경 변수를 설정하는 것이 편리합니다.
(일반적으로 Goreplay를 시작하여 요청을 재생하려면 환경 변수가 설정된 CI의 작업에서 미리 게시 등)
if [ "$GOREPLAY_LISTEN" = "true" ]; then
  gor --input-raw ":80" \
    --output-http https://test.example.com
    --http-allow-url /path1 \
    --http-allow-url /path2 &
fi
& 설치 후 비동기식을 수행합니다.
ECS의 상황은 그리 어렵지 않을 것 같아서 가져올 수 있다.
GCP CloudRun + Goreplay
Goreplay의 경우 ECS와 마찬가지로 설정된 후에도 실행이 시작되지 않습니다.
나는 다음과 같은 오류가 발생할 것이라고 생각한다.
PCAP Activate error: Permission Denied
그룹 오류를 잡을 수 없습니다.
Goreplay는 네트워크 캡처를 하기 때문에 네트워크 장치(eth01 등)에 접근한다.
그때는 ioctl라고 불리는 시스템 호출이지만 클라우드런이라면 제한을 받는다.
CloudRun은 gvisor라는 샌드박스 환경에서 실행되며 문서에도 다음과 같은 기술이 있습니다.Only a few ioctls are implemented for backing devices and file systems.
클라우드런은 고릴레이를 사용할 수 없다고 생각했는데 10월 말 클라우드런이 미리보기로 발표했다.
이에 따라 클라우드런의 실행 환경에서 2세대가 발표되고 2세대는 시스템 호출의 제한을 받지 않는다.
응용 프로그램
2세대에 대해서는 아직 미리보기이기 때문에 본격적인 촬영 환경 변동에 유의하시기 바랍니다.
2세대 클라우드SDK는 베타 명령을 설치하면 SDK부터 사용할 수 있는 최신형이다.
화면에서 설정할 수도 있어. (난 안 해봤어.)
CloudSDK를 사용하여 deploy를 진행할 때glocloud beta를 설치하고 --execution-environment 옵션을 사용하십시오.
# インストール
gcloud components install --quiet beta

# 第二世代でdeploy
gcloud beta run deploy example_service --execution-environment=gen2
주의점
Goreplay를 사용하는 데 중요한 일이 하나 있습니다.
그건 공식적인 요구사항에 개인정보와 기밀정보가 있는 경우에는 주의가 필요합니다.
요청이 재생되는 곳(테스트 환경)에서는 공식적인 요청이 들어오기 때문에 그 로그와 DB에는 개인정보와 기밀정보가 담긴다.
제품과 서비스로 인해 정보가 유출될 수 있으니 주의하세요!
총결산
어때요?
Goreplay는 프로그램 언어, 프레임워크, 장서 버전 업그레이드 시 공식 요구에 따라 테스트할 수 있다.
또 플랫폼 구성을 재검토할 때 공식 요청을 통해 부하 테스트를 할 수 있다.
애국자 피나지 아드빈트 달력이 16일 클라우드런에서 발표한 운영 환경 2세대와 Always CPU 검증 때 Goreplay를 사용한 글입니다. 기대해 주세요.

좋은 웹페이지 즐겨찾기