前言
Google App Engine (GAE) 提供了非常方便的環境讓開發者可以輕鬆地部署服務,
除此之外還有許多有用的功能族繁不及備載...
但若如果部署在 GAE 上的服務發生異常時, 我們該如何去追蹤問題呢?
以下簡單介紹一下幾個 GCP 上好用的服務幫助我們可以快速的縮小問題的範圍
- Cloud Trace
- Cloud Logging
Cloud Trace
這個服務可以讓我們快速的找到效能上的瓶頸是來源自哪隻 API
可以看出問題可能出在 /v1/interest/ads_pref 這隻API 上,
並且發生時間可能在 17:40 分左右
Cloud Logging
知道效能的瓶頸是源自於某隻 API 之後, 接下來可以用 Log Viewer
來看程式是否有拋出任何異常的訊息
在 Query Builder 下查詢語法來找出可能的線索
resource.type="gae_app"
resource.labels.module_id="My-Service"
textPayload:"exec bulk"
timestamp >= "2020-05-15T17:40:00+08:00" AND
timestamp <= "2020-05-15T17:43:00+08:00"
這個語法會找出 My-Service 這隻服務在 2020-05-15 這天17:40~17:43 產生含有 exec bulk 這段訊息的 log
以下是其他查詢可以用的運算子
= # equal
!= # not equal
> < >= <= # numeric ordering
: # "has" matches any substring in the log entry field
=~ # regular expression search for a pattern
!~ # regular expression search not for a pattern
除了以上的搜尋條件之外, 還有其他的 Search Entry 可以使用
{
"logName": string,
"resource": {
object (MonitoredResource)
},
"timestamp": string,
"receiveTimestamp": string,
"severity": enum (LogSeverity),
"insertId": string,
"httpRequest": {
object (HttpRequest)
},
"labels": {
string: string,
...
},
"metadata": {
object (MonitoredResourceMetadata)
},
"operation": {
object (LogEntryOperation)
},
"trace": string,
"spanId": string,
"traceSampled": boolean,
"sourceLocation": {
object (LogEntrySourceLocation)
},
// Union field payload can be only one of the following:
"protoPayload": {
"@type": string,
field1: ...,
...
},
"textPayload": string,
"jsonPayload": {
object
}
// End of list of possible types for union field payload.
}
最後如果還找不出問題的話, 可以試一下大絕招 Debugging In The Instance
直接 ssh 進去機器裡看問題在哪
或是使用 gcloud 指令來做也可以
gcloud app instances ssh "aef-20200505t185417-sgtl" --service "My-Service" --version "20200505t185417" --project "andy-prj"
留言
張貼留言