재시도는 멱이 아니다

4705 단어 logglier

묘사

여보세요,
우리는 Logglier gem의 시간 초과와 재시도 메커니즘이 약간 신비롭다는 것을 알아차렸다.우리는 보통 Logglier gem을 사용하여 Rails 3 응용 프로그램에서 Loggly에 로그인하지만, Rails 컨트롤러에서 이런 이상한 행동을 격리하고 복사합니다.우리는 Logglier의 기본 시간 초과 5초 (이것은 매우 긴 것 같다) 를 사용할 때, Logglier에서 보내는 시간 초과 경고와 다시 시도하는 것 같다는 것을 관찰했다.모든 로그가 단독으로 올바르게 보일 때도 있고, 여러 번 잘못 보일 수도 있습니다. (시간 초과와 재시도의 결과일 수도 있습니다.)per Loggly의 네트워크 인터페이스입니다.여러 개의 로그 기록이 우리를 걱정하게 하는데, 이것은 로그를 신뢰할 수 없게 한다. 왜냐하면 로그의 재시도는 멱이 아닌 것 같기 때문이다.
흥미로운 것은logglier의 기본 시간 초과를 10초로 덮어쓰려고 시도할 때, 우리는 한 로그의 여러 복사본의 같은 행동을 관찰했다. 시간 초과가 확실히 더 오래 걸릴 뿐이다.
만약 우리가 이러한 행위를 어떻게 테스트하고 관찰하는지 이해하는데 도움이 된다면, 다음spews는 rails 컨트롤러에서 복제한 것이다.그리고 이 로그 기록 활동과 Loggly의 웹 인터페이스에서 본 보고서를 비교합니다.
[테스트 시간 초과: 첫 번째 덮어쓰기 없음]은 각 Loggly 웹 인터페이스에 세 번 나타납니다.
'테스트 시간 초과: 두 번째 덮어쓰기 없음'이 정확하게 한 번 나타납니다.
'테스트 시간 초과: 10초 시간 초과 덮어쓰기, 첫 번째'가 정확하게 한 번 표시됩니다.
두 번째 테스트 시간 초과: 10초.
'테스트 시간 초과: 10초 시간 초과 덮어쓰기, 세 번째'가 4번 나타납니다.
###################### rails 콘솔에서
1.9.3p385:011>loggly=Logglier.새로 추가(ENV['LOGGLY MIXPANEL URL')
=>#,@formatter=#Proc:0x007f842eecabf8@/Users/mwong/.rvm/gems/ruby-1.9.3-p385/gems/logglier-0.2.8/lib/logglier/client.rb:61、@logdev=#\、@format=nil、@deliverer=#\、@verify_mode=0、@ca_file=nil、@read_timeout=5、@open_timeout=5、@failsafe=#IO:\、@format=nil、@headers={“Content Type”=>“text/plain”}、@http=#\>>、@mutex=#
1.9.3p385:012>loggly.정보([테스트 제한 시간: 첫 번째 덮어쓰기 없음])
경고: [1/3] 배송 시도 중 캡처됨EOFError: end of file reached: 2013-07-22 16:18:31-0700 심각도 = 정보, ["테스트 시간 초과: 첫 번째 덮어쓰기 없음"]
경고: [2/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:18:31-0700 심각도 = 정보, ["테스트 시간 초과: 첫 번째 덮어쓰기 없음"]
경고:[3/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:18:31-0700 심각도 = 정보, ["테스트 시간 초과: 첫 번째 덮어쓰기 없음"]
오류: 배송 시도 중 캡처됨Timeout::Error: Timeout::Error: 2013-07-22 16:18:31-0700 심각도 = 정보, ["테스트 시간 초과: 최초 무시"]
=> 쌍
1.9.3p385:016>loggly.정보(['테스트 시간 초과: 두 번째 덮어쓰기 없음')
=> 쌍
1.9.3p385:023>loggly_10=Logglier.새로 만들기(ENV['LOGGLY MIXPANEL URL'],:read timeout=>10,:open timeout=>10)
=>#,@formatter=#Proc:0x007f842be3b6e0@/Users/mwong/.rvm/gems/ruby-1.9.3-p385/gems/logglier-0.2.8/lib/logglier/client.rb:61、@logdev=#\、@format=nil、@deliverer=#\、@verify_mode=0、@ca_file=nil、@read_timeout=10、@open_timeout=10、@failsafe=#IO:\、@format=nil、@headers={“Content Type”=>“text/plain”}、@http=#\>>,@mutex=#
1.9.3p385:024>loggly_10.정보(["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 첫 번째])
경고:[1/3] 인도를 시도할 때 포획됨EOFError: end of file reached: 2013-07-22 16:23:17-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 처음"]
=> 쌍
1.9.3p385:025>loggly_10.정보(["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 두 번째])
경고: [1/3] 인도를 시도할 때 포획됨EOFError: end of file reached: 2013-07-22 16:24:44-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 두 번째"]
경고:[2/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:24:44-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 두 번째"]
경고:[3/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:24:44-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 두 번째"]
오류: 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:24:44-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 두 번째"]
=> 쌍
1.9.3p385:026>loggly_10.정보(["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 세 번째])
경고: [1/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:32:24-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 세 번째"]
경고:[2/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:32:24-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 세 번째"]
경고:[3/3] 인도를 시도할 때 포획됨Timeout::Error: Timeout::Error: 2013-07-22 16:32:24-0700 심각도 = 정보, ["테스트 시간 초과: 10초 시간 초과 덮어쓰기, 세 번째"]
=>true

토론 #1

logglyapi를 통해 幂 등 방식으로 로그를 전달할 수 있는 방법이 있다고 믿지 않습니다.예를 들어 Logglier는 Loggly에 로그 메시지를 보내고, Loggly는 이 메시지를 받아들여 데이터베이스/인덱스/어떤 것에 쓸 수 있지만, 시간 초과 시간 내에 200개의 코드를 되돌릴 수 없습니다.이 때 Logglier는 오류가 발생했다고 가정한 다음 로그 메시지를 다시 시도하거나 포기해야 합니다.

토론 #2

PS: Loggly가 새로운 API를 출시했지만 이 문제를 해결하지 못했다...걱정되는 경우 loggly에 문의하십시오.https://sites.google.com/a/loggly.com/migrationguide/home/api-updates
PPS는 Loggly에게 이 표를 누가 볼 수 있는지...
각 요청에 클라이언트에서 생성한 UUID를 포함시킬 수 있습니다.
그런 다음 지난 X시간/분 동안 이 UUID를 사용하여 요청을 처리한 경우 다음 중 하나를 수행합니다.
1. 이 요청을 받아들이고 버리고 200자모로 답장
2. 409(또는 적절한 HTTP 상태 코드)로 응답
그 전에, 혹은 내가 클라이언트에서 할 수 있는 일을 생각해 내면, 복구할 수 없는 이 문제를 닫아야 한다.

좋은 웹페이지 즐겨찾기