利用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

最终脚本如下:

# 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"`
[ -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" ]; thenmkdir -p "${WEBAPP_LOG_DIR}"fi_RUNJAVA=${JAVA_HOME}/bin/java
[ -z "$JAVA_HOME" ] && _RUNJAVA=javaeval 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 ]; thensleep 1    echo "Skywalking Web Application started successfully!"elseecho "Skywalking Web Application started failure!"exit 1fi
  • 修改/home/collector/config/application.yml中的所有localhostServer-01的IP地址,目前为192.168.10.191

最终配置文件如下:

# 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:jetty:host: 192.168.10.191port: 10800contextPath: / cache:#  guava:caffeine: remote:gRPC:host: 192.168.10.191port: 11800agent_gRPC:gRPC:host: 192.168.10.191port: 11800#Set these two setting to open ssl#sslCertChainFile: $path#sslPrivateKeyFile: $path#Set your own token to active auth#authentication: xxxxxxagent_jetty:jetty:host: 192.168.10.191port: 12800contextPath: / analysis_register:  default: analysis_jvm:  default: analysis_segment_parser:  default:bufferFilePath: ../buffer/bufferOffsetMaxFileSize: 10MbufferSegmentMaxFileSize: 500M ui:jetty:host: 192.168.10.191port: 12800contextPath: / storage:elasticsearch:clusterName: CollectorDBClusterclusterTransportSniffer: trueclusterNodes: localhost:9300indexShardsNumber: 2indexReplicasNumber: 0highPerformanceMode: truettl: 7

#storage:#  h2:
#    url: jdbc:h2:~/memorydb
#    userName: saconfiguration:  default
:#     namespace: xxxxxapplicationApdexThreshold: 2000serviceErrorRateThreshold: 10.00serviceAverageResponseTimeThreshold: 2000instanceErrorRateThreshold: 10.00instanceAverageResponseTimeThreshold: 2000applicationErrorRateThreshold: 10.00applicationAverageResponseTimeThreshold: 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函数中加入

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

Startup.cs完整代码如下

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
{    public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}        public IConfiguration Configuration { get; }       
 // This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddSkyWalking(option =>{                //这里填本应用的名称,每个应用不同option.ApplicationCode = "OurApplication1";            
    //这里填Collector的地址option.DirectServers = "192.168.10.191:11800";});services.AddMvc();}        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){            if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseBrowserLink();}            else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseMvc(routes =>{routes.MapRoute(name: "default",                  
      template: "{controller=Home}/{action=Index}/{id?}");});}} }

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

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 {    public class Program{public static void Main(string[] args){BuildWebHost(args).Run();}        public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).UseUrls("http://*:5000").UseStartup<Startup>().Build();} }

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【背包】逃亡的准备 (ssl 1236)

逃亡的准备逃亡的准备逃亡的准备 ssl 1236 类似一样题目&#xff08;除数组范围外&#xff09;:ssl 2289&#xff08;庆功会&#xff09; 题目大意&#xff1a; 有n个物品&#xff0c;每个物品可以选l[i]个,每个的代价为a[i],价值为b[i]&#xff0c;在代价不大于m的情况下&a…

P3648-[APIO2014]序列分割【斜率优化】

正题 题目链接:https://www.luogu.com.cn/problem/P3648 题目大意 nnn个数字的序列&#xff0c;分割kkk次&#xff0c;每次的权值是左右两块数字的乘积。求最大权值和分割方案。 解题思路 显然分割顺序不会影响结果&#xff0c;一个分割方式的答案是每一块与其他块的乘积之和…

codeforces E. Jamie and Tree LCA+dfs序+线段树

题解&#xff1a; 写起来还稍微有点麻烦。 dfs序线段树可以维护子树的整体修改和查询。 因此&#xff0c;这道题我们要往子树上靠。 我们首先从1号点进行dfs遍历&#xff0c;顺便求出点的dfs序和深度&#xff0c;然后我们采用倍增的思想&#xff0c;可以预处理出每个点的祖先…

async/await 的基本实现和 .NET Core 2.1 中相关性能提升

前言这篇文章的开头&#xff0c;笔者想多说两句&#xff0c;不过也是为了以后再也不多嘴这样的话。在日常工作中&#xff0c;笔者接触得最多的开发工作仍然是在 .NET Core 平台上&#xff0c;当然因为团队领导的开放性和团队风格的多样性&#xff08;这和 CTO 以及主管的个人能…

【DP】砝码称重 (ssl 1072)

砝码称重 ssl 1072 题目大意&#xff1a; 有6种砝码&#xff0c;每种的个数分别为a1,a2,a3,a4,a5,a6,请问可以平出多少种重量(0除外) Description 设有1g、2g、3g、5g、10g、20g的砝码各若干枚&#xff08;其总重<1000&#xff09;&#xff0c; 要求&#xff1a; 输入…

P5025-[SNOI2017]炸弹【tarjan,线段树优化建图】

正题 题目链接:https://www.luogu.com.cn/problem/P5025 题目大意 .nnn个炸弹&#xff0c;每个在xxx位置处&#xff0c;范围为rrr。定义fif_ifi​表示第iii个炸弹爆炸能连锁的炸弹数&#xff0c;要求输出∑i1nfi∗i\sum_{i1}^nf_i*ii1∑n​fi​∗i 解题思路 将每个炸弹可以炸…

使用Swashbuckle构建RESTful风格文档

本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle&#xff1b;因为项目需要统一api文档的风格&#xff0c;并要支持多种开发语言&#xff08;C#&#xff0c;java&#xff0c;python&#xff09;&#xff0c;所以首先想到的是swagger来构建api文档&#xff0c;本章讲解…

【dfs】【bfs】【链表】 求连通分量 (ssl 1759)

求连通分量 ssl 1759 题目大意 由n个点组成的无向图&#xff0c;求连通在一起的点数最大是多少 原题 求一个图的连通分量 Input n 顶点数(<100) 边 Output 连通分量 Sample Input 8 6 3 1 2 2 5 5 4 4 1 8 7 0 0 Sample Output 4 方法一&#xff08;dfs …

P2472-[SCOI2007]蜥蜴【网络流】

正题 题目链接:https://www.luogu.com.cn/problem/P2472 题目大意 n∗mn*mn∗m个格子&#xff0c;每个格子的石柱高度不同&#xff0c;蜥蜴可以跳到距离不超过ddd的石柱处&#xff0c;并且先前所站的石柱高度减一&#xff0c;为0则不能站&#xff0c;然后求有多少只蜥蜴不可以…

发布 Rafy .NET Standard 版本 Nuget 包

去年年中&#xff0c;Rafy 框架的源码就已经支持了 Net Standard 2.0 版本。其开源代码也已经上传到 Github 中&#xff1a;https://github.com/zgynhqf/rafy/tree/NetStandard2.0 。但是这都只是在源码层面支持 NS2.0&#xff0c;并没有发布其正式的 Nuget 包。要使用这个版本…

一些来自STL的好东西

STL: 队列: 表达式作用#include&#xff1c;queue&#xff1e;定义queue&#xff1c;int&#xff1e;x定义一个int类型的队列&#xff0c;名为xx.push(y)从队列x的对尾插入yx.pop()队列x的队头出列gx.front()g等于x的队头hx.back()h等于x的队尾x.size()队列x的长度x.empty()判…

codeforces D.MADMAX 动态规划、记忆化搜索

题意 给出一个DAG&#xff0c;每条边上有权重(权重是小写字母的ASCII码)&#xff0c;现在两位同学A和B分别位于某两点上(可以相同)&#xff0c;其中A和B轮流走&#xff0c;但是每人所走的边权不能变小&#xff0c;走到不能走为止就输。 A先走&#xff0c;询问最后谁会赢。 题解…

GDOI2020游记

DAY0DAY0DAY0 早上上课一堆作业没写完(啊这 然后中午去竞赛室之前还没找到老师请假&#xff0c;还专门又跑回去拿了准考证(还白嫖了马老师红包 然后下午就去了&#xff0c;发现没带充电线 之后发现准考证没带&#xff0c;吓死了。还好酒店有可以打印的地方&#xff0c;还好搞定…

你关心才值得分享 | K8S网络安全之访问控制技术实践

(请允许我插播下广告&#xff0c;便于其它伙伴了解趣码 Cloud Coder)还是那句话&#xff0c;你关心才值得分享~最近的一起分享就在5.10本周四晚&#xff0c;精彩千万不要错过&#xff01;Hi&#xff0c;你是不是也曾觉得K8S&#xff08; Kubernetes &#xff09;网络安全话题范…

【dfs】【链表】连通图 (ssl 1758)

连通图 ssl 1758 题目大意 有一个由n个点组成的无向图&#xff0c;检测他是否联通 原题 判断一个图是否为一个边通图 Input n 顶点 (n<100) 边 Output 1 表示连通 0 表示不边通 Sample Input 5 1 2 2 3 5 4 0 0 Sample Output 0 解题方法 用dfs链表从1开始…

洛谷P1120小木棒 爆搜+剪枝

题解 暴搜的思路容易想到&#xff0c;但是剪枝细节有很多&#xff0c;数据很强。 搜索思路&#xff1a; a. 用dfs(left_num,left_len,bound)表示当前还需要拼left_num根木棒&#xff0c;当前正在拼的木棒还剩left_len长度&#xff0c;搜索是从大往小搜索&#xff0c;并且当前搜…

P3338-[ZJOI2014]力【FFT】

正题 题目链接:https://www.luogu.com.cn/problem/P3338 题目大意 Fj∑i1j−1qi∗qj(i−j)2−∑ij1nqi∗qj(i−j)2F_j\sum_{i1}^{j-1}\frac{q_i*q_j}{(i-j)^2}-\sum_{ij1}^n\frac{q_i*q_j}{(i-j)^2}Fj​i1∑j−1​(i−j)2qi​∗qj​​−ij1∑n​(i−j)2qi​∗qj​​ EjFjqjE_j…

从Xamarin.Essentials谈Xamarin库的封装

编者语&#xff1a;Xamarin在国内的推广还需要努力&#xff0c;其实这真的是移动端开发的一大福音&#xff0c;毕竟用一份代码的时间可以生成iOS/Android/Windows/Linux/macOS/Tizen多个平台&#xff0c;而且是原生的性能。Xamarin在Build 2018发布的新功能有Xamarin.Essential…

【最短路】【图论】【Floyed】牛的旅行(ssl 1119/luogu 1522)

牛的旅行 ssl 1119 luogu 1522 题目大意 有两堆点&#xff0c;每一堆点之中的任何两个点都一定有相连的路线&#xff0c;连接两堆点中的各一个点&#xff0c;使最远的两个点的距离最短 原题 农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称…

codefoces 939E Maximize!好题

题解 若存在一个子集s满足答案的话&#xff0c;则该子集一定包含集合S的最大值。 反证法证明&#xff1a; 假设s集合中最大的元素为x&#xff0c;S集合中最大的元素为X。则如果把x换成X&#xff0c;最大值增加了X-x&#xff0c;而平均值增量一定不大于X-x。 这样的话&#xff0…