工具介绍

注意:该部分介绍摘抄自: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包

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

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

  1. services.AddOpenTelemetry()
  2. .WithMetrics(builder =>
  3. {
  4. builder.AddPrometheusExporter();
  5. builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");
  6. });

最后记得要使用服务

  1. app.MapPrometheusScrapingEndpoint();

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



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

  1. 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演示效果,所以我并没有取考虑挂载的问题,生产环境使用记得挂载数据

  1. version: '3'
  2. services:
  3. prometheus: # 访问:http://localhost:9090/targets
  4. image: prom/prometheus:v2.37.6
  5. container_name: prometheus
  6. command:
  7. - '--config.file=/etc/prometheus/prometheus.yml'
  8. - '--storage.tsdb.path=/prometheus'
  9. - '--web.console.libraries=/usr/share/prometheus/console_libraries'
  10. - '--web.console.templates=/usr/share/prometheus/consoles'
  11. - '--web.external-url=http://localhost:9090/'
  12. - '--web.enable-lifecycle'
  13. - '--storage.tsdb.retention=15d'
  14. volumes:
  15. #- /etc/localtime:/etc/localtime:ro
  16. - ./config/prometheus/:/etc/prometheus/
  17. #- ./data/prometheus:/prometheus
  18. ports:
  19. - 9090:9090
  20. links:
  21. - alertmanager:alertmanager
  22. alertmanager: # 告警服务
  23. image: prom/alertmanager:v0.25.0
  24. container_name: alertmanager
  25. ports:
  26. - 9093:9093
  27. volumes:
  28. # - /etc/localtime:/etc/localtime:ro
  29. - ./config/prometheus/:/etc/alertmanager/
  30. command:
  31. - '--config.file=/etc/alertmanager/alertmanager.yml'
  32. - '--storage.path=/alertmanager'

关于prometheus.yml内容如下

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

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

  1. global:
  2. resolve_timeout: 5m
  3. smtp_smarthost: 'xxx@xxx:587'
  4. smtp_from: 'zhaoysz@xxx'
  5. smtp_auth_username: 'xxx@xxx'
  6. smtp_auth_password: 'xxxx'
  7. smtp_require_tls: true
  8. route:
  9. group_by: ['alertname']
  10. group_wait: 10s
  11. group_interval: 10s
  12. repeat_interval: 1h
  13. receiver: 'test-mails'
  14. receivers:
  15. - name: 'test-mails'
  16. email_configs:
  17. - to: 'scottcho@qq.com'

rule.yml文件内容如下

  1. groups:
  2. - name: example
  3. rules:
  4. # Alert for any instance that is unreachable for >5 minutes.
  5. - alert: InstanceDown
  6. expr: up == 0
  7. for: 1m
  8. labels:
  9. serverity: page
  10. annotations:
  11. summary: "Instance {{ $labels.instance }} down"
  12. 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

  1. 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进行监控的更多相关文章

  1. 手把手教你学Dapr - 2. 必须知道的概念

    Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...

  2. OpenTelemetry - 云原生下可观测性的新标准

    CNCF 简介 CNCF(Cloud Native Computing Foundation),中文为"云原生计算基金会",CNCF是Linux基金会旗下的基金会,可以理解为一个非 ...

  3. 当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?

    OpenTelemetry 介绍 我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到 OpenTelemetry - 云原生下可观测性的新标准 深入研究 .NET 5 的开放式 ...

  4. 如何使用 HttpReports 监控 .NET Core 应用程序

    简介 HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用. github:https: ...

  5. Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  6. Sentry 开发者贡献指南 - SDK 开发(性能监控)

    内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...

  7. Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)

    内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...

  8. Go微服务框架go-kratos实战05:分布式链路追踪 OpenTelemetry 使用

    一.分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www. ...

  9. 基于 OpenTelemetry 的链路追踪

    链路追踪的前世今生 分布式跟踪(也称为分布式请求跟踪)是一种用于分析和监控应用程序的方法,尤其是使用微服务架构构建的应用程序.分布式跟踪有助于精确定位故障发生的位置以及导致性能差的原因. 起源 链路追 ...

  10. 使用Monit监控本地进程

    目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...

随机推荐

  1. [西湖论剑 2022]web部分题解(更新中ing

    [西湖论剑 2022]Node Magical Login 环境!启动!(ノへ ̄.) 这么一看好像弱口令啊,(不过西湖论剑题目怎么会这么简单,当时真的傻),那就bp抓包试一下(这里就不展示了,因为是展 ...

  2. 【K哥爬虫普法】大数据风控第一案:从魔蝎科技案件判决,看爬虫技术刑事边界

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  3. Loguru:Python 日志终极解决方案

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 日志的重要性 日志的作用非常重要,日志可以记录用户的操作.程序的异常,还可以为数据分析提供依据,日志的存在意义就是为了能够在程序 ...

  4. Unity的SpriteAtlas实践

    我的环境 Unity引擎版本:Unity2019.3.7f1 AssetBundles-Browser 于2021-1-14拉取,github上最后提交日期是2019-12-14,在本文简称:ABBr ...

  5. 在IntelliJ IDEA中,开发一个摸鱼看书插件

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/R8qvoSNyedVM95Ty8sbhgg 沉淀.分享.成长,让自己和他人都能 ...

  6. centos6.5安装MongoDB4.4.23

    前言 1.目前MongoDB最新稳定版本是:6.0.8 2.MongoDB 5+和6+版本已不支持centos6.2+系统,参考https://docs.mongoing.com/install-mo ...

  7. 仅1cm厚!华硕发布全球最薄13.3英寸笔记本

    近日,华硕发布了新款Zenbook S 13 OLED,官方称其为世界最纤薄的13.3英寸OLED笔记本电脑. 据悉,这款电脑的厚度仅有1cm,重量也仅有1kg,相较其他同尺寸的笔记本,确实更加轻薄. ...

  8. Dijkstra实现单源最短路

    Dijkstra算法求单源最短路 Dijkstra算法应用于求一个给定图的单个源点到其他各顶点的最短路.其中应用Dijkstra算法的图应满足如下条件 图中没有负权边 有向或者无向图都可以 图中若有自 ...

  9. HBase Shell将命令执行结果导出到文件

    1.将Hbase shell执行结果输出到文件 echo "scan 'test'" | hbase shell>my.txt 2.查看表的region数 list_regi ...

  10. SP10050 POWTOW - Power Tower City 题解

    题目传送门 前置知识 扩展欧拉定理 解法 本题幂塔是有限层的,这里与 luogu P4139 上帝与集合的正确用法 中的无限层幂塔不同,故需要在到达递归边界 \(n+1\) 时进行特殊处理,对于处理 ...