概要說明
微信公眾平台已對外開放介面警報,當微信伺服器向開發者推送訊息失敗次數達到預定閾值時,會將警報訊息傳送到指定微信警報群組中(設定方式:公眾平台->開發者中心->介面警報),請開發者積極主動關注警報,即時解決故障,提升微信公眾號的服務品質。
為了更好地根據警報訊息尾部的實例(提供了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]
各類別警報的排查方法
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規範回覆訊息,或是進入了異常邏輯。
2.如1能夠得到正確的IP,又有DNS失敗的警報;請使用DNS伺服器182.254.116.116 驗證驗證。
Linux : dig @182.254.116.116 網域名稱;windows 修改網路設定裡的DNS伺服器位址,然後再ping 網域。如果得到的IP不正確或得不到,請聯絡微信團隊。
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中文網其他相關文章!