使用OpenTelemetry进行监控
工具介绍
注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174
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项目准备
基于我的一个示例项目进行改造,项目地址:https://gitee.com/AZRNG/my-example ,为了演示一个基本的监控效果,监控的数据也只是请求,具体生产环境需要监控什么业务,这个看具体情况了,这里需要在原来的项目基础上需要安装以下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访问页面
然后将该示例项目使用docker部署到服务器上 ,如果要使用该示例项目,记得切换分支到develop,将项目拉取到服务器,然后进入项目目录,执行命令去生成容器
sudo docker-compose up -d
部署成功截图如下
访问地址 http://192.168.82.163:8001/metrics
安装监控和可视化程序
准备一个服务器,提前安装好了docker以及docker-compose程序,版本示例如下
关于Prometheus和Grafana可以通过docker进行安装到服务器中,可以参考仓库:https://gitee.com/AZRNG/common-docker-yaml
安装Prometheus
因为这里我只是用于做demo演示效果,所以我并没有取考虑挂载的问题,生产环境使用记得挂载数据
version: '3'
services:
prometheus: # 访问:http://localhost:9090/targets
image: prom/prometheus:v2.37.6
container_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:/prometheus
ports:
- 9090:9090
links:
- alertmanager:alertmanager
alertmanager: # 告警服务
image: prom/alertmanager:v0.25.0
container_name: alertmanager
ports:
- 9093:9093
volumes:
# - /etc/localtime:/etc/localtime:ro
- ./config/prometheus/:/etc/alertmanager/
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager'
关于prometheus.yml内容如下
# 全局配置
global:
scrape_interval: 15s
evaluation_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: dev
role: docker
alertmanager.yml文件,我并没有做配置,暂时搞了一个默认的
global:
resolve_timeout: 5m
smtp_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: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'test-mails'
receivers:
- name: 'test-mails'
email_configs:
- to: 'scottcho@qq.com'
rule.yml文件内容如下
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
serverity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
然后就可以运行docker-compose命令去生成容器,示例如下
然后访问Ip地址加端口访问页面,比如http://192.168.81.139:9090/
打开这个界面就说明安装好了,这个时候我们看下 http://192.168.81.139:9090/targets?search= 页面
这个node报错是因为这个地址是无效了,那么修改为真是.NetCore的服务地址,修改配置文件然后重新启动
重启后界面显示如下
安装Granfana
这里直接使用docker来安装grafana
sudo docker run --name grafana -d -p 8000:3000 grafana/grafana
然后访问地址 ip+ 8000,默认账号密码为admin/admin
添加数据源
填写prometheus地址
导入仪表盘
创建文件夹用来存放我们本地的要导入的文件
想要在Grafana中进行数据的展示,需要导入dashborards模板,本文的模板我是从微软仓库找到的,地址为:https://github.com/dotnet/aspire/tree/main/src/Grafana
分别点进去下载这两个仪表盘对应的的json文件即可,也可以去我common-docker-yaml仓库中下载
然后导入json文件
导入aspnetcore.json文件,并选择我们的netcore文件夹以及选择刚刚我们创建的Prometheus数据源
导入aspnetcore-endpoint.json文件
这个时候我们就看到了好看的仪表盘
当我点击接口让其报错,那么就显示到界面上
如果需要监控其他内容,也可以模仿着进行修改。
使用OpenTelemetry进行监控的更多相关文章
- 手把手教你学Dapr - 2. 必须知道的概念
Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...
- OpenTelemetry - 云原生下可观测性的新标准
CNCF 简介 CNCF(Cloud Native Computing Foundation),中文为"云原生计算基金会",CNCF是Linux基金会旗下的基金会,可以理解为一个非 ...
- 当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?
OpenTelemetry 介绍 我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到 OpenTelemetry - 云原生下可观测性的新标准 深入研究 .NET 5 的开放式 ...
- 如何使用 HttpReports 监控 .NET Core 应用程序
简介 HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用. github:https: ...
- Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- Go微服务框架go-kratos实战05:分布式链路追踪 OpenTelemetry 使用
一.分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www. ...
- 基于 OpenTelemetry 的链路追踪
链路追踪的前世今生 分布式跟踪(也称为分布式请求跟踪)是一种用于分析和监控应用程序的方法,尤其是使用微服务架构构建的应用程序.分布式跟踪有助于精确定位故障发生的位置以及导致性能差的原因. 起源 链路追 ...
- 使用Monit监控本地进程
目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...
随机推荐
- js文件下载blob
使用axios文件下载 if (tableDataSource.selectedRowKeys.length > 0) { //本次请求你携带token axios.defaults.heade ...
- 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍
OpenIM文档方面的建设一直远远落后于开发, 也经常被开发者诟病,在接下来一周的时间里,我们重点补齐文档,让开发者更轻松接入.由于app sdk底层都是go来实现,所以本文先写一个模板和框架,在接下 ...
- Dubbo3应用开发—Dubbo注册中心引言
Dubbo注册中心引言 什么是Dubbo注册中心 Dubbo的注册中心,是Dubbo服务治理的⼀个重要的概念,他主要用于 RPC服务集群实例的管理. 注册中心的运行流程 使用注册中心的好处 可以有效的 ...
- .NET Core(C#) PadLeft和PadRight特定格式字符串长度补齐的方法和js中如何填充字符串
.NET Core(C#) 1、PadLeft和PadRight使用说明 两个方法都是对字符串格式化进行补齐填充,PadLeft是左边,而PadRight是右边 '1010'.PadLeft(10,' ...
- 【Jmeter】基础介绍-详细
最近做压测时使用到Jmeter,为什么用它,之前也做过部分压测,不是很系统,使用的是Apache Bench,虽然效率高,但是功能比较简单,不太适合本次压测场景,另外Jmeter能更好的利用压测机的多 ...
- Win32汇编:数组与标志位测试总结
整理复习汇编语言的知识点,以前在学习<Intel汇编语言程序设计 - 第五版>时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会 ...
- MD5算法:高效安全的数据完整性保障
摘要:在数字世界中,确保数据完整性和安全性至关重要.消息摘要算法就是一种用于实现这一目标的常用技术.其中,Message Digest Algorithm 5(MD5)算法因其高效性和安全性而受到广泛 ...
- 自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人
如今,大模型层出不穷,这为自然语言处理.计算机视觉.语音识别和其他领域的人工智能任务带来了重大的突破和进展.大模型通常指那些参数量庞大.层数深.拥有巨大的计算能力和数据训练集的模型. 但不能不承认的是 ...
- JVM(Java虚拟机)整理(二)
前言 上一篇内容:JVM(Java虚拟机)整理(一)https://www.cnblogs.com/xiegongzi/p/17994659 Java 内存模型(JMM) Java 内存模型引入 声明 ...
- mit6.824lab2D-Debug记录
1.死锁 要提交快照的时候由于没有人取走applyCh通道里面的东西,导致死锁. 具体解释: 2D的测试代码中在日志达到一定大小时会调用snapshot,该函数需要申请rf.mu这个互斥锁.而在提交普 ...