服务监测

分布式服务性能指标,链路追踪,运行状况,日志记录都很重要,我们日常开发中为了实现这些功能需要集成很多功能,替换监控组件时成本也很高。

Dapr 可观测性模块将服务监测与应用程序分离。它自动捕获由 Dapr sidecar 和 Dapr 服务生成的流量。它还公开性能指标、资源利用率和系统的运行状况。 遥测以开放标准格式发布,使信息能够馈入到选择的监视后端。当 Dapr 获取监控数据时,应用程序不知道如何实现可观测性。 无需引用库或实现自定义检测代码。 Dapr可以使开发人员专注于构建业务逻辑,而不是监测管道。

工作原理

Dapr的Sidecar支持监测功能。 当服务间通信时,Dapr sidecar 会截获流量并提取跟踪、指标和日志记录信息。 监测以开放标准格式发布。 默认情况下,Dapr 支持 OpenTelemetry 和 Zipkin

Dapr收集器可以将遥测数据发布到不同的后端监视工具。 这些工具可以查询分析 Dapr 遥测数据。

Zipkin服务跟踪

Zipkin 是一种开源分布式跟踪系统。 它可以将遥测数据进行存储和可视化。 Dapr 提供对 Zipkin 的默认支持。我们可以查看Dapr默认配置C:\Users\username\.dapr\config.yaml,指定了zipkin的配置信息

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: http://localhost:9411/api/v2/spans

这个Zipkin服务是在初始化dapr的时候,启动的一个docker容器

我们可以访问一下 http://localhost:9411/zipkin/查看UI

现在运行backend和frontend

dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet  .\BackEnd\bin\Debug\net5.0\BackEnd.dll

dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll

通过postman访问

查看zipkin ui中的调用记录,点击SHOW可以查看调用详情

查看zipkin ui中的服务依赖关系

性能指标收集

Dapr sidecar 会公开指标终结点默认是9090,可以通过--metrics-port 9090修改端口,可以查看控制台日志

time="2021-09-28T15:58:56.0700006+08:00" level=info msg="metrics server started on :22869/" app_id=backend instance=chesterchen-lap scope=dapr.metrics type=log ver=1.4.0

Dapr使用Prometheus作为标准,Prometheus会调用Sidecar终结点,收集指标

下面我们运行frontend指定其--metrics-port 9091,运行backend指定其端口9090

dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet  .\BackEnd\bin\Debug\net5.0\BackEnd.dll --metrics-port 9090

dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll --metrics-port 9091

在dapr默认目录下创建prometheus配置文件prometheus.yml

global:
scrape_interval: 15s # By default, scrape targets every 15 seconds. # A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'dapr' # Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s static_configs:
- targets: ['192.168.43.94:9090','192.168.43.94:9091'] # Replace with Dapr metrics port if not default

通过docker运行prometheus

C:\Users\chesterychen\.dapr>docker run   -p 8081:8081 --name prometheus  -v C:/Users/chesterychen/.dapr/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml  --web.listen-address=:8081

访问prometheus UI:http://localhost:8081/,并查询指标

Dapr仪表盘

Dapr 提供一个仪表板,用于显示有关 Dapr 应用程序、组件和配置的状态信息。 使用 Dapr CLI 将仪表板在端口8080上启动:

dapr dashboard

Dapr + .NET Core实战(八)服务监测的更多相关文章

  1. Dapr + .NET Core实战(十三)跨语言开发

    因为基于Dapr的服务架构是不限语言的,我们来看看Dapr的跨语言开发.我们使用golang,python,.NET来实现跨语言的服务调用,拓扑如下 我们继续使用.NET 5的fontend和back ...

  2. Dapr + .NET Core实战(十二)服务调用之GRPC

    什么是GRPC gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的 ...

  3. Dapr + .NET Core实战(七)Secrets

    什么是Secrets 应用程序通常会通过使用专用的存储来存储敏感信息,如连接字符串.密钥等. 通常这需要建立一个密钥存储,如Azure Key Vault.Hashicorp等,并在那里存储应用程序级 ...

  4. Dapr + .NET Core实战(九)本地调试

    前几节开发Dapr应用程序时,我们使用 dapr cli 来启动dapr服务,就像这样: dapr run --dapr-http-port 3501 --app-port 5001 --app-id ...

  5. Dapr + .NET Core实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  6. Dapr + .NET Core实战(四)发布和订阅

    什么是发布-订阅 发布订阅是一种众所周知并被广泛使用的消息传送模式,常用在微服务架构的服务间通信,高并发削峰等情况.但是不同的消息中间件之间存在细微的差异,项目使用不同的产品需要实现不同的实现类,虽然 ...

  7. Dapr + .NET Core实战(五)Actor

    什么是Actor模式 Actors 为最低级别的"计算单元" 以上解释来自官方文档,看起来"晦涩难懂".大白话就是说Actors模式是一段需要单线程执行的代码块 ...

  8. Dapr + .NET Core实战(六)绑定

    什么是绑定 处理外部事件或调用外部接口的功能就是绑定,绑定可以提供以下好处: 避免连接到消息系统 ( 如队列和消息总线 ) 并进行轮询的复杂性 聚焦于业务逻辑,而不是如何与系统交互 使代码不受 SDK ...

  9. Dapr + .NET Core实战(十-终篇)K8S运行Dapr

    工作原理 为了实现在k8s上安装Dapr,Dapr需要部署dapr-sidecar-injector.dapr-operator.dapr-placement和dapr-sentry服务. dapr- ...

随机推荐

  1. air530GPS数据通过air202上传阿里云

    写硬件博客真是太难了 GPS/北斗 导航模块 Air530开发板G1学习日记 上面这个博客详细介绍了如何测试使用Air530模块根据稳重[Air530 和Air 202 进行配合使用,实现2G GPR ...

  2. android Handler消息通信

    1 package com.example.testhandler; 2 3 import android.os.Bundle; 4 import android.os.Handler; 5 impo ...

  3. 使用dom4j工具:xml总结

    1.IO流:BufferedReader字符流readLine();截取 不可行!!!2.XML解析:dom4j查:标签:element("name")elements(" ...

  4. 对于Oracle、mysql和sql server中的部分不同理解

    1.在mysql中事务默认是自动提交的,只有设置autocommit为0的时候,才用自己commit:(提到commit不要忘了rollback哦,回滚)2.但是在oracle中必须自己commit: ...

  5. [转载]getContentPane()

    关于setContentPane()和getContentPane()的应用       我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件.但是,虽然它有 add 方法,却不能直接 ...

  6. 2020年秋游戏开发-flappy bird

    此作业要求参考https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11577 GitHub地址为https://github.com/15011 ...

  7. centos7 wget安装jdk

    2021-07-151. 环境介绍 操作系统:centos7 jdk版本:jdk1.8.0.211 2. 下载 进入 https://www.oracle.com/java/technologies/ ...

  8. 假期作业02:安装JDK与文本编辑器并编写第一个Java程序

    假期作业02:安装JDK与文本编辑器并编写第一个Java程序 一.安装JDK与文本编辑器并编写第一个java程序 首先在oracle官网(需要创建账号,进行登录后方可使用)按照自己的需求下载JDK(h ...

  9. Object-源码

    Object的结构 类构造器 一个类必须要有一个构造器的存在 , Object类源码中,是看不到构造器的,系统会自动添加一个无参构造器. Object obj = new Object(): equa ...

  10. Android系统编程入门系列之应用内数据保存数据库

    上篇文章已经介绍了如何使用SharedPreferences存储键值对形式的轻量级数据,对于那些相同结构的多组数据,类似于存储Java中定义的类的多个对象属性值,如果按照键值对的形式一条条读写,需要分 ...