Laravel Telescope:優(yōu)雅的應(yīng)用調(diào)試工具

文章轉(zhuǎn)自:https://laravel-china.org/topics/19013
視頻教程:047. 優(yōu)雅的應(yīng)用調(diào)試工具--laravel/telescope (5.7 新擴(kuò)展)

Laravel Telescope 是由 Mohamed Said 和 Taylor Otwell 開(kāi)源 的 Laravel 應(yīng)用的調(diào)試工具。

你可以使用 Composer 安裝到你的應(yīng)用中。

安裝完 Telescope 后,你可以訪問(wèn) /telescope 來(lái)訪問(wèn)該應(yīng)用。

Telescope 能做什么事?

如果你之前用過(guò) Clockwork 或者 Laravel Debugbar ,那么這兩款應(yīng)用與 Telescope 進(jìn)行對(duì)比的話就是純 UI 界面和重量級(jí)武器。

Telescope 由一系列監(jiān)聽(tīng)器組成,這些 “監(jiān)聽(tīng)器” 監(jiān)聽(tīng)每個(gè)進(jìn)入應(yīng)用的請(qǐng)求,不管是來(lái)自 HTTP 、命令行、任務(wù)調(diào)度還是隊(duì)列的。

這些監(jiān)聽(tīng)器捕獲這些請(qǐng)求以及其相關(guān)數(shù)據(jù)信息 -- 例如數(shù)據(jù)庫(kù)查詢(xún)以及其執(zhí)行時(shí)間,是否命中緩存,事件觸發(fā)郵件觸發(fā)等等。

在它操作界面上有用于檢查以下各項(xiàng)的選項(xiàng)欄,每個(gè)選項(xiàng)欄都代表它的監(jiān)聽(tīng)器:

  • Requests
  • Commands
  • Schedule
  • Jobs
  • Exceptions
  • Logs
  • Dumps
  • Queries
  • Models
  • Events
  • Mail
  • Notifications
  • Cache
  • Redis

觀察者標(biāo)簽

讓我們逐步瀏覽每個(gè)選項(xiàng)查看觀察到的內(nèi)容。每個(gè)選項(xiàng)都顯示一個(gè)列表頁(yè)面,然后您可以點(diǎn)擊查看指定項(xiàng)目的詳細(xì)信息。

(HTTP) 請(qǐng)求

<figure style="margin: 1em 0px;">
image

</figure>

該選項(xiàng)允許您查看進(jìn)入應(yīng)用程序的所有 HTTP 請(qǐng)求。您將能查看所有 HTTP 請(qǐng)求以及每個(gè)請(qǐng)求的詳細(xì)信息。

<figure style="margin: 1em 0px;">
image

</figure>

<figure style="margin: 1em 0px;">
image

</figure>

<figure style="margin: 1em 0px;">
image

</figure>

每個(gè)請(qǐng)求頁(yè)面還會(huì)顯示來(lái)自其他觀察者關(guān)于此請(qǐng)求相關(guān)的數(shù)據(jù);例如,所有數(shù)據(jù)庫(kù)查詢(xún)以及它們花費(fèi)時(shí)長(zhǎng);該請(qǐng)求已通過(guò)身份驗(yàn)證用戶(hù);等等。

<figure style="margin: 1em 0px;">
image

</figure>

命令行

<figure style="margin: 1em 0px;">
image

</figure>

命令選項(xiàng)列出已運(yùn)行的所有命令及其退出代碼。您還可以點(diǎn)擊查看所有參數(shù),選項(xiàng)和相關(guān)內(nèi)容。

<figure style="margin: 1em 0px;">
image

</figure>

計(jì)劃任務(wù)

列出已運(yùn)行的計(jì)劃任務(wù)。在每個(gè)任務(wù)的詳細(xì)信息頁(yè)面上,查看他們的所有計(jì)劃信息,例如他們的 cron 計(jì)劃(例如 * * * * *)。

<figure style="margin: 1em 0px;">
image

</figure>

任務(wù)

<figure style="margin: 1em 0px;">
image

</figure>

任務(wù)部分會(huì)列出所有運(yùn)行過(guò),和正在運(yùn)行的任務(wù)。他和Horizon很類(lèi)似,不過(guò)Horizon只支持Redis驅(qū)動(dòng),而且它不僅僅是UI,它還能和隊(duì)列溝通,看你隊(duì)列運(yùn)行的情況。Telescope,簡(jiǎn)簡(jiǎn)單單只是一個(gè)UI,一個(gè)可以和任何隊(duì)列驅(qū)動(dòng)玩在一起的UI。

<figure style="margin: 1em 0px;">
image

</figure>

在任務(wù)列表頁(yè)上,你會(huì)看到任務(wù)名,和它在哪個(gè)隊(duì)列和連接上運(yùn)行,她的工作情況,和其所發(fā)生的經(jīng)歷。

在任務(wù)細(xì)節(jié)頁(yè)面上,你會(huì)看到以上列舉的數(shù)據(jù),以及:主機(jī)名, 他的FQCN,網(wǎng)絡(luò)連接,隊(duì)列,嘗試次數(shù),超時(shí),還有標(biāo)簽。

<figure style="margin: 1em 0px;">
image

</figure>

任務(wù)會(huì)自動(dòng)給用過(guò)的Eloquent模型貼標(biāo)簽 (栗子: App\Video:1) ,如果用過(guò)用戶(hù)模型,就會(huì)給用戶(hù)模型貼標(biāo)簽,以此類(lèi)推。

標(biāo)簽
諸如請(qǐng)求,命令等項(xiàng)目,會(huì)自動(dòng)被Telescope貼標(biāo)簽 (舉栗子: 如果一個(gè)用戶(hù)發(fā)出了請(qǐng)求,他就自動(dòng)會(huì)被貼上 Auth:1 if User 1 ; 如果你點(diǎn)擊那個(gè)標(biāo)簽, Telescope就只會(huì)顯示被貼上該標(biāo)簽的項(xiàng)目)

如HTTP請(qǐng)求一般,你可以看到所有與此任務(wù)相關(guān)的信息,比如數(shù)據(jù)庫(kù)查詢(xún)記錄,其觸發(fā)的其他任務(wù),和任何生成的日志。

不過(guò),你如若出發(fā)了封閉函數(shù),那么你所見(jiàn)之信息不是 App\Jobs\RenderVideo , 取而代之的是 Closure (web.php:43) .

新封閉函數(shù)隊(duì)列
Taylor寫(xiě)了一個(gè)新的庫(kù),加回了隊(duì)列封閉函數(shù) (Laravel很多年前用過(guò))。 這個(gè)庫(kù)的功能是,當(dāng)你將一個(gè)模型放入封閉函數(shù)中,它只會(huì)存這個(gè)模型的ID,而不是整個(gè)對(duì)象。(原作者說(shuō)的: 豈不妙哉?(反正隊(duì)列的類(lèi)已經(jīng)如此作為了),他很興奮)。
dispatch(function () use ($video) { // do stuff in a queued job // 做一些隊(duì)列的事情 });
這樣做以后,封閉函數(shù)會(huì)被序列化,并且有一個(gè)哈希(Hash)值如影隨形。這樣可以防止你的代碼在進(jìn)入隊(duì)列事件后,代碼被篡改,很是不好?,F(xiàn)在有了哈希,函數(shù)會(huì)先被檢查一遍,媽媽就不怕我的代碼被篡改了。
該封閉函數(shù)會(huì)被序列化為一個(gè)長(zhǎng)字符串,加上他的哈希(與簽名URL如出一轍)

Exceptions

<figure style="margin: 1em 0px;">
image

</figure>

該功能將記錄所有異常,并可查看具體異常情況。界面使用選項(xiàng)卡的形式呈現(xiàn),包括主機(jī)信息,類(lèi)型,請(qǐng)求,標(biāo)簽,用戶(hù)身份驗(yàn)證等。

<figure style="margin: 1em 0px;">
image

</figure>

除此之外也可看到異常在代碼中的位置,使其高亮并展示上下代碼段,且包含完整的堆棧追蹤。

<figure style="margin: 1em 0px;">
image

</figure>

<figure style="margin: 1em 0px;">
image

</figure>

你還可以從拋出異常請(qǐng)求中獲取指向異常詳情頁(yè)面的鏈接。

注意:在眾多選項(xiàng)卡中,如果您在單個(gè)頁(yè)面上(例如,給定的異常頁(yè)面),你也可獲得指向生成該頁(yè)面的請(qǐng)求鏈接。

如果產(chǎn)生多次相同的異常,它們將在列表頁(yè)面上進(jìn)行分組,但仍然可以深入查看異常顯示頁(yè)面中的各個(gè)異常。

Logs

日志項(xiàng)展示了日志的基本信息,級(jí)別和每條日志項(xiàng)的記錄時(shí)間。

<figure style="margin: 1em 0px;">
image

</figure>

當(dāng)你訪問(wèn)日志的單個(gè)詳細(xì)頁(yè)面時(shí),你可以看到更多消息,包含所有你傳遞給日志的上下文數(shù)據(jù)(作為數(shù)組)。

"比挖掘原始文本文件棒一點(diǎn)。".

當(dāng)你用數(shù)組為你的日志項(xiàng)傳遞上下文時(shí),你可以查看所有數(shù)據(jù),查看觸發(fā)它的請(qǐng)求,觸發(fā)的用戶(hù)?!北韧诰蛟嘉谋疚募粢稽c(diǎn)。

<figure style="margin: 1em 0px;">
image

</figure>

Dump screen

<figure style="margin: 1em 0px;">
image

</figure>

"這是我最?lèi)?ài)的功能之一"

如果你代碼中使用 dump() 函數(shù),而且你在 Telescope 中打開(kāi)了 dump screen。你可以在 Telescope 中看到 dumps 并非來(lái)自你實(shí)際應(yīng)用。這為你提供了數(shù)據(jù)的 dd() 樣式輸出,而不會(huì)弄亂您的正常頁(yè)面加載。每個(gè) dump 還鏈接到生成它的請(qǐng)求。

如果你離開(kāi) dump screen,你所有的 dumps 會(huì)突然再次顯示到你的瀏覽器上。

Queries

<figure style="margin: 1em 0px;">
image

</figure>

列出了所有數(shù)據(jù)查詢(xún)相關(guān)信息,就像 debug bar 一樣。如 消耗時(shí)常、完整查詢(xún)、請(qǐng)求觸發(fā) 等。

漂亮的格式化顯示。

<figure style="margin: 1em 0px;">
image

</figure>

可以在服務(wù)中配置慢查詢(xún)的邊界,一旦查詢(xún)查過(guò)其配置時(shí)間將會(huì)被標(biāo)記,并配以紅色警告顯示。

注意:每個(gè)列表頁(yè)都有快捷方式和快速搜索。搜索標(biāo)簽和其他內(nèi)容。

Models

<figure style="margin: 1em 0px;">
image

</figure>

可以看到 查詢(xún)、更新、刪除事件;以及這些事件產(chǎn)生的變化 等。

<figure style="margin: 1em 0px;">
image

</figure>

事件

<figure style="margin: 1em 0px;">
image

</figure>

顯示所有事件的列表??梢钥吹侥男┦录峭ㄟ^(guò)標(biāo)記廣播的;查看所有偵聽(tīng)器的列表,并深入了解調(diào)用的對(duì)象。

<figure style="margin: 1em 0px;">
image

</figure>

郵件

<figure style="margin: 1em 0px;">
image

</figure>

顯示發(fā)送的所有電子郵件的列表;收件人是誰(shuí);什么時(shí)候發(fā)的;是否還在隊(duì)列,然后什么時(shí)候出隊(duì)的??梢钥吹诫娮余]件主題,當(dāng)你深入研究它時(shí),你也會(huì)看到諸如 MailTrap 的郵件預(yù)覽。

<figure style="margin: 1em 0px;">
image

</figure>

甚至可以下載原始的 .eml 文件并在選定的客戶(hù)端中打開(kāi)。

Notifications

<figure style="margin: 1em 0px;">
image

</figure>

顯示所有通知,及其類(lèi)型,等等。

無(wú)法預(yù)覽,因?yàn)橛行┩ㄖ遣豢深A(yù)覽的,假如是郵件通知,你就會(huì)看到它在列表中。

如果通知已進(jìn)入隊(duì)列,還可以在 Jobs 的請(qǐng)求部分看到。有很多方式可以得到這些數(shù)據(jù)。

Cache

顯示緩存命中、未命中和更新等。

顯示鍵,值,何時(shí)過(guò)期??梢钥吹接|發(fā)它的請(qǐng)求,也可以在請(qǐng)求頁(yè)面上看到該請(qǐng)求的所有緩存命中/未命中。

<figure style="margin: 1em 0px;">
image

</figure>

Redis

跟上面的緩存類(lèi)似。

諸如花了多久時(shí)間,什么時(shí)候發(fā)生,什么時(shí)候發(fā)起請(qǐng)求等等。

Authenticated user

在任一選項(xiàng)卡的條目上獲取已驗(yàn)證用戶(hù)的相關(guān)信息。

<figure style="margin: 1em 0px;">
image

</figure>

Authorization

可在生產(chǎn)環(huán)境的 telescope 服務(wù)中,配置可訪問(wèn)的郵件賬戶(hù)列表

在Gate 的 viewTelescope 中定義哪些用戶(hù)可以訪問(wèn)

<figure style="margin: 1em 0px;">
image

</figure>

篩選

你可能不想在生產(chǎn)環(huán)境中把所有東西都存著,所以你可以在 Telescope 服務(wù)提供者中, 運(yùn)行 Telescope::filter(function ($entry))

默認(rèn)篩選器:

function ($entry) {
    if (local) { return true; }

    return $entry->isReportableException ||
        $entry->isfailedJob() ||
        $entry->isScheduledTask() ||
        $entry->hasMonitoredTag();
}

但是你可以自由地修改它。

監(jiān)控標(biāo)簽:

點(diǎn)進(jìn)雷達(dá)按鈕,聲明一個(gè)監(jiān)控標(biāo)簽。你可以在 UI 界面聲明一個(gè) Auth:1 監(jiān)視器。

生產(chǎn)環(huán)境中不會(huì)記錄請(qǐng)求,但是如果你有一個(gè)像 Auth:1 這樣的監(jiān)視器,你就會(huì)看到所有的請(qǐng)求都被記錄下來(lái),除非你取消監(jiān)視。

NOTE: 如果你使用的是 Redis 隊(duì)列的話, Horizon 和 Telescope 能完美搭配。

修剪

在 Telescope 中任務(wù)調(diào)度會(huì)修剪掉過(guò)期的條目。你可以每晚都刪除超過(guò)__ 小時(shí)的東西。

這個(gè)也是在 config/telescope 中設(shè)置。

可以隨時(shí)啟用或棄用任意觀察者。 E.g. Watchers\CacheWatcher::class 就可以棄用。

還有一個(gè) TELESCOPE_LIMIT 默認(rèn)定義是 100 ;該選項(xiàng)的意義就是一次性進(jìn)行 100 個(gè)查詢(xún),100 次 Redis 查詢(xún)等。它們都可以在env中進(jìn)行配置。

雜項(xiàng)

Telescope 可以在本地和生產(chǎn)環(huán)境中運(yùn)行,并有內(nèi)建授權(quán)和工具用來(lái)保護(hù)私有數(shù)據(jù)。它可從多角度訪問(wèn)同類(lèi)數(shù)據(jù),具備一系列配置項(xiàng),提供了健壯的標(biāo)記和過(guò)濾功能。

考慮把它放在一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)中。

Taylor 稍后就在 Twitter 上提到你可以添加過(guò)濾器從而確保私有數(shù)據(jù)不會(huì)被記錄下來(lái)。

你可以使用 Telescope::night() 來(lái)開(kāi)啟夜晚模式(可能在某個(gè)服務(wù)提供者那里?)

<figure style="margin: 1em 0px;">
image

</figure>

Q&A:

  • 數(shù)據(jù)存放在何處?隱藏在一個(gè) StorageRepository 接口實(shí)現(xiàn)之后; 類(lèi)似數(shù)據(jù)庫(kù)一樣運(yùn)作在 Redis 上。你可以隨心所欲的實(shí)現(xiàn)它。這個(gè)接口中只有6-7 個(gè)方法。
  • 它能存多少數(shù)據(jù)?不是太多,因?yàn)樯a(chǎn)環(huán)境幾乎會(huì)拋棄所有的東西,修剪下來(lái),你一次只能保存 100 個(gè)。
  • 我們能從 Slack 收到通知嗎?我們正在努力。
  • 我能退出 Bugsnag/etc.嗎? 可能不能。雖然它簡(jiǎn)易且輕便,但并不意味著穩(wěn)定健壯。小心火燭。
  • 我們能否按照時(shí)間戳進(jìn)行過(guò)濾?暫時(shí)還不能,但是這個(gè)是開(kāi)源項(xiàng)目,幫幫我們

<figure style="margin: 1em 0px;">
image

</figure>

  • 在系統(tǒng)引導(dǎo)階段會(huì)產(chǎn)生什么影響?每次只會(huì)執(zhí)行一個(gè)查詢(xún)。生產(chǎn)環(huán)境中不會(huì)頻繁地把所有東西都插入進(jìn)去。你可以取消你不關(guān)心的監(jiān)聽(tīng)器。
  • 我們能在同一個(gè)UI中檢查多個(gè)應(yīng)用嗎?可以;只需要在同一個(gè)數(shù)據(jù)庫(kù)中指向并記錄它們,然后考慮做標(biāo)記/過(guò)濾, 這樣你就可以按需做區(qū)分了。
  • Laravel 的哪個(gè)版本能與之兼容? 5.7.7+。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容