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服务器提供的数据,实验应用架构如下图。

实验架构

实验过程

安装系统

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

IP配置表

服务器 IP 备注
Server-01 192.168.10.191 提供ES服务、Collector与WebUI
Web01 192.168.10.192 运行App1
Web02 192.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

下载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同等效果),在弹出的对话框中从左到右进行如下操作。

.Net Core Web应用

选择项目类型

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

操作

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

找到包

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

许可证

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应用,右键——发布,接下来看图操作。

发布

发布到文件夹

选择目标位置

发布

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

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

发布成功

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

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,查看监测情况

监测到的应用

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

服务状态

结语

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

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


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

利用Skywalking-netcore监控你的应用性能相关推荐

  1. stopwatch java_利用StopWatch类监控Java代码执行时间并分析性能

    springframework中的StopWatch类可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Sto ...

  2. linux内存使用监控,如何利用Bash脚本监控Linux的内存使用情况

    如何利用Bash脚本监控Linux的内存使用情况 发布时间:2020-09-13 14:36:53 来源:脚本之家 阅读:114 作者:Magesh Maruthamuthu 栏目:服务器 前言 目前 ...

  3. 利用ngxtop实时监控nginx的访问情况

    利用ngxtop实时监控nginx的访问情况 关于对nginx web server的实时访问的实时监控问题,我很久之前就想实现的,现在虽有nginx自带的status扩展,但那是全局的,无法细分到v ...

  4. 如何利用秒级监控进行mongodb故障排查

    摘要: 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba.运维.业务开发同学进行问题诊断.排查.分析有着重要的作用.并且一个监控系统的好坏,也很大程度上影响了能否精 ...

  5. 初探 performance – 监控网页与程序性能

    初探 performance – 监控网页与程序性能 使用 window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据. 配合上报一些客户端浏览器的设备类型等数 ...

  6. 利用bwm-ng 实时监控系统

    今天我们这里来介绍一个工具,bwm-ng,这个小工具可以来帮我们监控系统的一些性能,比如实时的网络流量,磁盘的读写速度, 下面来看下: 1.下载:wget http://www.gropp.org/b ...

  7. zabbix利用traceroute命令监控主备链路状态

    转载来源 :利用traceroute命令监控主备链路状态 : http://www.lwops.cn/thread-236-1-2.html 一.前提:三角型区域的路由是用ospf做的,都划分进are ...

  8. 【深度学习】利用深度学习监控女朋友的微信聊天?

    效果 ​ 1.概要 利用深度学习模型Seq2Seq模型搭建拼音转中文模型,利用python键盘监控事件模块PyHook3监控女朋友的发送的拼音数据并发送给模型进行中文预测存储到本地日志中. 2.结构 ...

  9. 怎么实时监控手机cpu-----使用性能监视器PerfMon

    Emmagee介绍 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 开源地址: https://github.com/NetEase/Emmagee 支 ...

最新文章

  1. python joblib库 并行化 缓存
  2. dqn在训练过程中loss越来越大_[动手学强化学习] 2.DQN解决CartPole-v0问题
  3. java内存系列:测试JDK最大内存
  4. PostgreSQL源码学习(1)--PG13代码结构
  5. 面向对象编程设计练习题(1)
  6. Python入门--字典的创建
  7. VIM命令记录和cscope结合使用
  8. android 自定义取色器,Android Studio设置颜色拾色器工具Color Picker教程
  9. 张国荣的25年演艺生涯
  10. DeepMind利用AI分析动物行为,可正确识别50种大型物种
  11. 第一个STM8项目的记录
  12. 「书评」聊聊打CTF的那本书
  13. 你也会说谎——林宥嘉【说谎】解析
  14. 微信小程序时间加法_微信小程序-日期时间计算
  15. 数据挖掘课程实验(8个实验报告)
  16. 什么是Metalink?
  17. 读书·2017(23本)
  18. B1005 继续(3n+1)猜想
  19. HackRF One + SoapyHackRF安装测试
  20. python(二十三)

热门文章

  1. 阿里云三维可视化使用初体验
  2. 英语影视台词---八、the shawshank redemption
  3. Intellij IDEA2017 的控制台里不识别maven命令问题处理
  4. Pressed状态和clickable,duplicateParentState的关系
  5. VMware Workstation与VMware vSphere的区别
  6. 大数据能否力挽国足败落狂澜?
  7. 解决 web.xml is missing and failOnMissingWebXml is set to true 报错
  8. 如何解决ORA-12638: 身份证明检索失败错误
  9. 女人15个秘密武器疼爱男人(女人必看)
  10. 接口返回json对象出现套娃递归问题 | System.Text.Json 版本