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ı
- Edge Microgateway günlüklerini kontrol edin:
/var/tmp/edgemicro-`hostname`-*.log
- Belirli bir süre boyunca
ECONNRESET
koduyla ilgili502
hatası olup olmadığını (sorun geçmişte olduysa) veya502
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][]
- Günlük düzeyinizi
warn
veyainfo
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 örnekteX.X.X.X:8080
kullanılmıştır. Bu, daha sonra birtcpdump
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]
[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
- 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. Yanıt evetse aşağıda açıklandığı şekilde
tcpdump
'in yardımıyla daha ayrıntılı inceleme yapın:
tcpdump kullanma
- 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
- Yakalanan
tcpdump
öğesini analiz edin:Örnek tcpdump çıkışı: ( büyük resmi göster)
Yukarıdaki
tcpdump
örneğinde şunları görebilirsiniz:- 250288 paketinde istemci bir
POST
isteği gönderir. - 250371 paketinde sunucu
200 OK
ile yanıt verir. - İstemci 250559 paketinde bir
ACK.
gönderir. - Sunucu, 250560 paketinde
Continuation
mesajını gönderir. - İstemci 250561 paketinde bir
ACK.
gönderir. - 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. - 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 paketindekiRST
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.
- 250288 paketinde istemci bir
Canlı tutma zaman aşımlarını karşılaştırma
- 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.
- 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.
- 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.
- İş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.
- Arka uç sunucusunda keep-alive zaman aşımı için ayarlanan değeri belirleyin.
- İş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:
İ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ızakeep_alive_timeout
değerini ekleyin.edgemicro: keep_alive_timeout: 65000
- Edge Microgateway işletim sistemi koruma zaman aşımı, hedef sunucuyu canlı tutma zaman aşımından kısa olmalıdır.
- 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
- 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. - 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ı. - 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.
- 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
- Yakalanan
tcpdump
öğesini analiz edin:Örnek tcpdump çıkışı: ( büyük resmi göster)
Yukarıdaki
tcpdump
örneğinde şunları görebilirsiniz:- 4 paketinde, Edge Microgateway hedef sunucuya bir
GET
isteği gönderdi. - 5 paketinde, hedef sunucu isteği onaylamak için
ACK
ile yanıt vermiştir. - 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. - 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. - 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 vetcpdump
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 anaconfig.yaml
dosyasında (logging > dir parameter
) geçersiz kılınabilir. Günlük dosyalarını Apigee Destek birimine sağlamadan öncelog > level
öğesinininfo
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çinORG-ENV-config.yaml
adlı bir dosya bulunur. Lütfen etkilenen kuruluş ve ortam için bu dosyanın tamamını yükleyin.
- 4 paketinde, Edge Microgateway hedef sunucuya bir