如何在Azure上部署和監控ASP.Net內核?
譯文【51CTO.com快譯】ASP.Net內核(Core)是ASP.NET的***版本。它是通過利用.Net內核,這個輕量級的、可組合的.NET框架為基礎來建立的。有些人喜歡用,但有些人并不喜歡。不過,這畢竟是未來的趨勢。微軟將來會向著.Net內核邁進,而那些常規的、成熟版本也必將消亡。
我是非常喜歡ASP.Net內核的。它有著大量的新特性、更為精簡、而且運行起來非常快。當然,它需要被運行在Azure上面。
在這篇文章中,我將向你展示如何為Azure部署一個簡單的ASP.Net內核應用程序。我還將向你展示如何用Stackify Retrace,這一應用性能管理工具的來向該一個應用程序發出各種指令。
在本文章中,我將用到一個名為SimplCommerce的示例程序。這是一個基于ASP.Net內核的、開源的、電子商務類型的應用。你可以在GitHub上獲取到。該應用程序基本上是由一個web應用程序和一個數據庫所組成。
我將指導你完成如下的步驟:
在SQL Azure上創建SimplCommerce數據庫
配置該應用程序來使用Stackify Retrace
將該應用程序部署到Azure
為web應用激活Stackify Retrace
Stackify Retrace在運行中的優點
在SQL Azure上創建SimplCommerce數據庫
SimplCommerce應用程序使用一個SQL數據庫來存儲其產品目錄和其他數據。在開始使用該應用之前,你首先需要設置一個數據庫。你可以選擇將其放置在本地,也可以放到其他別的地方。
因為我的計劃是將整個應用程序部署到Azure上面,所以當我在Azure里工作時,我就使用的是一個在它內部運行的數據庫。這樣的好處在于:它會給我足夠的信心在Azure SQL里做各種運行的嘗試時候,而不會碰到與本地SQL服務器上所產生的任何奇怪的差異問題。
我們需要執行以下步驟來設置一個Azure SQL數據庫并連接它:
1.創建一個Azure SQL數據庫
2.修改應用程序中的連接字串(connectionstring)
3.開啟防火墻,以允許我的本地機器連接到Azure SQL Server
步驟1:創建一個Azure SQL數據庫
***步是創建一個Azure SQL數據庫,以承載SimplCommerce的數據。我運用Azure的門戶界面(Portal)來創建一個新的數據庫。它會以一個向導的形式帶著我在Azure SQL Server上進行創建,并合理進行配置。
正如你在上圖中所看到的,我選擇的只是“基本定價層(pricing tier)”。因為這將只是一個測試應用而已,并不需要大量的“馬力(資源)”。
Azure SQL server和數據庫就這樣創建好了,我們現在需要連接到它。我想把我的本地機器連接到SQL Azure數據庫,并使用它來進行當地開發。盡管這種數據庫與我的代碼分處異處的方式貌似低效,但實際上這已經足夠能快速運行了。
步驟2:修改應用中的連接字串
為了將SimplCommerce應用程序連接到數據庫,我需要修改其連接字串。在ASP.Net內核里,這些設置位于appsettings.json和一些底層文件之中。這些.json文件包含了各種配置,就像以前的那個web.config文件一樣。
令人感到奇妙的是:它們是根據你設置的環境變量來工作的。例如,你可以創建一個appsettings.development.json文件來用于環境變量的變化。就像這樣:
我在此處所說的環境變量是指ASPNETCORE_ENVIRONMENT變量。默認情況下,當你在Visual Studio中調試時,ASP.Net內核用到該變量,且值為“development”。而當你部署自己的應用時,該變量的默認值則為“production”。你可以在任何所用到的托管環境中覆蓋該變量,甚至是在Visual Studio的項目文件(projectfile)的設置中。
總之,為了把我的本地機器連接到數據庫,我將數據庫的連接字串放到了appsettings.development.json文件中。
步驟3:開啟防火墻,以允許我的本地機器連接到Azure SQL Server
但這還不夠,Azure SQL Server在默認情況下開啟了防火墻,阻斷了除Azure中的地址以外的所有IP地址去訪問服務器。因此,我需要將自己的IP地址添加到防火墻中,以連到服務器上。你可以在Azure的門戶界面里設置Azure SQL Server。
一切設置好以后,你會發現數據庫還是空的,沒有任何的數據表。在GitHub的SimplCommerce頁面上,你會找到用來執行將各種表和數據填充到數據庫的具體步驟。這些對數據庫的填充主要涉及到運行一個實體框架的遷移和SQL腳本的操作。
配置應用程序來使用Stackify Retrace
在將應用程序部署到Azure之前,我需要將其準備好并把數據發送到Stackify Retrace,以方便我們去監控該應用是如何運行的。這是一個非常強大的監控工具,它能幫助我監控到:
應用程序和相關組件的性能
應用程序中的內部錯誤
應用程序的可用性
上述的***點是非常重要的,因為我想看到該應用的全方位性能。這還意味著我也想看到我的各個相關組件,例如Azure SQL數據庫,的執行狀況和需要改進的地方。同時我也需要包括對應用程序出現錯誤時的提醒和深入挖掘重要因素的能力。如果沒有它,我至少要等到用戶反饋的時候才會知道錯誤的發生,這會造成非常不好的用戶體驗。Retrace能幫助我深挖錯誤、追溯原因并予以修復。而所有的這些都只需要簡單的設置便可實現。
首先,我添加名為StackifyMiddleware的塊包,你可以在如下圖所示的Visual Studio中進行操作或是在包管理器的控制臺窗口中輸入以下命令:
Install-Package StackifyMiddleware
然后,你可以在應用程序的類中激活所需的Stackify中間件。而在配置方法上,你需要輸入一行:app.UseMiddleware<StackifyMiddleware.RequestTracerMiddleware>(); 注意,在插入這一行語句之前,你要先定義好app.UseMvc的聲明。
好,現在一切都準備就緒了,我們可以開始向Azure部署該應用了。
將ASP.NET內核部署到Azure
我想讓該應用程序運行在Azure中。為了做到這一點,我將創建一個Azure的Web應用,并將我的應用程序部署到里面。就像其他類型的應用程序一樣,ASP.NET內核的應用程序是運行在Azure的Web應用之中的。請記住老版本的ASP.NET內核的應用程序(也就是基于project.json格式的)將在2017年5月底之后不再被Azure所支持。
我將使用Visual Studio來把該應用程序部署到Azure。這其實很簡單,你只需右鍵單擊ASP.NET應用的項目文件并選擇發布(publish)。如下所示的向導就會指導你去實現。如果你沒有現成的話,它甚至會為你創建一個全新的Web應用。
在這些完成之后,我就有了一個Web應用,該應用程序就運行于其中。不過,它是仍不可運行的。
為該Web應用激活Stackify追溯
首先,我需要安裝一個擴展,以便Stackify Retrace能夠捕捉到Web應用的數據。我可以從Azure的門戶來實現。在那里,你可以在Web應用的選項中選擇擴展菜單(extensions menu)并選擇Stackify APM + extension,然后安裝它。這將激活Stackify來捕捉運行Web應用所需資源的各項指標,如CPU、內存等。
記住,請確保在安裝了這個擴展之后重新啟動該Web應用。
配置Web應用
接下來,我需要做的就是配置該Web應用。
記得嗎?我已經把數據庫的連接字串放入了appsettings.development.json文件中。就是因為在默認情況下,該應用在部署的時候并會不使用development.json文件,因此它不能連接到數據庫。可見,我需要給該Web應用的應用設置(ApplicationSettings)中的連接字串賦值,這將覆蓋數據庫的連接配置設置,以允許該應用程序連接到數據庫。
另外,我需要插入Stackify.ApiKey及其值到該應用的設置中。這將告訴Stackify該Web應用屬于我的帳戶的,要并讓我能夠看到該應用的數據。你可以在你的Stackify的賬號面板上找到這個鍵值。當然,如果你還沒有帳戶的話,你就需要注冊一個14天的適用版了。
我還建議你設置Stackify.AppName和Stackify.Environment的屬性。這些都會出現在Stackify的門戶界面上,并能夠幫助你去識別你的應用。你可以通過閱讀如下鏈接 ,以了解Azure應用服務中設置Stackify Retrace的全部指令。http://support.stackify.com/hc/en-us/articles/206350463-APM-for-Azure-Web-Apps?
Stackify Retrace在運行中的優點
通過Stackify Retrace的后臺運行,我可以看到一些有關該應用程序的有趣信息。Stackify是一個SaaS產品,所以你可以在登錄到https://stackify.com之后看到你的數據。在這里,我可以訪問到各種各樣的儀表盤和指標,從而定制出我心儀的內容。
我最喜歡的一個是性能儀表盤。在這里,我可以很容易地看到我的應用的運行狀態和各種表現。Retrace可以告訴我有哪些相關的組件,而且可以對它們進行查看。在這種情況下,如下圖示,我調入了一個最耗時間的Azure SQL數據庫。我能夠很快看到在當前時間段有多少個失敗請求。
顯示在它后面的錯誤概述也很有幫助。它告知我了該應用程序里的一個錯誤,你可以讓它運行一段時間以得到其概述。它會顯示正在發生的錯誤數量,并以簡短的堆積跟蹤線來顯示。
你可以深入了解這些堆積跟蹤線,來查看到包括HTTP請求和HTTP頭部在內的有關錯誤的各種信息。
這個功能對于讓你能快速地得到錯誤的根源并解決之是非常強大的。
【原標題】Deploying (and Monitoring) ASP.NET Core on Azure (作者: Barry Luijbregts )
原文鏈接:https://dzone.com/articles/deploying-and-monitoring-aspnet-core-on-azure
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】