利用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孵化器”。
架构图
官方版:https://github.com/apache/incubator-skywalking
.Net core Agent + Skywalking
什么是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/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm
也可以先用迅雷下到主机,再通过局域网下载到虚拟机
使用rpm -ivh jdk-8u171-linux-x64.rpm
进行安装
命令执行完毕即安装完成,使用java -version
检查是否安装成功
部署Elasticsearch
在/etc/yum.repo.d/
下新建elasticsearch.repo
文件,内容如下:
[elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
按 :wq
保存后执行sudo yum install elasticsearch -y
安装
用vim配置文件/etc/elasticsearch/elasticsearch.yml
- 设置
cluster.name: CollectorDBCluster
。此名称需要和collector配置文件一致。 - 设置
node.name: masterNode
, 节点名称可以设置为任意名字,如为集群模式,则每个节点名称需要不同。
增加如下配置
cluster.name: CollectorDBCluster network.host: 0.0.0.0 thread_pool.bulk.queue_size: 1000
最终配置如下:
# ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # Before you set out to tweak and tune the configuration, make sure you # understand what are you trying to accomplish and the consequences. # # The primary way of configuring a node is via this file. This template lists # the most important settings you may want to configure for a production cluster. # # Please consult the documentation for further information on configuration options: # https://www.elastic.co/guide/en/elasticsearch/reference/index.html # # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: cluster.name: CollectorDBCluster network.host: 0.0.0.0 thread_pool.bulk.queue_size: 1000 #cluster.name: my-application # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # #node.name: node-1 # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # #path.data: /path/to/data # # Path to log files: # #path.logs: /path/to/logs # # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # #bootstrap.memory_lock: true # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # #network.host: 192.168.0.1 # # Set a custom port for HTTP: # #http.port: 9200 # # For more information, consult the network module documentation. # # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when new node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # #discovery.zen.ping.unicast.hosts: ["host1", "host2"] # # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1): # #discovery.zen.minimum_master_nodes: 3 # # For more information, consult the zen discovery module documentation. # # ---------------------------------- Gateway ----------------------------------- # # Block initial recovery after a full cluster restart until N nodes are started: # #gateway.recover_after_nodes: 3 # # For more information, consult the gateway module documentation. # # ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true
启动服务systemctl start elasticsearch.service
设为开机启动systemctl enable elasticsearch.service
部署collector
下载release的版本https://github.com/OpenSkywalking/skywalking-netcore/releases
将压缩包解压到Server-01
的/home/collector/
目录
- 修改
/home/collector/bin/webappService.sh
中的127.0.0.1
为Server-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 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/collector/config/application.yml
中的所有localhost
为Server-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: 100000 naming: jetty: host: 192.168.10.191 port: 10800 contextPath: / cache: # guava: caffeine: remote: gRPC: host: 192.168.10.191 port: 11800 agent_gRPC: gRPC: host: 192.168.10.191 port: 11800 #Set these two setting to open ssl #sslCertChainFile: $path #sslPrivateKeyFile: $path #Set your own token to active auth #authentication: xxxxxx agent_jetty: jetty: host: 192.168.10.191 port: 12800 contextPath: / analysis_register: default: analysis_jvm: default: analysis_segment_parser: default: bufferFilePath: ../buffer/ bufferOffsetMaxFileSize: 10M bufferSegmentMaxFileSize: 500M ui: jetty: host: 192.168.10.191 port: 12800 contextPath: / storage: elasticsearch: clusterName: CollectorDBCluster clusterTransportSniffer: true clusterNodes: localhost:9300 indexShardsNumber: 2 indexReplicasNumber: 0 highPerformanceMode: true ttl: 7 #storage: # h2: # url: jdbc:h2:~/memorydb # userName: sa configuration: default: # namespace: xxxxx applicationApdexThreshold: 2000 serviceErrorRateThreshold: 10.00 serviceAverageResponseTimeThreshold: 2000 instanceErrorRateThreshold: 10.00 instanceAverageResponseTimeThreshold: 2000 applicationErrorRateThreshold: 10.00 applicationAverageResponseTimeThreshold: 2000
给脚本权限
chmod 777 /home/collector/bin/*.sh
运行/home/collector/bin/startup.sh
启动WebUI和Collector。
创建WebApplication
接下来,我们创建一个Web应用,并在其中加入Skywalking for dotnet core的代理程序。
1、打开VS2017,创建一个.Net Core MVC应用,请跟着我操作:VS中点击菜单“文件”——“新建”——“项目”(按Ctrl+Shift+N同等效果),在弹出的对话框中从左到右进行如下操作。
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改一下,按上面的步骤再发布一次。
这次发布生成的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 &
- 同样的操作,将App2布署到Web02上。
访问应用
我们打开两个应用,随机点击一下应用顶部的链接。
http://192.168.10.192:5000,这是我们的app1
http://192.168.10.193:5000,这是我们的app2
查看监测
打开http://192.168.10.191:8080
,查看监测情况
查看被访问的服务响应速度
FAQ
Q:Collector无法启动
删除buffer文件夹,重新启动startup.sh
Q:监测不到数据
检查WebApplication2.dll有没有执行权限
Q:WEBUI报404错误
检查与ES的连接配置是否正确
Q:Dashboard报500错误
关闭Collector, 关闭WebUI,关闭ES,删除buffer文件夹,清除ES数据(位于
/var/lib/elasticsearch/nodes
下),先重启ES,再启动Collector和WebUI,再去访问一下应用生产一点数据。
结语
Skywalking-netcore做为.Net core社区的新生命,具有无限的潜力,据可靠消息,新版本将更深入地监测数据库操作及状态,HTTP请求消息以及StackTrace跟踪,让我们一起为它打Call加油吧。猛戮这里,到Github给Skywalking-netcore点星星。 :)
引用
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
入门 spark
CentOS项目组织结构内容 image.png 启动 Hadoop
- 下一篇
win10 spark+scala+eclipse+sbt 安装配置
版权声明:本文由董可伦首发于https://dongkelun.com,非商业转载请注明作者及原创出处。商业转载请联系作者本人。 https://blog.csdn.net/dkl12/article/details/80224035 我的原创地址:https://dongkelun.com/2018/03/15/winSparkConf/ 1、首先安装配置jdk1.8以上,建议全部的安装路径不要有空格 2、安装spark 2.1 下载 下载地址:http://spark.apache.org/downloads.html,我下载的是 spark-2.2.1-bin-hadoop2.7.tgz 2.2 安装 解压到指定路径下即可,比如 D:\Company\bigdata\spark-2.2.1-bin-hadoop2.7 2.3 配置环境变量 在系统变量Path添加一条:D:\Company\bigdata\spark-2.2.1-bin-hadoop2.7\bin 即可 3、安装hadoop 3.1 下载 下载地址:https://archive.apache.org/dist/h...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6