502 Bozuk Ağ Geçidi - Yuvadan çıkış

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, Edge Microgateway'deki API çağrılarına yanıt olarak ECONNRESET koduyla 502 Bad Gateway HTTP durum kodunu alır.

Hata mesajı

İstemci aşağıdaki yanıt kodunu görür:

HTTP/1.1 502 Bad Gateway

Yanıtta aşağıdaki hata mesajı yer alır:

{"message":"socket hang up","code":"ECONNRESET"}

Olası nedenler

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Keep-alive zaman aşımının yanlış yapılandırılmış Edge Mikro Ağ Geçidi ile hedef sunucu arasında yanlış yapılandırılmış koruma zaman aşımları. Edge Herkese Açık ve Özel Bulut kullanıcıları
Hedef sunucu bağlantıyı erken kapatıyor Edge Mikro Ağ Geçidi istek yükünü gönderirken hedef sunucu bağlantıyı erkenden kapatır. Edge Herkese Açık ve Özel Bulut kullanıcıları

Yaygın teşhis adımları

  1. Edge Microgateway günlüklerini kontrol edin:
    /var/tmp/edgemicro-`hostname`-*.log
    
  2. Belirli bir süre boyunca ECONNRESET koduyla ilgili 502 hatası olup olmadığını (sorun geçmişte olduysa) veya 502 nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın.
    2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test]
    [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684]
    [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
    
  3. Günlük düzeyinizi warn veya info olarak ayarladıysanız ikinci öğede hedef sunucu ana makine adını ve bağlantı noktasını içeren bir [warn] mesajı da bulunur. Bu örnekte X.X.X.X:8080 kullanılmıştır. Bu, daha sonra bir tcpdump yakalamak için kullanılabilir.
    2021-06-23T03:52:24.109Z
    [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup]
    [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware]
    [targetRequest error][GET][][socket hang up][ECONNRESET][395]
    
  4. [socket hang up][ECONNRESET] hata kodu, hedef sunucunun Edge Mikro Ağ Geçidi ile bağlantıyı kapattığını belirtir. Bu durumun ne sıklıkta olduğunu belirlemek için günlüklerde arama yapılabilir.

Neden: Keep-alive zaman aşımının yanlış yapılandırılmış olması

Teşhis

  1. Yaygın teşhis adımlarındaki adımları kullanın ve [socket hang up][ECONNRESET] hatası alıp almadığınızı doğrulayın.
  2. Yanıt evetse aşağıda açıklandığı şekilde tcpdump'in yardımıyla daha ayrıntılı inceleme yapın:

tcpdump kullanma

  1. Aşağıdaki komutu kullanarak Edge Microgateway ana makine işletim sisteminde Edge Mikro Geçit ve arka uç sunucusu arasında bir tcpdump yakalama:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. Yakalanan tcpdump öğesini analiz edin:

    Örnek tcpdump çıkışı: ( büyük resmi göster)

    Yukarıdaki tcpdump örneğinde şunları görebilirsiniz:

    1. 250288 paketinde istemci bir POST isteği gönderir.
    2. 250371 paketinde sunucu 200 OK ile yanıt verir.
    3. İstemci 250559 paketinde bir ACK. gönderir.
    4. Sunucu, 250560 paketinde Continuation mesajını gönderir.
    5. İstemci 250561 paketinde bir ACK. gönderir.
    6. 262436 paketinde sunucu, istemciye bir FIN, ACK göndererek bağlantının kapatılmasını başlatır. Bunun, önceki paketten (250561) yaklaşık beş saniye sonra olduğunu unutmayın.
    7. 262441 paketinde istemci başka bir POST isteği gönderir. Ancak sunucu zaten bağlantı kapatma işlemini başlattığı için bu işlem başarısız olur. 262441 paketindeki RST ile yanıt verir.

    Aynı bağlantı bu örnekte en az bir kez başarıyla yeniden kullanılmış, ancak son istekte sunucu, beş saniyelik boşta kalma süresinin ardından bağlantı kapatma işlemini başlatmıştır. Bu, istemcinin yeni bir istek gönderdiği aynı anda da gerçekleşir. Bu durum, arka uç sunucusu koruma zaman aşımının büyük olasılıkla istemcide ayarlanan değere eşit veya daha kısa olduğu anlamına gelir. Bunu doğrulamak için Edge Microgateway ve arka uç sunucusundaki keep-alive zaman aşımını karşılaştırma bölümüne bakın.

Canlı tutma zaman aşımlarını karşılaştırma

  1. Edge Mikro Ağ Geçidi'nin belirli bir keep-alive zaman aşımı özelliği yoktur. Çalıştırıldığı işletim sistemi tarafından belirlenir. Yaygın örnekler Windows, Linux ve Docker kapsayıcılarıdır.
  2. Bunun işletim sisteminde özelleştirilmiş olması mümkündür. Sistem yöneticinize danışın. Linux işletim sistemlerinin varsayılan olarak iki saatlik bir canlı tutma zaman aşımı süresi vardır.
  3. Ardından, arka uç sunucunuzda yapılandırılan keep-alive zaman aşımı özelliğini kontrol edin. Arka uç sunucunuzun 10 saniye değeriyle yapılandırıldığını varsayalım.
  4. İşletim sistemindeki keep-alive zaman aşımı değerinin, yukarıdaki örnekte olduğu gibi arka uç sunucusundaki keep-alive zaman aşımı özelliğinin değerinden yüksek olduğunu belirlerseniz 502 hatalarının nedeni budur.

Çözünürlük

Edge Microgateway'in çalıştığı işletim sisteminde, keep-alive zaman aşımı özelliğinin arka uç sunucusuna göre her zaman daha düşük olduğundan emin olun.

  1. Arka uç sunucusunda keep-alive zaman aşımı için ayarlanan değeri belirleyin.
  2. İşletim sisteminizde keep-alive zaman aşımı özelliği için uygun bir değeri yapılandırın. Örneğin, keep-alive zaman aşımı özelliği arka uç sunucusunda ayarlanan değerden düşük olacak şekilde, işletim sisteminiz için geçerli olan adımları uygulayın.

En İyi Uygulama

Bu tür yarış koşullarından ve 502 hatalarından kaçınmak için aşağı akış bileşenlerinin, yukarı akış sunucularında yapılandırılandan her zaman daha düşük bir canlı tutma zaman aşımı eşiğine sahip olması kesinlikle önerilir. Her aşağı akış durak, her bir yukarı akıştan düşük olmalıdır. Edge Mikro Ağ Geçidi'nde aşağıdaki yönergelerin kullanılması iyi bir uygulamadır:

  1. İstemci uygulamasındaki veya yük dengeleyicideki keep-alive zaman aşımı, Edge Microgateway keep-alive zaman aşımından az olmalıdır.

    Edge Mikro Ağ Geçidi'nde keep-alive zaman aşımını yapılandırmak için ~/.edgemicro/org-env-config.yaml dosyanıza keep_alive_timeout değerini ekleyin.

    edgemicro:
      keep_alive_timeout: 65000
    
  2. Edge Microgateway işletim sistemi koruma zaman aşımı, hedef sunucuyu canlı tutma zaman aşımından kısa olmalıdır.
  3. Edge Mikro Ağ Geçidi'nin önünde veya arkasında başka atlamalarınız varsa aynı kural uygulanmalıdır. Yukarı akış bağlantısını kapatmayı her zaman aşağı akış istemcisinin sorumluluğunda bırakmalısınız.

Neden: Hedef sunucu bağlantıyı erken kapatıyor

Teşhis

  1. Yaygın teşhis adımları bölümünde açıklanan adımları kullanın ve [socket hang up][ECONNRESET] hatası alıp almadığınızı doğrulayın.
  2. Cevabınız evet ise, tcpdump yardımıyla aşağıda açıklandığı şekilde daha ayrıntılı inceleme yapın.

    Yukarıdaki örnekte yer alan [targetRequest error][GET][][socket hang up][ECONNRESET] hata mesajı, bu hatanın Edge Microgateway tarafından arka uç (hedef) sunucuya istek gönderilirken oluştuğunu belirtir. Yani Edge Microgateway, API isteğini arka uç sunucusuna gönderdi ve yanıtı bekliyordu. Ancak, Edge Microgateway yanıt almadan önce arka uç sunucusu bağlantıyı aniden sonlandırdı.

  3. Arka uç sunucu günlüklerinizi kontrol edin ve arka uç sunucusunun bağlantıyı aniden sonlandırmasına yol açmış olabilecek herhangi bir hata veya bilgi olup olmadığını kontrol edin. Herhangi bir hata veya bilgi bulursanız Çözüm bölümüne gidin ve arka uç sunucunuzda sorunu uygun şekilde düzeltin.
  4. Arka uç sunucunuzda herhangi bir hata veya bilgi bulamazsanız Edge Microgateway sunucusunda tcpdump çıkışını toplayın:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. Yakalanan tcpdump öğesini analiz edin:

    Örnek tcpdump çıkışı: ( büyük resmi göster)

    Yukarıdaki tcpdump örneğinde şunları görebilirsiniz:

    1. 4 paketinde, Edge Microgateway hedef sunucuya bir GET isteği gönderdi.
    2. 5 paketinde, hedef sunucu isteği onaylamak için ACK ile yanıt vermiştir.
    3. Ancak 6. pakette, hedef sunucu bir yanıt yüküyle yanıt vermek yerine bağlantı kapatma işlemini başlatan bir FIN, ACK gönderir.
    4. 7'den sonraki paketlerde bağlantı karşılıklı olarak kapatılır. Yanıt gönderilmeden önce bağlantı kapatıldığı için Edge Microgateway, HTTP 502 hatasını istemciye geri döndürür.
    5. 8 paketinin zaman damgası (2021-06-23T03:52:24.110Z ), Edge Microgateway günlüklerine hatanın kaydedildiği zaman damgasına karşılık gelir. Hataları gerçek paketlerle ilişkilendirmek için genellikle günlük dosyalarındaki ve tcpdump içindeki zaman damgaları kullanılabilir.

    Çözünürlük

    Arka uç sunucuda sorunu uygun şekilde düzeltin.

    Sorun devam ediyorsa ve 502 Bad Gateway Error sorunlarını giderme konusunda yardıma ihtiyacınız varsa veya bunun Edge Microgateway'de bir sorun olduğundan şüpheleniyorsanız Teşhis bilgilerini toplamanız gerekenler bölümüne gidin.

    Teşhis bilgileri toplanmalıdır

    Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki teşhis bilgilerini toplayıp Apigee Edge Destek Ekibi ile iletişime geçin:

    • Günlük dosyaları: Varsayılan klasör /var/tmp şeklindedir ancak ana config.yaml dosyasında (logging > dir parameter) geçersiz kılınabilir. Günlük dosyalarını Apigee Destek birimine sağlamadan önce log > level öğesinin info olarak değiştirilmesi önerilir.
    • Yapılandırma dosyası: Edge Microgateway'in ana yapılandırması, varsayılan Edge Microgateway klasöründeki $HOME/.edgemicro adlı YAML dosyasında bulunur. default.yaml adında bir varsayılan yapılandırma dosyası ve her bir ortam için ORG-ENV-config.yaml adlı bir dosya bulunur. Lütfen etkilenen kuruluş ve ortam için bu dosyanın tamamını yükleyin.