서버 요청 한도 모니터링

서버 요청 한도 모니터링 (Rate Limit Server Limits - Monitor)

Consul 기능 중 네트워크에서 발생하는 읽기 및 쓰기 요청 작업을 모니터링할 수 있게 해주는 기능을 설명하는 문서예요. 이를 통해 일반 워크로드를 이해하고 Consul 클라이언트 에이전트와 서비스가 Consul 서버에 만들 수 있는 요청 수에 대한 안전한 한도를 설정할 수 있어요.

출처: 문서

본문

이 주제는 네트워크에서 발생하는 읽기 및 쓰기 요청 작업을 모니터링할 수 있게 해주는 Consul 기능을 설명해요. 이 기능을 사용해 일반 워크로드를 이해하고 Consul 클라이언트 에이전트와 서비스가 Consul 서버에 할 수 있는 요청 수에 안전한 한도를 설정할 수 있어요.

rate limit 로그 접근 (Access rate limit logs)

Consul은 각 rate limit 요청에 대해 로그 줄을 출력해요. 이 로그는 요청의 출처와 구성된 한도를 식별하는 데 필요한 정보를 제공해요. Consul은 이 로그를 DEBUG 로그 레벨로 출력하며, 서버 상태에 영향을 주지 않기 위해 로그를 버릴(drop) 수 있어요. 로그 줄을 버리면 rpc.rate_limit.log_dropped 메트릭이 증가해요.

다음 예시 로그는 127.0.0.1:53562에서 KVS.Apply로 보낸 RPC 요청이 한도를 초과했음을 보여줘요:

2023-02-17T10:01:15.565-0500 [DEBUG] agent.server.rpc-rate-limit: RPC
exceeded allowed rate limit: rpc=KVS.Apply source_addr=127.0.0.1:53562
limit_type=global/write limit_enforced=false

로그 파일을 어디에서 가져오는지에 대한 정보는 log_file을 참고하세요.

rate limit 메트릭 검토 (Review rate limit metrics)

Consul은 rate limit과 관련된 다음 메트릭을 수집해요:

  • 한도 유형 (Type of limit)
  • 작업 (Operation)
  • rate limit 모드 (Rate limit mode)

rate limit과 관련된 메트릭을 보려면 /agent/metrics API 엔드포인트를 호출해요. API 사용법은 메트릭 보기를 참고하세요. 다음 예시에서 Consul은 consul 서비스에 대한 호출이 한 번 초과했기 때문에 호출을 버렸어요:

$ curl http://127.0.0.1:8500/v1/agent/metrics
{
  . . .
  "Counters": [
    {
      "Name": "consul.rpc.rate_limit.exceeded",
      "Count": 1,
      "Sum": 1,
      "Min": 1,
      "Max": 1,
      "Mean": 1,
      "Stddev": 0,
      "Labels": {
        "service": "consul"
      }
    },
    {
      "Name": "consul.rpc.rate_limit.log_dropped",
      "Count": 1,
      "Sum": 1,
      "Min": 1,
      "Max": 1,
      "Mean": 1,
      "Stddev": 0,
      "Labels": {}
    }
  ],
  . . .
}

추가 정보는 텔레메트리(Telemetry)를 참고하세요.

요청 거부 (Request denials)

rate limiting 이유로 HTTP 요청이 거부되면 Consul은 다음 오류 중 하나를 반환해요:

  • 429 Resource Exhausted: 서버가 요청을 수행할 수 없지만 다른 서버가 잠재적으로 이를 충족할 수 있음을 나타내요. 이 오류는 어떤 서버든 stale read 요청을 충족할 수 있기 때문에 stale read에서 가장 흔해요. 이 유형의 오류를 해결하려면 다른 서버로 요청을 즉시 재시도할 것을 권장해요. 요청이 Consul 클라이언트 에이전트에서 온 것이라면 에이전트는 rpc_hold_timeout 구성에 설정된 한도까지 요청을 자동으로 재시도해요.
  • 503 Service Unavailable: 서버가 요청을 수행할 수 없고 다른 서버도 요청을 충족할 수 없음을 나타내요. 이는 보통 일관된 읽기(consistent reads)나 쓰기에서 발생해요. 이 경우 지수 백오프(backoff) 일정에 따라 재시도할 것을 권장해요. 요청이 Consul 클라이언트 에이전트에서 온 것이라면 에이전트는 rpc_hold_timeout 구성에 따라 요청을 자동으로 재시도해요.

추가 정보는 서버의 rate limit 도달을 참고하세요.

더 알아보기 (Learn more)