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 502 Bad Gateway HTTP durum kodunu ECONNRESET koduyla birlikte alır.

Hata mesajı

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

HTTP/1.1 502 Bad Gateway

Yanıt aşağıdaki hata mesajını içerir:

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

Olası nedenler

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
Yanlış yapılandırılmış keep-alive zaman aşımı Edge Microgateway ile hedef sunucu arasında keep-alive zaman aşımları yanlış yapılandırılmış. Edge Public ve Private Cloud kullanıcıları
Hedef sunucu bağlantıyı erken kapatıyor Edge Microgateway, istek yükünü gönderirken hedef sunucu bağlantıyı erken kapatıyor. Edge Public ve Private Cloud kullanıcıları

Sık karşılaşılan teşhis adımları

  1. Edge Microgateway günlüklerini kontrol edin:
    /var/tmp/edgemicro-`hostname`-*.log
  2. Belirli bir süre boyunca (sorun geçmişte yaşandıysa) 502 kodlu ECONNRESET hatalar olup olmadığını veya 502 ile hâlâ başarısız olan istekler olup olmadığını arayı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üğe kaydetme düzeyini warn veya info olarak ayarladıysanız ikinci öğede hedef sunucu ana makine adı ve bağlantı noktası da dahil olmak üzere bir [warn] mesajı yer alır. Bu örnekte X.X.X.X:8080 değeri kullanılıyor. Bu değer daha sonra 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 Microgateway ile bağlantıyı kapattığını gösterir. Bu durumun ne sıklıkta yaşandığını belirlemek için günlüklerde arama yapabilirsiniz.

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

Teşhis

  1. Yaygın teşhis adımlarındaki adımları uygulayın ve [socket hang up][ECONNRESET] hatasını alıp almadığınızı doğrulayın.
  2. Cevabınız evet ise aşağıdaki tcpdump yardımıyla daha ayrıntılı bir inceleme yapın:

tcpdump'ı kullanma

  1. Aşağıdaki komutla Edge Microgateway ana makine işletim sisteminde Edge Microgateway ile arka uç sunucusu arasında tcpdump yakalayın:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. Yakalanan tcpdump öğelerini analiz edin:

    Örnek tcpdump çıkışı: ( Daha büyük resmi görüntüleyin)

    Yukarıdaki örnekte tcpdump şunları görebilirsiniz:

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

    Bu örnekte aynı bağlantı en az bir kez başarıyla yeniden kullanılmıştır. Ancak son istekte sunucu, beş saniyelik boşta kalma süresinden sonra bağlantının kapatılmasını başlatır. Bu süre, istemcinin yeni bir istek gönderdiği zamana denk gelir. Bu, arka uç sunucusunun canlı tutma zaman aşımının büyük olasılıkla istemcide ayarlanan değerden daha kısa veya bu değere eşit olduğunu gösterir. Bunu doğrulamak için Uç Microgateway ve arka uç sunucusunda etkin kalma zaman aşımını karşılaştırma başlıklı makaleyi inceleyin.

keep-alive zaman aşımlarını karşılaştırma

  1. Edge Microgateway'in belirli bir keep-alive zaman aşımı özelliği yoktur. Bu, çalıştığı işletim sistemi tarafından belirlenir. Windows, Linux ve Docker kapsayıcıları yaygın örneklerdir.
  2. Bu özellik, işletim sisteminde özelleştirilmiş olabilir. Sistem yöneticinize danışın. Linux işletim sistemlerinde varsayılan olarak iki saatlik bir keep-alive zaman aşımı 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 canlı tutma zaman aşımı değerinin, yukarıdaki örnekte olduğu gibi arka uç sunucusundaki canlı tutma zaman aşımı özelliğinin değerinden daha yüksek olduğunu belirlerseniz bu durum 502 hatalarına neden olur.

Çözünürlük

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

  1. Arka uç sunucusunda etkin tutma zaman aşımı için ayarlanan değeri belirleyin.
  2. İşletim sisteminde, keep-alive zaman aşımı özelliğinin arka uç sunucusunda ayarlanan değerden daha düşük olmasını sağlayacak şekilde keep-alive zaman aşımı özelliği için uygun bir değer yapılandırın. Bu işlem için işletim sisteminize uygun adımları kullanın.

En İyi Uygulama

Bu tür yarış koşullarını ve 502 hatalarını önlemek için aşağı akış bileşenlerinin her zaman yukarı akış sunucularında yapılandırılanlardan daha düşük bir etkin tutma zaman aşımı eşiğine sahip olması önemle tavsiye edilir. Her bir aşağı akış atlaması, her bir yukarı akış atlamasından daha düşük olmalıdır. Edge Microgateway'de aşağıdaki yönergeleri kullanmak 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 daha kısa olmalıdır.

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

    edgemicro:
      keep_alive_timeout: 65000
  2. Edge Microgateway işletim sistemi keep-alive zaman aşımı, hedef sunucu keep-alive zaman aşımından daha kısa olmalıdır.
  3. Edge Microgateway'in önünde veya arkasında başka atlamalar varsa aynı kural uygulanmalıdır. Yukarı akışla bağlantıyı kapatma sorumluluğunu her zaman aşağı akış istemcisine 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ı uygulayın ve [socket hang up][ECONNRESET] hatasını alıp almadığınızı doğrulayın.
  2. Evetse aşağıda açıklandığı gibi tcpdump yardımıyla daha ayrıntılı bir inceleme yapın.

    Yukarıdaki örnekteki [targetRequest error][GET][][socket hang up][ECONNRESET] hata mesajı, bu hatanın Edge Microgateway isteği arka uç (hedef) sunucuya gönderirken oluştuğunu gösterir. Yani Edge Microgateway, arka uç sunucusuna API isteği göndermiş ve yanıtı bekliyordu. Ancak arka uç sunucusu, Edge Microgateway yanıt almadan önce bağlantıyı aniden sonlandırdı.

  3. Arka uç sunucu günlüklerinizi kontrol edin ve arka uç sunucunun bağlantıyı aniden sonlandırmasına neden olabilecek herhangi bir hata veya bilgi olup olmadığını görün. Hata veya bilgi bulursanız Çözüm bölümüne gidip sorunu arka uç sunucunuzda 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 öğelerini analiz edin:

    Örnek tcpdump çıkışı: ( Daha büyük resmi görüntüleyin)

    Yukarıdaki örnekte tcpdump şunları görebilirsiniz:

    1. 4 numaralı pakette Edge Microgateway, hedef sunucuya GET isteği gönderdi.
    2. 5 numaralı pakette hedef sunucu, isteği onaylamak için ACK ile yanıt verdi.
    3. Ancak 6 numaralı pakette hedef sunucu, yanıt yüküyle yanıt vermek yerine bağlantının kapatılmasını başlatan bir FIN, ACK gönderir.
    4. 7 numaralı paketten itibaren bağlantı karşılıklı olarak kapatılır. Bağlantı, yanıt gönderilmeden önce kapatıldığından Edge Microgateway, HTTP 502 hatasını istemciye geri döndürür.
    5. 8 numaralı paketin zaman damgasının, 2021-06-23T03:52:24.110Z Edge Microgateway günlüklerinde hatanın kaydedildiği zaman damgasına karşılık geldiğini unutmayın. Günlük dosyalarındaki ve tcpdump içindeki zaman damgaları, hataları gerçek paketlerle ilişkilendirmek için kullanılabilir.

    Çözünürlük

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

    Sorun devam ederse ve 502 Bad Gateway Error ile ilgili sorun giderme konusunda yardıma ihtiyacınız varsa veya sorunun Edge Microgateway'den kaynaklandığını düşünüyorsanız Teşhis bilgilerini toplama başlıklı makaleyi inceleyin.

    Teşhis bilgilerini toplamalıdır

    Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve Apigee Edge Destek Ekibi ile iletişime geçin:

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