使用OpenTelemetry进行监控

工具介绍

注意:该部分介绍摘抄自:搭建高级的性能监控系统(Prometheus+Grafana+Node Exporter+Alertmanager) - 爱云

Prometheus、Grafana、Node Exporter 和Alertmanager是一组用于监控和可视化系统性能的开源工具。它们通常一起使用,形成一个强大的完整的监控和告警系统。 一般来说,这四个工具一起协作,形成了一个完整的监控和告警系统。Node Exporter用于收集主机级别的指标(本文暂未使用),Prometheus存储和查询这些指标,Grafana提供可视化界面,而Alertmanager则负责管理和发送告警。整个系统的目标是帮助管理员和开发人员实时了解系统的状态、性能和健康状况,并在必要时采取措施。

Prometheus

Prometheus 是一种开源的系统监控和警报工具。它最初由 SoundCloud 开发,并成为 Cloud Native Computing Foundation(CNCF)的一部分。Prometheus 支持多维度的数据模型和强大的查询语言,使得用户可以轻松地收集和查询各种类型的监控数据。

Grafana

Grafana 是一个开源的数据可视化和监控平台。它提供了丰富的图表和仪表盘,可以将各种数据源的信息可视化展示。Grafana 支持多个数据源,包括 Prometheus、Graphite、InfluxDB 等,因此可以与各种监控系统集成,提供灵活且强大的可视化功能。

Alertmanager

Alertmanager 是 Prometheus 生态系统中的一个组件,负责处理和管理告警。当 Prometheus 检测到异常或达到某个预定的阈值时,它将生成告警并将其发送到 Alertmanager。Alertmanager 可以进行静默、分组、抑制和路由告警,并将它们发送到不同的接收端,如电子邮件、Slack 等

.NetCore项目准备

基于我的一个示例项目进行改造,项目地址:MyExample: 包含部分文章内的示例代码 ,为了演示一个基本的监控效果,监控的数据也只是请求,具体生产环境需要监控什么业务,这个看具体情况了,这里需要在原来的项目基础上需要安装以下nuget包

<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.7.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />

然后就可以注入服务,这里只是举例操作

services.AddOpenTelemetry().WithMetrics(builder =>{builder.AddPrometheusExporter();builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");});

最后记得要使用服务

app.MapPrometheusScrapingEndpoint();

启动项目后访问 ip+ metrics访问页面

image.png

然后将该示例项目使用docker部署到服务器上 ,如果要使用该示例项目,记得切换分支到develop,将项目拉取到服务器,然后进入项目目录,执行命令去生成容器

sudo docker-compose up -d

部署成功截图如下

image.png

访问地址 http://192.168.82.163:8001/metrics

image.png

安装监控和可视化程序

准备一个服务器,提前安装好了docker以及docker-compose程序,版本示例如下

image.png

关于Prometheus和Grafana可以通过docker进行安装到服务器中,可以参考仓库:CommonDockerYaml: 公共常用的docker-compose yaml配置

安装Prometheus

因为这里我只是用于做demo演示效果,所以我并没有取考虑挂载的问题,生产环境使用记得挂载数据

version: '3'services:prometheus: # 访问:http://localhost:9090/targetsimage: prom/prometheus:v2.37.6container_name: prometheus command:- '--config.file=/etc/prometheus/prometheus.yml'- '--storage.tsdb.path=/prometheus'- '--web.console.libraries=/usr/share/prometheus/console_libraries'- '--web.console.templates=/usr/share/prometheus/consoles'- '--web.external-url=http://localhost:9090/'- '--web.enable-lifecycle'- '--storage.tsdb.retention=15d'volumes:#- /etc/localtime:/etc/localtime:ro- ./config/prometheus/:/etc/prometheus/#- ./data/prometheus:/prometheusports:- 9090:9090links:- alertmanager:alertmanageralertmanager: # 告警服务image: prom/alertmanager:v0.25.0container_name: alertmanagerports:- 9093:9093volumes:#  - /etc/localtime:/etc/localtime:ro- ./config/prometheus/:/etc/alertmanager/command:- '--config.file=/etc/alertmanager/alertmanager.yml'- '--storage.path=/alertmanager'

关于prometheus.yml内容如下

# 全局配置
global:scrape_interval: 15sevaluation_interval: 15s# scrape_timeout is set to the global default (10s).
# 告警配置
alerting:alertmanagers:- static_configs:- targets: ['localhost:9093']
# 加载一次规则,并根据全局“评估间隔”定期评估它们。
rule_files:- "/config/rules.yml"
# 控制Prometheus监视哪些资源
# 默认配置中,有一个名为prometheus的作业,它会收集Prometheus服务器公开的时间序列数据。
scrape_configs:# 作业名称将作为标签“job=<job_name>`添加到此配置中获取的任何数据。- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'node' # .NetCore服务地址static_configs:- targets: ['localhost:9100']labels:env: devrole: docker

alertmanager.yml文件,我并没有做配置,暂时搞了一个默认的

global:resolve_timeout: 5msmtp_smarthost: 'xxx@xxx:587'smtp_from: 'zhaoysz@xxx'smtp_auth_username: 'xxx@xxx'smtp_auth_password: 'xxxx'smtp_require_tls: true
route:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'test-mails'
receivers:
- name: 'test-mails'email_configs:- to: 'scottcho@qq.com'

rule.yml文件内容如下

groups:
- name: examplerules:# Alert for any instance that is unreachable for >5 minutes.- alert: InstanceDownexpr: up == 0for: 1mlabels:serverity: pageannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

然后就可以运行docker-compose命令去生成容器,示例如下

image.png

然后访问Ip地址加端口访问页面,比如http://192.168.81.139:9090/

image.png

打开这个界面就说明安装好了,这个时候我们看下 http://192.168.81.139:9090/targets?search= 页面

image.png

这个node报错是因为这个地址是无效了,那么修改为真是.NetCore的服务地址,修改配置文件然后重新启动

image.png

重启后界面显示如下

image.png

安装Granfana

这里直接使用docker来安装grafana

sudo docker run --name grafana -d -p 8000:3000 grafana/grafana

然后访问地址 ip+ 8000,默认账号密码为admin/admin

image.png

添加数据源

image.png

image.png

填写prometheus地址

image.png

导入仪表盘

创建文件夹用来存放我们本地的要导入的文件

image.png

image.png

想要在Grafana中进行数据的展示,需要导入dashborards模板,本文的模板我是从微软仓库找到的,地址为:https://github.com/dotnet/aspire/tree/main/src/Grafana

image.png

分别点进去下载这两个仪表盘对应的的json文件即可,也可以去我common-docker-yaml仓库中下载

image.png

然后导入json文件

image.png

导入aspnetcore.json文件,并选择我们的netcore文件夹以及选择刚刚我们创建的Prometheus数据源

image.png

导入aspnetcore-endpoint.json文件

image.png

这个时候我们就看到了好看的仪表盘

image.png

image.png

当我点击接口让其报错,那么就显示到界面上

image.png

如果需要监控其他内容,也可以模仿着进行修改。

文章转载自:AZRNG

原文链接:https://www.cnblogs.com/azrng/p/18048851

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

大地测量学课堂笔记:1、绪论

慕课网址&#xff1a;https://www.icourse163.org/course/WHU-1464124180?fromsearchPage&outVendorzw_mooc_pcssjg_https://www.icourse163.org/course/WHU-1464124180?fromsearchPage&outVendorzw_mooc_pcssjg_ 1. 大地测量学的定义 大地测量学是专门研究精确测量…

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…

使用华为云云函数functiongraph

之前使用腾讯云serverless&#xff0c;但是突然开始收费了。所以改用functiongraph 首先登陆华为云。 目录 1.登录华为云 2.在控制台找到functiongraph并开通 3.添加依赖包&#xff1a; 3.1 制作依赖包 3.2引入依赖包 4.发送请求 4.1直接发送 4.1.1uri 4.1.2 请求头…

“找不到msvcr90.dll无法启动软件如何解决

msvcr90.dll 是一个属于 Microsoft Visual C 2008 Redistributable Package 的动态链接库&#xff08;DLL&#xff09;文件。在Windows操作系统中&#xff0c;许多应用程序特别是那些使用Visual Studio 2008编译器开发的程序&#xff0c;在运行时可能需要调用这个库中的函数和资…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

K8S高级篇:138页经典实战案例,图文并茂代码齐全,仅限3天分享

相信很多朋友都听过云原生和容器技术&#xff0c;当然也少不了K8S的大名&#xff0c;在“容器技术革命”中&#xff0c;K8S俨然已经成为容器技术的事实标准&#xff0c;各个知名互联网企业前仆后继地拥抱云原生&#xff0c;争先恐后地把容器和K8S作为战略重心之一。 容器技术发…

WordPress上传图片错误:不是合法的JSON响应

最近在进行WordPress迁移至新服务器的过程中&#xff0c;遭遇到一个棘手的问题&#xff0c;即在编辑文章并上传图片时&#xff0c;不断遭遇“此响应不是合法的JSON响应”的错误。经过多次验证和搜索&#xff0c;最终确定问题的根本原因并不在于禁用 Gutenberg 编辑器或安装经典…

CSS变量和@property

CSS变量 var() CSS 变量是由CSS作者定义的实体&#xff0c;其中包含要在整个文档中重复使用的特定值。使用自定义属性来设置变量名&#xff0c;并使用特定的 var() 来访问。&#xff08;比如 color: var(--main-color);&#xff09;。 基本用法 CSS变量定义的作用域只在定义该…

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…

23.基于springboot + vue实现的前后端分离-在线旅游网站系统(项目 + 论文PPT)

项目介绍 本旅游网站系统采用的数据库是MYSQL &#xff0c;使用 JSP 技术开发&#xff0c;在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 技术选型 后端: SpringBoot Mybatis 数据库 : MyS…

机器学习:原理、应用与未来展望

第一章 是什么 机器学习&#xff08;Machine Learning&#xff09;是一门跨学科的学科&#xff0c;它使用计算机模拟或实现人类学习行为&#xff0c;通过不断地获取新的知识和技能&#xff0c;重新组织已有的知识结构&#xff0c;从而提高自身的性能。机器学习涉及多个学科&am…

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…

微信小程序中使用特使字体

1、首先下载字体文件 推荐几个常用下载字体的网站 https://font.chinaz.com/zhongwenziti.html https://www.hellofont.cn/ 2、转换字体 使用下面这个网站进行字体转换 https://transfonter.org/ 点击add fonts 按钮进行上传刚刚下载的字体文件选择formats格式&#xff1a;可…

【生活】程序人生之日常生活篇(附塑料分类标志 常用日常好物)

程序员生活指南之 【生活】程序人生之日常生活篇&#xff08;附塑料分类标志 & 常用日常好物&#xff09; 文章目录 1、关于本文2、居家相关2.1 蟑螂大战2.2 房间收纳&#xff08;寝室&#xff0c;租房&#xff0c;家里&#xff09;2.3 智能家居2.4 台灯选购2.5 塑料分类标…

教师观包括哪些内容是什么

站在讲台上的老师&#xff0c;除了教你知识&#xff0c;还有哪些不为人知的角色和面孔&#xff1f;让我们一起揭开教师观的神秘面纱&#xff0c;看看老师们的“千面人生”。 现代教师已不再是单纯的知识传递者&#xff0c;他们更像是学习旅程中的导游和指南针。他们引导学生发现…

嵌入式Qt 对话框及其类型 QDialog

一.对话框的概念 对话框是与用户进行简短交互的顶层窗口。 QDialog是Qt中所有对话框窗口的基类。 QDialog继承与QWidfet是一种容器类型的组件。 QDialog的意义&#xff1a; QDialog作为一种专业的交互窗口而存在。 QDialog不能作为子部部件嵌入其他容器中。 QDialog是定制…

反函数的理解|反函数到底“反”的是什么?什么是反函数?

理解 将 yex 函数图像连同整个坐标系绕着 yx 旋转 180 度&#xff0c;会变成下面的图像 只是把图像转了一下&#xff0c;函数还是那个函数&#xff0c;还是 yex &#xff0c;此时横轴变成了 y 轴&#xff0c;纵轴变成了 x 轴 根据习惯&#xff0c;一般把纵轴当作因变量、把横轴…

JavaScript实现的计时器效果

之前做过电商网站倒计时的效果&#xff0c;今天在倒计时的基础上&#xff0c;把代码修改了一下&#xff0c;改为计时器效果&#xff0c;实现了以下功能&#xff1a; 1.点击“开始”后&#xff0c;按秒计时且“开始”文字变为“停止”&#xff1b; 2.点击“停止”&#xff0c;计…

https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图

http 和 https 的区别 http 是明文传输&#xff0c;敏感信息容易在传输过程中被劫持https http加密&#xff0c;劫持了也无法解密 https 用到的加密方式 https 同时使用了对称加密和非对称加密&#xff0c;之所以没有全部使用非对称加密&#xff0c;是因为非对称加密的运算更加…

【设计模式】观察者模式及函数式编程的替代C++

本文介绍观察者模式以及使用函数式编程替代简单的策略模式。 观察者模式 观察者模式是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 当对象间存在一对多关系时&#…