利用Skywalking-netcore监控你的应用性能

Skywalking

SkyWalking开源项目由吴晟于2015年创建,同年10月在GitHub上作为个人项目开源。

SkyWalking项目的核心目标,是针对微服务、Cloud Native、容器化架构,提供应用性能监控(APM)和分布式调用链追踪能力。

2017年11月,SkyWalking社区正式决定,寻求加入Apache基金会,希望能使项目成为更为开放、全球化和强大的APM开源产品,并加强来自社区的合作和交流。最终实现构建一款功能强大、简单易用的开源APM产品。

2017年12月8日,Apache软件基金会孵化器项目管理委员会 ASF IPMC宣布“SkyWalking全票通过,进入Apache孵化器”。

什么是APM

APM = Application Performance Management,即应用性能管理,主要是针对企业级应用软件市场,对企业系统实施即时监控,以实现对应用程序性能管理和故障管理的系统化的解决方案。

APM的覆盖范围包括五个层次的实现:终端用户体验,应用架构映射,应用事务的分析,深度应用诊断,和数据分析。

过去,企业的IT部门在收集系统性能参数时,一般重点关注为最终用户提供服务的硬件组件的利用率,如CPU利用率、内存占用、网络吞吐量。虽然这种方法也提供了一些宝贵的信息,但却忽视了最重要的因素:最终用户的响应时间。

现在,通过事务处理过程监测、模拟等手段,可以真实测量用户响应时间,此外还可以报告谁正在使用某一应用、该应用的使用频率以及用户所进行的事务处理过程是否成功完成、发生错误时的参数与堆栈调用信息、数据库查询语句跟踪等。

 

.Net Core

自微软发布 .net core 2.0以来,.net开发者迎来了幸福的春天,我们的程序将不再局限于Windows平台。2.x版的.net core已趋于稳定,各厂的配套也在逐步跟上,使得整个生态在逐渐的丰富起来。

SkyWalking-netcore是.net core平台下的代理程序,在NCC社区的Lemon大神带领下进行开发,并于2018年4月17日正式加入OpenSkywalking,于2018年4月19日发布v0.1.0版本。

实验目标

布署一个基于SkyWalking的.net core应用监控系统,监控Web应用的性能。

所需第三方软件

  • XShell

  • WinSCP

  • Visual Studio 2017

  • .net Core 2.0.3 SDK

  • JDK8+

  • Elasticsearch 5.x

网络结构

本次实验采用三台服务器 ,Elasticsearch 与 Collector 放在一台服务器上,收集另外两台Web服务器提供的数据,实验应用架构如下图。

640?wx_fmt=png

实验架构

实验过程

安装系统

Server-01、Web01、Web02安装 CentOS系统,安装过程详见《IT基础设施:CentOS7安装指南》

IP配置表

服务器IP备注
Server-01192.168.10.191提供ES服务、Collector与WebUI
Web01192.168.10.192运行App1
Web02192.168.10.193运行 App2
MSSQL暂无因.net Core的代理程序暂未提供支持,故本文不演示此部分,待新版本发布后更新
WebService暂无因.net Core的代理程序暂未提供支持,故本文不演示此部分,待新版本发布后更新

安装 .net core 2.0 SDK

在Web01、Web02上安装.net core 2.0 SDK,详见《在CentOS7下安装.Net Core 2.0.3 SDK》

安装JDK8

因为oracle现在要同意协议才能下载,直接使用wget加链接下载不到,所以要加上前面的那些代码:

wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm

也可以先用迅雷下到主机,再通过局域网下载到虚拟机

使用rpm -ivh jdk-8u45-linux-x64.rpm进行安装

命令执行完毕即安装完成,使用java -version 检查是否安装成功

部署Elasticsearch

1、到官网下载5.x版,目前为5.6.9

640?wx_fmt=png

下载5.x

 

2、使用WinSCP上传到Server-01,解压到/home/elasticsearch5.6.9下。
3、修改/home/elasticsearch5.6.9/config/elasticsearch.yml

  • 设置 cluster.name: CollectorDBCluster。此名称需要和collector配置文件一致。

  • 设置 node.name: masterNode, 节点名称可以设置为任意名字,如为集群模式,则每个节点名称需要不同。
    增加如下配置

cluster.name: CollectorDBClusternetwork.host: 0.0.0.0thread_pool.bulk.queue_size: 1000

最终配置如下:

# Licensed to the Apache Software Foundation (ASF) under one

# or more contributor license agreements.  See the NOTICE file

# distributed with this work for additional information

# regarding copyright ownership.  The ASF licenses this file

# to you under the Apache License, Version 2.0 (the

# "License"); you may not use this file except in compliance

# with the License.  You may obtain a copy of the License at

#

#     http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

 

#!/usr/bin/env sh

 

PRG="$0"

PRGDIR=`dirname "$PRG"`

[ -z "$WEBAPP_HOME" ] && WEBAPP_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

 

WEBAPP_LOG_DIR="${WEBAPP_HOME}/logs"

JAVA_OPTS=" -Xms256M -Xmx512M"

JAR_PATH="${WEBAPP_HOME}/webapp"

 

if [ ! -d "${WEBAPP_HOME}/logs" ]; then

    mkdir -p "${WEBAPP_LOG_DIR}"

fi

 

_RUNJAVA=${JAVA_HOME}/bin/java

[ -z "$JAVA_HOME" ] && _RUNJAVA=java

 

eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -jar ${JAR_PATH}/skywalking-webapp.jar \

         --server.port=8080 --collector.ribbon.listOfServers=192.168.10.191:10800 \

        2>${WEBAPP_LOG_DIR}/webapp.log 1> /dev/null &"

 

if [ $? -eq 0 ]; then

    sleep 1

    echo "Skywalking Web Application started successfully!"

else

    echo "Skywalking Web Application started failure!"

    exit 1

fi

运行/home/elasticsearch5.6.9/bin/elasticsearch.sh启动Elasticsearch

部署collector

下载release的版本https://github.com/OpenSkywalking/skywalking-netcore/releases

 

下载

将压缩包解压到Server-01/home/collector/目录

  • 修改/home/collector/bin/webappService.sh中的127.0.0.1Server-01的IP地址,目前为192.168.10.191

最终脚本如下:

  1.  
    # Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements.  See the NOTICE file# distributed with this work for additional information# regarding copyright ownership.  The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License.  You may obtain a copy of the License at##     http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#!/usr/bin/env shPRG="$0"PRGDIR=`dirname "$PRG"`
  2.  
    [ -z "$WEBAPP_HOME" ] && WEBAPP_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
  3.  
     
  4.  
    WEBAPP_LOG_DIR="${WEBAPP_HOME}/logs"JAVA_OPTS=" -Xms256M -Xmx512M"JAR_PATH="${WEBAPP_HOME}/webapp"if [ ! -d "${WEBAPP_HOME}/logs" ]; then
  5.  
       mkdir -p "${WEBAPP_LOG_DIR}"fi_RUNJAVA=${JAVA_HOME}/bin/java
  6.  
    [ -z "$JAVA_HOME" ] && _RUNJAVA=javaeval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -jar ${JAR_PATH}/skywalking-webapp.jar \
  7.  
            --server.port=8080 --collector.ribbon.listOfServers=192.168.10.191:10800 \
  8.  
           2>${WEBAPP_LOG_DIR}/webapp.log 1> /dev/null &"if [ $? -eq 0 ]; then
  9.  
       sleep 1    echo "Skywalking Web Application started successfully!"else
  10.  
       echo "Skywalking Web Application started failure!"
  11.  
       exit 1fi
  • 修改/home/collector/config/application.yml中的所有localhostServer-01的IP地址,目前为192.168.10.191

最终配置文件如下:

  1.  
    # Licensed to the Apache Software Foundation (ASF) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The ASF licenses this file
    # to you under the Apache License, Version 2.0 (the# "License");
    you may not use this file except in compliance# with the License.  
    You may obtain a copy of the License at
    ##     http://www.apache.org/licenses/LICENSE-2.0
    ## Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.#cluster:
    #  zookeeper:
    #    hostPort: localhost:2181
    #    sessionTimeout: 100000naming:
  2.  
     jetty:
  3.  
       host: 192.168.10.191
  4.  
       port: 10800
  5.  
       contextPath: /
  6.  
    cache:#  guava:
  7.  
     caffeine:
  8.  
    remote:
  9.  
     gRPC:
  10.  
       host: 192.168.10.191
  11.  
       port: 11800agent_gRPC:
  12.  
     gRPC:
  13.  
       host: 192.168.10.191
  14.  
       port: 11800
  15.  
       #Set these two setting to open ssl
  16.  
       #sslCertChainFile: $path
  17.  
       #sslPrivateKeyFile: $path
  18.  
     
  19.  
       #Set your own token to active auth
  20.  
       #authentication: xxxxxxagent_jetty:
  21.  
     jetty:
  22.  
       host: 192.168.10.191
  23.  
       port: 12800
  24.  
       contextPath: /
  25.  
    analysis_register:  default:
  26.  
    analysis_jvm:  default:
  27.  
    analysis_segment_parser:  default:
  28.  
       bufferFilePath: ../buffer/
  29.  
       bufferOffsetMaxFileSize: 10M
  30.  
       bufferSegmentMaxFileSize: 500M
  31.  
    ui:
  32.  
     jetty:
  33.  
       host: 192.168.10.191
  34.  
       port: 12800
  35.  
       contextPath: /
  36.  
    storage:
  37.  
     elasticsearch:
  38.  
       clusterName: CollectorDBCluster
  39.  
       clusterTransportSniffer: true
  40.  
       clusterNodes: localhost:9300
  41.  
       indexShardsNumber: 2
  42.  
       indexReplicasNumber: 0
  43.  
       highPerformanceMode: true
  44.  
       ttl: 7

    #storage:#  h2:
    #    url: jdbc:h2:~/memorydb
    #    userName: saconfiguration:  default
    :#     namespace: xxxxx
  45.  
       applicationApdexThreshold: 2000
  46.  
       serviceErrorRateThreshold: 10.00
  47.  
       serviceAverageResponseTimeThreshold: 2000
  48.  
       instanceErrorRateThreshold: 10.00
  49.  
       instanceAverageResponseTimeThreshold: 2000
  50.  
       applicationErrorRateThreshold: 10.00
  51.  
       applicationAverageResponseTimeThreshold: 2000

运行/home/collector/bin/startup.sh启动WebUI和Collector。

创建WebApplication

接下来,我们创建一个Web应用,并在其中加入Skywalking for dotnet core的代理程序。

1、打开VS2017,创建一个.Net Core MVC应用,请跟着我操作:VS中点击菜单“文件”——“新建”——“项目”(按Ctrl+Shift+N同等效果),在弹出的对话框中从左到右进行如下操作。

 

640?wx_fmt=png

.Net Core Web应用

640?wx_fmt=png

选择项目类型

2、等项目建好,右键点击“依赖项”——“管理Nuget程序包”,打开Nuget管理器。

640?wx_fmt=png

操作

在“浏览”选项卡,输入“Skywalking.AspNetCore”搜索,并安装

640?wx_fmt=png

找到包

安装前需要接受许可证,点击“我接受”(不接受请关闭本文)

 

640?wx_fmt=png

许可证

3、安装完成后,打开Startup.cs,在ConfigureServices函数中加入

  1.  
               services.AddSkyWalking(option =>
  2.  
               {                //这里填本应用的名称,每个应用不同
  3.  
                   option.ApplicationCode = "OurApplication1";              
                //这里填Collector的地址
  4.  
                   option.DirectServers = "192.168.10.191:11800";
  5.  
     
  6.  
               });

Startup.cs完整代码如下

  1.  
    using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using SkyWalking.AspNetCore;namespace WebApplication2
  2.  
    {    public class Startup
  3.  
       {
  4.  
           public Startup(IConfiguration configuration)
  5.  
           {
  6.  
               Configuration = configuration;
  7.  
           }        public IConfiguration Configuration { get; }      
     // This method gets called by the runtime. Use this method to add services to the container.
  8.  
           public void ConfigureServices(IServiceCollection services)
  9.  
           {
  10.  
               services.AddSkyWalking(option =>
  11.  
               {                //这里填本应用的名称,每个应用不同
  12.  
                   option.ApplicationCode = "OurApplication1";            
        //这里填Collector的地址
  13.  
                   option.DirectServers = "192.168.10.191:11800";
  14.  
     
  15.  
               });
  16.  
     
  17.  
               services.AddMvc();
  18.  
     
  19.  
           }        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  20.  
           public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  21.  
           {            if (env.IsDevelopment())
  22.  
               {
  23.  
                   app.UseDeveloperExceptionPage();
  24.  
                   app.UseBrowserLink();
  25.  
               }            else
  26.  
               {
  27.  
                   app.UseExceptionHandler("/Home/Error");
  28.  
               }
  29.  
     
  30.  
               app.UseStaticFiles();
  31.  
     
  32.  
               app.UseMvc(routes =>
  33.  
               {
  34.  
                   routes.MapRoute(
  35.  
                       name: "default",                  
          template: "{controller=Home}/{action=Index}/{id?}");
  36.  
               });
  37.  
           }
  38.  
       }
  39.  
    }

打开Program.cs文件,允许非本地访问,最终代码如下

  1.  
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Logging;

    namespace WebApplication2
  2.  
    {    public class Program
  3.  
       {
  4.  
           public static void Main(string[] args)
  5.  
           {
  6.  
               BuildWebHost(args).Run();
  7.  
           }        public static IWebHost BuildWebHost(string[] args) =>
  8.  
               WebHost.CreateDefaultBuilder(args)
  9.  
                   .UseUrls("http://*:5000")
  10.  
                   .UseStartup<Startup>()
  11.  
                   .Build();
  12.  
       }
  13.  
    }

4、发布:点击我们的WEB应用,右键——发布,接下来看图操作。

640?wx_fmt=png

发布

640?wx_fmt=png

发布到文件夹

640?wx_fmt=png

选择目标位置

640?wx_fmt=png

发布

640?wx_fmt=png

没有失败,恭喜,大吉大利,今晚吃鸡

我们可以看到,发布完成后的文件,一大堆,我们把这个文件夹改名为App1

640?wx_fmt=png

发布成功

5、接下来,我们在StartUp.cs中把ApplicationCode改一下,按上面的步骤再发布一次。

640?wx_fmt=png

image.png

这次发布生成的Publish3文件夹,我们改名为App2

布署Web

1、打开WinSCP,连上Web01,将App1拖到/home下。
2、打开XShell,连上Web01,执行如下命令

# 关掉防火墙(生产环境不宜)systemctl stop firewalld
# 给予执行权限chmod 777 /home/App1/WebApplication2.dll
# 在后台运行应用nohup dotnet /home/App1/WebApplication2.dll &
  1. 同样的操作,将App2布署到Web02上。

访问应用

我们打开两个应用,随机点击一下应用顶部的链接。

http://192.168.10.192:5000,这是我们的app1
http://192.168.10.193:5000,这是我们的app2

查看监测

打开http://192.168.10.191:8080,查看监测情况

640?wx_fmt=png

监测到的应用

查看被访问的服务响应速度

640?wx_fmt=png

服务状态

结语

Skywalking-netcore做为.Net core社区的新生命,具有无限的潜力,据可靠消息,新版本将更深入地监测数据库操作及状态,HTTP请求消息以及StackTrace跟踪,让我们一起为它打Call加油吧。猛戮这里,到Github给Skywalking-netcore点星星。 :)

原文地址: https://www.jianshu.com/p/3ddd986c7581


转载于:https://www.cnblogs.com/webenh/p/9815265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值