Closed MrMYHuang closed 8 months ago
目前 (11:36 pm) CBETA API server 又突然回復正常了。
(另外 server 應該沒有開放 ping 測試,所以現在測 ping 也是收不到回應)
抱歉這兩天支援國際會議,我再找時間查看看。
抱歉這兩天支援國際會議,我再找時間查看看。
謝謝您。
@MrMYHuang 我對 Server 不太熟,以下檢查請指教。
server 沒有擋 ping, 我在校內可以 ping 得到, 大概是學校防火牆擋的。
查 Apache error log, 在 23:09 到 23:39 之間,相關的只有這個:
[ N 2022-12-15 23:09:37.7956 147920/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 162000, application cbdata_stable
[ N 2022-12-15 23:09:37.7971 147920/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 207373, application cbdata_stable
這類訊息在當天 log 裡有11個,時間從 2022-12-15 00:35 開始就有了,也幾乎每天都有,我目前不知道怎麼解決它們,也不知道它們是否是造成 API 無回應的原因。
3.1
F, [2022-12-15T20:42:25.032077 #148105] FATAL -- :
ActionController::RoutingError (No route matches [GET] "/include/dialog/select_images_post.php")
類似的訊息在當天的 log 裡出現8次,似乎是有人在利用這個漏洞 試著攻擊本站。
這應該在 RoutingError 就被擋掉了,不會造成危害才對。
3.2
在 23:30 附近有多個(當天共108個) 如下 download html 參數錯誤造成的檔案不存在:
F, [2022-12-15T23:30:37.558597 #148105] FATAL -- :
ActionController::MissingFile (Cannot read file /var/www/cbapi4/releases/20221213014053/data/download/html/T0220C_001):
這會出現如下錯誤訊息:
We're sorry, but something went wrong.
If you are the application owner check the logs for more information.
這個我可以修改程式,加檢查,回應 not found 的 JSON 資料。
如果您使用的就是 這個下載 HTML 的 API, 那很可能就是這個原因。
但是這也應該不會造成整個 API 都無回應。
以上是我目前能想到的檢查,抱歉還沒能查出原因並修正。
@RayCHOU 您好,阿彌陀佛。
我不是專門的 server 管理者,僅能以我所知幫忙。
這應該在 RoutingError 就被擋掉了,不會造成危害才對。
我也認為是這樣。
如果您使用的就是 這個下載 HTML 的 API, 那很可能就是這個原因。
我的 app 沒有使用此 API。
我認為最可能的問題是這個:
[ N 2022-12-15 23:09:37.7956 147920/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 162000, application cbdata_stable [ N 2022-12-15 23:09:37.7971 147920/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 207373, application cbdata_stable
找了相關資料,有人也有類似問題: https://github.com/phusion/passenger/issues/1865 我認為應該是 cbdata_stable 收到某 request 後,一直無 response,導致後續的 requests 在排隊。如果短期查不出 cbdata_stable 無回應的問題,可以加上"逾時 (timeout) 重啟 (restart)" cbdata_stable app 的機制暫時解決,待日後補上更多 log 查清原因。
我對 ruby 不熟,但有查到 Nginx + Passenger 有提供重啟 app 的功能: https://www.phusionpassenger.com/library/admin/nginx/restart_app.html#application-restart-methods cbdata_stable 可以新增一健康檢查 API, 如 /health,可以簡單回一個 http 200 或作更複雜的檢查。 只要用任何程式語言再寫另一支自動檢查程式,定時 call cbdata_stable /health,若 timeout,就重啟 cbdata_stable。另外除了重啟,建議也加上 (E-mail?) 通知功能,才能在問題發生時得知,進一步查清問題。
阿彌陀佛,感謝 @MrMYHuang,您的建議很好。
目前打算這麼做:
- 另寫個小程式,10 分鐘 檢查一次 正式版某個網址,有沒有正常 response,如果 timeout,就 restart application. (email 通知功能,我再來看好不好做)
"E-mail 通知"的部分若有程式套件,滿容易做的。例如 nodejs 有 nodemailer 套件,可以用 Gmail SMTP 寄信。也可以考慮用 AWS SES 寄信。
"E-mail 通知"的部分若有程式套件,滿容易做的。例如 nodejs 有 nodemailer 套件,可以用 Gmail SMTP 寄信。也可以考慮用 AWS SES 寄信。
感謝提供資訊,我再來試看看。
2022-12-23 17:40 起 每隔十鐘檢查正式版首頁回傳 200, 目前為止都正常。
開發版已提供 Health check: https://cbdata.dila.edu.tw/dev/health 預定農曆年後 正式版 Q1 上線時提供。 (目前只是簡單回應 HTTP 200, 沒真的做什麼檢查)
您好:
近期較頻繁的遇到兩次 CBETA API 無回應的問題,會導致 cbetaonline.dila.edu.tw 無法開啟經文之類的問題。前一次是過了幾 10 分鐘,突然就好了。 也用 ping 檢查 cbdata.dila.edu.tw,無回應。請參考以下測試:
阿彌陀佛