中国领先的IT技术网站
|
|

如何在Azure上部署和监控ASP.Net内核?

在本文中,我们看看如何将你的ASP.Net内核应用程序部署到Azure中以及如何监控其性能与生命周期。

作者:陈峻译来源:51CTO|2017-04-27 11:01

沙龙活动 | 去哪儿、陌陌、ThoughtWorks在自动化运维中的实践!10.28不见不散!


【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】

【责任编辑:刘晓旭 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Visual Studio 2005+SQL Server 2005数据库应用系

本书主要介绍采用Visual Studio 2005的C#语言为前台,SQL Server 2005数据库为后台的数据库系统开发技术。 全书分为15章,内容包括走进.NE...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Python最火的编程语言