首頁  >  文章  >  微信小程式  >  微信開發之警報排查

微信開發之警報排查

Y2J
Y2J原創
2017-05-16 11:07:518277瀏覽

概要說明

微信公眾平台已對外開放介面警報,當微信伺服器向開發者推送訊息失敗次數達到預定閾值時,會將警報訊息傳送到指定微信警報群組中(設定方式:公眾平台->開發者中心->介面警報),請開發者積極主動關注警報,即時解決故障,提升微信公眾號的服務品質。

為了更好地根據警報訊息尾部的實例(提供了openid及時間戳stamp)進行問題排查,開發者需要在存取層、邏輯層等每一個層級都加上包含關鍵資訊的詳細日誌,以利於快速定位問題。

警報目前有2類:

1.通用警報,所有開發者都需要注意。

微信開發之警報排查

2.公眾號第三方平台報警,只有在微信開放平台(open.weixin.qq.com)上申請成為公眾號第三方平台的開發者,才需要關注此警報。

微信開發之警報排查

下面對具體的警報做範例以及排查指引說明。

警報內容說明

警報內容描述:

a)appid:公眾號碼appid
b)暱稱: 公眾號暱稱
c)時間:所有警報,都會提供首次發生異常的時間。 (如第一次發生逾時的時間,第一次發生回應失敗的時間)
d)內容:錯誤的具體描述
e)次數:發生失敗的次數
f)錯誤範例:錯誤範例裡註明了一些幫助找出問題的資訊。如:首次逾時開發者的IP和推播訊息類型。如果是回應失敗,錯誤範例也會註明首次回應失敗時開發者的回包。

一般情況下,透過警報提供的IP,時間,訊息類型,能夠比較快速的定位到第三方發生問題的原因。

警報範例1:超時報警

Appid: wxxxxxx
暱稱: WxNickName
時間: 2014-12-01 20:12:00
內容:微信伺服器向公眾號推送訊息或事件後,開發者5秒內沒有回傳
次數: 5分鐘1272次
錯誤範例: [IP=203.205.140.29][Event= UnSubscribe]

此警報表示:當微信伺服器向開發者推送取消追蹤事件時,開發者沒有在5秒內回傳結果。在2014-12-01 20:12:00-2014-12-01 20:17:00這5分鐘內發生了1272次。其中這5分鐘內第一次發生逾時的時間是:2014-12-01 20:12:00, 開發者的IP是:203.205.140.29,事件類型是取消追蹤事件。

警報範例2:回應失敗

##Appid: wxxxx暱稱: WxNickName
時間: 2014-12-01 20:12:00
內容: 微信伺服器向公眾號推送訊息或事件後,得到的回應不合法
次數: 5分鐘1320次
錯誤範例: [Event=Click] [ip=58.248.9.218][response_length= 10][response_content=Error 500:]

#此警報表示:微信伺服器向開發者推送自訂選單點擊事件時,開發者的回傳結果不合法。在2014-12-01 20:12:00-2014-12-01 20:17:00這5分鐘內發生了1320次。其中這5分鐘內第一次發生回應失敗的時間是:2014-12-01 20:12:00, 開發者的IP是:58.248.9.218,事件類型是點選選單事件,第三方回傳的內容長度為10個字節,內容為「Error 500:」。

警報範例3:連接逾時

Appid: wxxxx暱稱: WxNickName
時間: 2015-02-04 20:13:09
內容: 微信伺服器連接公眾號碼開發者伺服器時發生逾時,逾時時間為5秒
次數: 5分鐘7289次
錯誤範例: [IP=180.150.190.135][Msg=Text]

此警報表示:微信伺服器向開發者推送粉絲發送的文字訊息時,無法連線到開發者填寫的伺服器位址。在2015-02-04 20:13:09-2015-02-04 20:18:00這5分鐘內發生了7289次,這5分鐘內第一次發生連線逾時的時間是:2015-02-04 20:13:09, 開發者的IP是:180.150.190.135,事件類型是使用者推播的訊息。

各類別警報的排查方法

1.DNS失敗

此錯誤為微信伺服器在推送訊息給開發者時,解析dns失敗。如遇到此警報,請開發者確認:

a)填寫的url,網域是否有誤;
b) 網域是否發生變化,如過期,更新等。

如果不是以上2個問題,請聯絡微信公眾平台。

2.Dns逾時

目前不會有此錯誤。

3.連線逾時

此錯誤是微信伺服器和開發者伺服器3S內未連線成功。警報訊息會提供出首次發生連線失敗的時間和連線的IP。如遇此警報,請開發者確認:

a)該IP是否有誤。
b)該IP機器是否過載,連接過多。
c)如果是第三方提供伺服器託管,託管商是否有故障。
d)網路運營商是否有故障。

4.請求逾時

微信伺服器向開發者伺服器推播訊息或事件,開發者5秒內沒有回傳。請求逾時時,警報訊息會提供第一次出現請求逾時的時間,開發者IP和訊息類型。請開發者確認:

a)該IP是否有誤
b)該IP是否接收到警報訊息給予的該訊息類型的請求
c)該請求是否已處理時間過長

5.回應失敗

開發者沒有依照wiki中的回覆訊息格式回覆訊息,或是發生網路錯誤,會警報回應失敗,警報訊息會提供第一次出現請求回應失敗的時間,開發者的IP,訊息類型以及回應的訊息內容,請開發者確認:

##a)該IP是否有誤 b)該IP是否發生網路錯誤
c)該業務處理邏輯是否沒有依照wiki規範回覆訊息,或是進入了異常邏輯。

6.MarkFail(自動封鎖)

微信後台會即時統計開發者的失敗次數。當推播訊息給開發者發生大量失敗時,微信伺服器會自動封鎖開發者,1分鐘內不再推播任何訊息,並會傳送警報到微信群組。此警報是等級最高的警報,開發者在收到此警報時請盡快處理後台故障,恢復服務。事實上,開發者在收到此警報前,必然會收到連線逾時,請求逾時或回應失敗等警報,需要開發者即時去解決這些故障,避免被微信伺服器屏蔽,嚴重影響公眾號服務!

7.推送component_verify_ticket逾時& 8.推送component_verify_ticket失敗& 9.推送元件訊息逾時& 10.推送元件訊息失敗

以上4個警報只有公眾號第三方平台開發者會收到,其他公眾號開發者無需關注。由於公號第三方平台承載了更多的公眾號,因此公眾號第三方平台的服務品質需要更嚴格要求和報警,所以把這4個特殊的事件單獨報警。具體的問題找出方式與4,5是一樣的,這裡不在贅述。關於公眾號第三方平台的具體申請與開發實現,請前往微信開放平台(open.weixin.qq.com)

常見問題

1.如何排查DNS失敗的問題?

1.Ping測試你們MP上配置的url裡的域名,確認是否能夠得到正確的IP。如不能得到或錯誤,請到你們的網域託管商管理系統上檢查配置。

2.如1能夠得到正確的IP,又有DNS失敗的警報;請使用DNS伺服器182.254.116.116             驗證驗證。
Linux :   dig @182.254.116.116 網域名稱;windows 修改網路設定裡的DNS伺服器位址,然後再ping 網域。如果得到的IP不正確或得不到,請聯絡微信團隊。

2.如何解決連線逾時問題?

1.查看是否網路環境問題。
  (1)使用公眾平台接口,獲取到微信回調伺服器的IP,api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN,
  (2)在你們的服務上ping 測試,檢查你們伺服器到微信回呼叫伺服器的網路品質。如有網路問題,請聯絡你們的伺服器供應商解決。

2.查看存取層伺服器連線數,負載,nginx的配置,允許的連接個數。查看nginx錯誤日誌是否有「Connection reset by peer」或「Connection timed out」錯誤日誌,如有說明nginx連線數過超負載。
3.建議搭建測試工具,對系統進行心跳檢查,對系統負載,連接數,處理數,處理耗時進行即時監控警報。
對於nginx配置,這裡提供官方文檔和一篇簡單配置介紹鏈接,希望有幫助: nginx.org/en/docs/,重點關注連接數配置,日誌配置等。 nginx的一些重要設定參考範例如下:

worker_processes  16;          //CPU核数
error_log  logs/error.log  info;   //错误日志log
worker_rlimit_nofile 102400;     //打开最大句柄数
events {
    worker_connections  102400;   //允许最大连接数
}
//请求日志记录,关键字段:request_time-请求总时间,upstream_response_time后端处理时 间
log_format  main  '$remote_addr  - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$host"  "$cookie_ssl_edition" '
                 '"$upstream_addr"   "$upstream_status"  "$request_time"  '
                 '"$upstream_response_time" ';
   access_log  logs/access.log  main;

3.如何解決請求逾時問題?

每個模組都需要有完整的日誌,能夠查出每個請求在每個模組的耗時信息,配合微信警報提供信息,能夠很容易的定位到是哪個伺服器出問題。常見的原因是:

1)機器負載太高,耗時增加
2)機器處理異常,訊息遺失
3)機器異常,對於機器處理異常,建議盡快修復bug,對於機器異常,請盡快封鎖有問題的機器。這裡對機器負載太高,簡單提供可行的解決方案。方案一:優化性能,擴容。檢查負載情況(cpu,內存,io,網絡,詳見附錄),根據具體性能瓶頸的不同,採取不同的優化方式。方案二:異步處理。如果微信伺服器推送的訊息來不及即時處理,可將訊息先存儲,先返回success給微信伺服器,後台可後續再處理訊息,如果需要回覆用戶訊息,可透過呼叫客服訊息介面API再回覆用戶訊息。

4.如何解決access_token儲存和使用問題?

經常有第三方回饋access_token造成服務中斷的問題,公眾平台排查問題發現,大部分第三方都在瘋狂刷新access_token,使得access_token超出介面頻率限製而失效。 這裡提供一個較簡單的access_token 儲存和使用方案。

1)中控伺服器定時(建議1小時)呼叫微信api,刷新access_token,將新的access_token 存入mysql(或其他儲存),
2 )其他工作伺服器每次呼叫微信api時從mysql(或其他儲存)取得access_token,並可在記憶體快取一段時間(建議1分鐘)。

公共平台會保證在access_token刷新後,舊的access_token在5分鐘內仍能使用,以確保第三方在更新access_token時不會發生第三方調用微信api的失敗。

【相關推薦】

1. 特別推薦#:「php程式設計師工具箱」V0.1版本下載

2. 微信公眾號平台原始碼下載

3. 微信投票原始碼下載

以上是微信開發之警報排查的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn