首页 > 其他分享 >使用OpenTelemetry进行监控

使用OpenTelemetry进行监控

时间:2024-03-02 17:02:42浏览次数:22  
标签:alertmanager -- Prometheus OpenTelemetry prometheus 监控 使用 docker

工具介绍

注意:该部分介绍摘抄自: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访问页面
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进行安装到服务器中,可以参考仓库: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: '[email protected]'

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命令去生成容器,示例如下
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
如果需要监控其他内容,也可以模仿着进行修改。

标签:alertmanager,--,Prometheus,OpenTelemetry,prometheus,监控,使用,docker
From: https://www.cnblogs.com/azrng/p/18048851

相关文章

  • log4net使用随笔
    问题背景使用log4net想根据不同的配置,根据业务场景自定义日志文件的写入此文解决的问题怎么开启log4net的调试日志信息怎么全局配置日志信息解决思路配置文件中增加一个appender,更换规则,查看是否能够做到写入指定的配置文件常见问题增加配置文件后,一直只使用默认......
  • Git 使用以及常用命令
    1.Git常用命令192:Desktopfutantan$gitconfig--globaluser.namedandan_claire192:[email protected]:Downloadsfutantan$cdgit-demo/gitadd文件名(到暂存区)192:git-demofutantan$gitinit###初始化......
  • 使用 Docker 部署 Nacos 并配置 MySQL 数据源
    前言在安装Nacos之前,请确保你已经准备好了一个运行中的MySQL数据库。本教程将指导您如何使用Docker在单机模式下部署Nacos,并将其数据持久化到MySQL中。步骤一:拉取Nacos镜像拉取最新版本的NacosServer镜像,也可以指定特定版本:dockerpullnacos/nacos-server如果你......
  • Go语言的100个错误使用场景(55-60)|并发基础
    目录前言8.并发基础8.1混淆并发与并行的概念(#55)8.2认为并发总是更快(#56)8.3分不清何时使用互斥锁或channel(#57)8.4不理解竞态问题(#58)8.5不了解工作负载类型对并发性能的影响(#59)8.6不懂得使用Gocontexts(#60)小结前言大家好,这里是白泽。《Go语言的100个错误以及如何避免》......
  • 使用developer API压缩
    key/***中转压缩url*/publicfinalstaticStringTINIFY_URL="https://api.tinify.com/shrink";/***tinifyapiKey*/publicfinalstaticStringAPI_KET="xxxxx"; controller@PostMapping("/u......
  • IFS分隔符的使用
     替换换行符IFS和echo一起配合才有作用#!/bin/bashecho$IFS|od-bold_if=$IFSIFS=$'\n'echo`lsmod|awk'{print$1}'`IFS=$old_ifecho$IFS|od-b结果00000000120000001Modulebinfmt_miscxt_LOGnf_log_syslogxt_setip6t_rpfilterip6table_natip......
  • 笔记:Git学习之应用场景和使用经验
    目标:整理Git工具的应用场景和使用经验一、开发环境Git是代码版本控制工具;Github是代码托管平台。工具组合:VSCode+Git需要安装的软件:vscode、Git其中vscode需要安装的插件:GitLens、GitHistory二、应用场景工作场景:嵌入式开发,多人本地使用三、使用总结基础操作,参考廖雪峰的Git教......
  • C++类开发的第六篇(虚拟继承实现原理和cl命令的使用的bug修复)
    Class_memory接上一篇末尾虚拟继承的简单介绍之后,这篇来详细讲一下这个内存大小是怎么分配的。使用clcl是MicrosoftVisualStudio中的C/C++编译器命令。通过在命令行中键入cl命令,可以调用VisualStudio的编译器进行编译操作。cl命令提供了各种选项和参数,用于指定源......
  • STM32OLED使用
    STM32OLED使用.mdSTM32OLED使用市面上大部分OLED使用SSD1306作为主控芯片,在这里使用STM32F103作为主控芯片,使用IIC总线点亮OLED。1.IIC设置以及初始化共需要引用4个头文件“stm32f10x_rcc.h”,“stm32f10x_gpio.h”,“stm32f10x_i2c.h”,“string.h”voidIIC_init(){RCC_A......
  • 自定义 DataLoader 时应使用 Unix 系统
    自定义Dataset类PyTorch允许自定义Dataset类,并由此获得DataLoader,能方便训练时获得batch:fromtorch.utils.dataimportDataLoader,Datasetimporth5pyimportosclassRadarDataset(Dataset):def__init__(self,directory):...def__len__(s......