前言

Elastic APM实现链路追踪,首先要引用开源的APMAgent(APM代理),然后将监控的信息发送到APMServer,然后在转存入ElasticSearch,最后有Kibana展示;具体流程如下图所示:

首先我们下载ElasticSearch、Kibana、APM Server;可以先简单的理解为 ElasticSearch是存储数据用的,Kibana是展示数据用的。

ElasticSearch下载地址:

https://www.elastic.co/cn/downloads/elasticsearch

Kibana下载地址:

https://www.elastic.co/cn/downloads/kibana

APM Server下载地址:

https://www.elastic.co/cn/downloads/apm

在下载时需要注意,ElasticSearch、Kibana、APM Server要下载相同的版本,相同平台的;下图为下载时的注意事项。

这里我下载的都是window下的安装包,下载文件如下图:

Elastic免费版本支持内容

安装ElasticSearch

ElasticSearch依赖于java的SDK,所以需要安装Java的SDK。

java安装参考

为了测试,我随便找了一台有java环境的电脑,系统是window10,java环境如下图:

然后将ElasticSearch压缩包解压,找到config\elasticsearch.yml文件,记事本打开,修改配置如下:

cluster.name: kiba001
node.name: master
node.master: true
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["kiba518"]

然后找到bin下面的elasticsearch.bat,双击运行脚本安装ElasticSearch。

elasticsearch.bat会启动一个CMD窗口,该窗口将是ElasticSearch的宿主,即关闭了他,ElasticSearch就会关闭。

让CMD窗口运行一会,然后打开浏览器,输入 http://localhost:9200 ,显式以下画面,说明ES安装成功。因为我是随机找的有java环境的电脑安装的,所以ElasticSearch虽然依赖于JDK,但似乎对版本并不苛刻。

安装Kibana

与ElasticSearch类似,将Kibana压缩包解压,找到bin下面的Kibana.bat,双击运行脚本安装Kibana。

Kibana.bat也会启动一个CMD窗口,该窗口将是Kibana的宿主。

让CMD窗口运行一会,然后打开浏览器,输入http://localhost:5601/,显式以下画面,说明kibana安装成功。

Config文件夹下的kibana.yml是默认的配置文件,想深入研究的可以百度搜索一下这个文件的使用,这里我没有配置,所以使用的都是默认配置,用的请求地址也是localhost。

修改server.host可以修改请求地址:

server.host: "0.0.0.0"

修改i18n.locale的值为"zh-CN"为,可以启动汉化版本kibana。

安装APM Server

首先解压APM Server的压缩包,如下图:

然后在里面找到ApmServer的配置文件apm-server.ym。

将配置文件最开始的host: “localhost:8200”修改成“0.0.0.0:8200”,以便让他能允许通过ip:端口号的方式访问。然后增加elasticsearch地址配置:

apm-server:
# Defines the host and port the server is listening on. Use "unix:/path/to.sock" to listen on a unix domain socket.
host: "0.0.0.0:8200"
output.elasticsearch:
hosts: ["localhost:9200"]
#hosts: ["已安装好的ES地址,多个之间用逗号隔开"]

效果如下:

然后运行apm-server.exe,这里需要注意的是apm-server.exe是个window服务,所以这里不能双击运行。不过安装包中已经有可以启动服务的文件了——install-service-apm-server.ps1。

具体安装ApmServer步骤。

1.从下载页面下载 APM Server Windows zip 文件。

2.将 zip 文件的内容解压缩到 C:\Program Files

3.将 apm-server-7.16.3-windows 目录重命名为 APM-Server

4.以管理员身份打开 PowerShell 提示符(右键单击 PowerShell 图标,然后选择以管理员身份运行)。如果运行的是 Windows XP,则可能需要下载并安装 PowerShell。

5.从 PowerShell 提示符处,运行以下命令以将 APM Server 安装为 Windows 服务。

然后在弹出的页面中输入Y,然后回车。

注意:如果您的系统禁用了脚本执行,则需要为当前会话设置执行策略,以允许脚本运行。示例:

PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-apm-server.ps1`

然后我们打开控制面板—管理工具—服务,就可以看到,我们已经安装了一个apm-server的服务了。

不过他的当前状态是未启动,我们右键将服务启动就可以了。

然后我们浏览http://localhost:8200/,得到如下界面,代表ApmServer已经安装成功了。

默认的日志在:C:\ProgramData\apm-server

联合测试

我们重新打开Kibana——http://localhost:5601/,然后点击AddIntegrations。

然后点击ElasticAPM。

然后选择Windows。

然后页面向下拉,点击Check APM Server status——检测APM Server的状态。

如下图,提示了已经正确安装了APM Server。

APMAgent使用

首先创建一个NETCore的Web项目,然后引入Elastic相关DLL。

可以单独引用独立的DLL。

也可以直接就引用一个整合的DLL,推荐就引用一个Elastic.Apm.NetCoreAll。

然后在Startup的Configure方法中使用 app.UseElasticApm(Configuration)。

代码如下:

using ...
using Elastic;
using Elastic.Apm;
using Elastic.Apm.AspNetCore;
using Elastic.Apm.EntityFrameworkCore;
namespace ElasticAPMTest
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseElasticApm(Configuration);
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

然后appsettings.json修改如下:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ElasticApm": {
"Environment": "production", // Set the service environment
"SecretToken": "",
"ServerUrl": "http://192.168.50.28:8200/", //设置前面安装好的APM Server URL,默认端口号是8200
"LogLevel": "Error", // Log级别,
"ServiceName": "TEST1", //应用的名字
//"CaptureBody": "all",
//"CaptureBodyContentTypes": "application/x-www-form-urlencoded*, text/*, application/json*, application/xml*",
"ServiceVersion": "1.0.0.0"
//"Environment": "staging",
//"CaptureHeaders": "false",
//"TransactionSampleRate": 0.456,
//"TransactionMaxSpans": 375,
//"CaptureBody": "all",
//"CaptureBodyContentTypes": "application/x-www-form-urlencoded*, text/*, application/json*, application/xml*"
}
}

然后运行网站,如下图:

项目运行后,第一行提示我们ElasticAPM收集数据是30000毫秒的间隔,即每30秒采集一次数据。

Github参考网站,可以下载源代码了解更多详情。

查看检测的数据

我们回到刚才Kibana的页面,继续向下拉,如下图(截图已经是中文 了,因为我已经汉化了)。

点击【检测代理状态】,提示尚未从代理收到任何数据,但我的项目运行正常,所以直接点击加载Kibana对象,然后启动APM,进入服务管理界面。

点击Test1,这是配置ApmAgent的项目,界面如下。

可以看到,他已经在检测我的网站的访问和吞吐量等等信息了。

点击【指标】,还有CPU和内存的统计。

点击【事务】,这里的【时间线】就有我们请求的链路跟踪,即微服务所需的链路跟踪功能。

结语

如果一个公司存在Java团队和C#团队,我们在使用APM的时候,强烈建议使用ELK,因为大家都统一使用一个工具交流很方便,可以避免非常非常非常多不必要的麻烦。

详解ElasticAPM实现微服务的链路追踪(NET)的更多相关文章

  1. SpringBoot之微服务日志链路追踪

    SpringBoot之微服务日志链路追踪 简介 在微服务里,业务出现问题或者程序出的任何问题,都少不了查看日志,一般我们使用 ELK 相关的日志收集工具,服务多的情况下,业务问题也是有些难以排查,只能 ...

  2. 微服务 Zipkin 链路追踪原理(图文详解)

    一个看起来很简单的应用,可能需要数十或数百个服务来支撑,一个请求就要多次服务调用. 当请求变慢.或者不能使用时,我们是不知道是哪个后台服务引起的. 这时,我们使用 Zipkin 就能解决这个问题. 由 ...

  3. SpringCloud初体验:六、利用 Sleuth 和 Zipkin 给微服务加上链路监控追踪查看功能

    首先:装上 Zipkin 服务,收集调用链跟踪数据,体验时装在了本机docker上, 方便快捷 docker run -d -p : openzipkin/zipkin 安装后访问地址也是 9411端 ...

  4. Go微服务全链路跟踪详解

    在微服务架构中,调用链是漫长而复杂的,要了解其中的每个环节及其性能,你需要全链路跟踪. 它的原理很简单,你可以在每个请求开始时生成一个唯一的ID,并将其传递到整个调用链. 该ID称为Correlati ...

  5. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

  6. Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin

    Zipkin 是一个开放源代码分布式的跟踪系统,由 Twitter 公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集.存储.查找和展现.它的理论模型来自于Google ...

  7. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

  8. Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证

    概要 在asp.net webform开发中经常会对用户提交输入的信息进行校验,一般为了安全起见大家都会在客户端进行Javascript(利于交互).服务端双重校验(安全).书写校验代码是一个繁琐的过 ...

  9. 详解react/redux的服务端渲染:页面性能与SEO

        亟待解决的疑问 为什么服务端渲染首屏渲染快?(对比客户端首屏渲染)   react客户端渲染的一大痛点就是首屏渲染速度慢问题,因为react是一个单页面应用,大多数的资源需要在首次渲染前就加载 ...

随机推荐

  1. 【系统分析】《系统分析与设计方法》 Jeffrey L.Whitten 第1部分 系统开发环境 第3章 信息系统开发

    1.解释为什么对企业来说,拥有一个标准的系统开发过程很重要. 开发过程的成熟,使项目时间和费用减少,生产率和质量提高 2.如何关联系统生命周期和系统开发方法学? 系统生命周期包含系统开发阶段,其中使用 ...

  2. [opencv]zxing c++ 库的编译,安装,以及api的介绍

    环境:ubuntu 16.04 1. 下载:zxing的源码 git clone https://github.com/15903016222/zxing-cpp.git2. 安装编译依赖的工具:cm ...

  3. 论文翻译:2020_Acoustic Echo Cancellation by Combining Adaptive Digital Filter and Recurrent Neural Network

    论文地址:https://arxiv.53yu.com/abs/2005.09237 自适应数字滤波与循环神经网络相结合的回声消除技术 摘要 回声消除(AEC)在语音交互中起关键作用.由于明确的数学原 ...

  4. Vue.js高效前端开发 • 【Vue组件】

    全部章节 >>>> 文章目录 一.Vue组件介绍 1.组件概述 2.组件使用步骤 3.实践练习 一.Vue组件使用 1.组件注册 2.组件注册语法糖 3.使用script或te ...

  5. Java练习小题_求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

    要求说明: 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出. 实现思路: [二维数组]相关知识 ...

  6. 「艺蜂酒店管理系统」 · Java Swing + mysql 开发 学生毕业设计项目

    Java  Swing在社会上基本用不到,但是任有学校拿来当做结课设计,只是博主在校期间的一个项目.如果在部署过程中有问题可以加我qq68872185. 码云仓库地址:https://gitee.co ...

  7. VUE的学习_从入门到放弃(一)

    一.vue的功能及作用 工作方式如下 1.不用操作DOM 2.单页面应用web项目 简称:SPA 3.当下各种新框架都采用的类似Vue或者类似React的语法去作为主语法,微信小程序/MpVue... ...

  8. Swoole 中使用 Context 类管理上下文,防止发生数据错乱

    前面的文章中,我们说过:不能使用类静态变量 Class::$array / 全局变量 global $_array / 全局对象属性 $object->array / 其他超全局变量 $GLOB ...

  9. websocket在线测试工具

    为了测试websocket, 根据网上的一些工具修改了一些, 因此得到了这个工具 源码 源码: <!DOCTYPE html> <html lang="en"&g ...

  10. Star Way To Heaven

    题目描述 小 x伤心的走上了 Star way to heaven. 到天堂的道路是一个笛卡尔坐标系上一个 n*m的长方形通道 顶点在0,0 和 . 小 n,m 从最左边任意一点进入,从右边任意一点走 ...