自动化监控系统PrometheusGrafana

Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,数据采集→数据处理→数据存储→数据展示→告警

Prometheus 特点展开目录

  • 多维数据模型:由度量名称和键值对标识的时间序列数据
  • PromSQL: — 种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于 HTTP 的 pull 方式釆集时间序列数据
  • 推送时间序列数据通过 PushGateway 组件支持
  • 通过服务发现或静态配罝发现目标
  • 多种图形模式及仪表盘支持 (grafana)

Prometheus 组成与架构展

在这里插入图片描述

名称说明
Prometheus Server收集指标和存储时间序列数据,并提供查询接口
Push Gateway短期存储指标数据,主要用于临时性任务
Exporters采集已有的三方服务监控指标并暴露 metrics
Alertmanager告警
Web UI简单的 WEB 控制台

集成了数据的采集,处理,存储,展示,告警一系列流程都已经具备了

数据模型

Prometheus 将所有数据存储为时间序列,具有相同度量名称以及标签属于同个指标,也就是说 Prometheus 从数据源拿到数据之后都会存到内置的 TSDB 中,这里存储的就是时间序列数据,它存储的数据会有一个度量名称,譬如你现在监控一个 nginx,首先你要给他起个名字,这个名称也就是度量名,还会有 N 个标签,你可以理解名称为表名,标签为字段,所以,每个时间序列都由度量标准名称和一组键值对 (也称为标签) 唯一标识。
时间序列的格式是这样的,
< metricename > { < labelname >=< labelvalue >,…}
metrice name 指的就是度量标准名称,label name 也就是标签名,这个标签可以有多个,例子
jvm_memory_max_bytes{area="heap",id="Eden Space",}
这个度量名称为 jvm_memory_max_bytes,后面是两个标签,和他们各对应的值,当然你还可以继续指定标签,你指定的标签越多查询的维度就越多。

指标类型

类型名称说明
Counter递增计数器,适合收集接口请求次数
Guage可以任意变化的数值,适用 CPU 使用率
Summary与 Histogram 类型类似

任务和实例展开目录

实例指的就是你可以抓取的目标target,这个会在 Prometheus 配置文件中体现,任务是具有相同目标的实例集合,你可以理解为是一个组(比如,订单服务多台实例机器,可以放入一个任务里,分多个实例target抓取)

Prometheus 部署

借助docker来安装,新建目录docker-monitor,在里面创建文件docker-compose.yml,内容如下:

version: "3"
services:prometheus:image: prom/prometheus:v2.4.3container_name: 'prometheus'volumes:- ./prometheus/:/etc/prometheus/    #映射prometheus的配置文件- /etc/localtime:/etc/localtime:ro  #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据ports:- '9090:9090'

监控web应用性能指标

在docker-monitor目录下新增prometheus目录,在里面创建prometheus配置文件prometheus.yml,内容如下:

global:  #全局配置scrape_interval:   15s  #全局定时任务抓取性能数据间隔scrape_configs:  #抓取性能数据任务配置
- job_name:       'mall-order'  #抓取订单服务性能指标数据任务,一个job下可以配置多个抓紧的targets,比如订单服务多个实例机器scrape_interval: 10s  #每10s抓取一次metrics_path: '/actuator/prometheus'  #抓取的数据urlstatic_configs:- targets: ['192.168.31.60:8844']  #抓取的服务器地址labels:application: 'mall-order-label'  #抓取任务标签#- targets: ['192.168.31.60:8844']  #依次向下加   #  labels:#    application: 'mall-order-label'  #抓取任务标签- job_name: 'prometheus'  #抓取prometheus自身性能指标数据任务scrape_interval: 5sstatic_configs:- targets: ['localhost:9090']

在docker-monitor目录下执行如下命令启动prometheus

docker-compose up -d

在浏览器访问prometheus:http://192.168.31.60:9090,如下图所示:
在这里插入图片描述
点击Status下拉,选中Targets,界面如下:
在这里插入图片描述
这里显示了在prometheus里配置的两个抓取任务,不过 mall-order任务是失败的,state是down,接下来我们需要配置下 mall-order服务才能让prometheus抓取数据。
首先需要在tulingmall-order服务下增加pom依赖,如下:

<!-- 开启springboot的应用监控 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 增加prometheus整合 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

还需要在 mall-order服务的配置文件里增加开启springboot admin监控的配置,如下:

management: #开启SpringBoot Admin的监控endpoints:promethus:enable: trueweb:exposure:include: '*'endpoint:health:show-details: always

重启 mall-order服务,刷新prometheus页面,如下所示:
在这里插入图片描述
点击 mall-order下面的prometheus链接:http://192.168.31.60:8844/actuator/prometheus,会打开order服务对外暴露的性能指标数据,如下图:
在这里插入图片描述
拿其中一个指标举例:jvm_threads_states_threads{state=“runnable”,} 13.0,这代表jvm_threads_states_threads这个度量指标,其中state等于runnable的数据有13条
我们点prometheus页面的Graph链接,进入指标查询页面可以查询相关指标,如下:
在这里插入图片描述
将度量指标输入查询框,点击Execute按钮,如下:
在这里插入图片描述
点击Execute按钮下的Graph链接可以查看指标对应的图标,如下:
在这里插入图片描述
以上是prometheus自带的指标查询界面,但是太简陋,一般我们都是使用grafana图形展示工具配合prometheus一起使用

Grafana 部署

先用docker来安装下grafana,在上面的docker-compose.yml文件里加入grafana的安装配置,如下所示:

version: "3"
services:prometheus:image: prom/prometheus:v2.4.3container_name: 'prometheus'volumes:- ./prometheus/:/etc/prometheus/    #映射prometheus的配置文件- /etc/localtime:/etc/localtime:ro  #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据ports:- '9090:9090'grafana:  image: grafana/grafana:5.2.4container_name: 'grafana'ports:  - '3000:3000'volumes: - ./grafana/config/grafana.ini:/etc/grafana/grafana.ini  #grafana报警邮件配置- ./grafana/provisioning/:/etc/grafana/provisioning/  #配置grafana的prometheus数据源- /etc/localtime:/etc/localtime:roenv_file:- ./grafana/config.monitoring  #grafana登录配置depends_on:- prometheus  #grafana需要在prometheus之后启动

在docker-monitor目录下新增grafana目录,在里面创建文件config.monitoring,内容如下:

GF_SECURITY_ADMIN_PASSWORD=password  #grafana管理界面的登录用户密码,用户名是admin
GF_USERS_ALLOW_SIGN_UP=false  #grafana管理界面是否允许注册,默认不允许

在grafana目录下创建目录provisioning,在里面创建datasources目录,在datasources目录里新建文件datasource.yml,内容如下:

# config file version
apiVersion: 1deleteDatasources:  #如果之前存在name为Prometheus,orgId为1的数据源先删除
- name: PrometheusorgId: 1datasources:  #配置Prometheus的数据源
- name: Prometheustype: prometheusaccess: proxyorgId: 1url: http://prometheus:9090  #在相同的docker compose下,可以直接用prometheus服务名直接访问basicAuth: falseisDefault: trueversion: 1editable: true

在grafana目录下创建目录config,在里面创建文件grafana.ini,内容如下:

#################################### SMTP / Emailing ##########################
# 配置邮件服务器
[smtp]
enabled = true
# 发件服务器
host = smtp.qq.com:465
# smtp账号
user = 135*****20@qq.com
# smtp 授权码
password = fyjucfwgwjadgfdj
# 发信邮箱
from_address = 135*****20@qq.com
# 发信人
from_name = yuyang

授权码在qq邮箱设置中获取
在这里插入图片描述

用docker compose启动grafana,访问grafana页面:http://192.168.31.60:3000,用户名为admin,密码为password,如下:
在这里插入图片描述
登录进去首页如下:
在这里插入图片描述
点击左边的加号并import一个我们事先准备好的可视化指标文件web-dashboard.json(文件在本节课的课程资料里,都是些运维的指标,网上可以找现成的)
在这里插入图片描述
导入web-dashboard.json后在页面上选择Prometheus,点击import按钮之后页面显示如下(有可能没有任何数据):
在这里插入图片描述

写一个监控指标报警示例,比如系统报错5XX达到一定程度就报警发邮件通知:

点击Errors面板选择Edit,进入到Errors指标的详细面板,如下:
在这里插入图片描述
点击下图所示新增报警渠道:
在这里插入图片描述
然后选择邮件报警,也可以选择webhook方式配置一个报警通知的http调用接口,这个可以间接实现所有的通知方式,如下:
在这里插入图片描述
最后点击save按钮保存
进入Errors详细页面,配置alert报警,有如下几个地方需要配置,如图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
报警邮件如下所示:

在这里插入图片描述

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

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

相关文章

PyCharm中使用matplotlib.pyplot.show()报错MatplotlibDeprecationWarning的解决方案

其实这只是一个警告&#xff0c;忽略也可。 一、控制台输出 MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later. MatplotlibD…

Obsidian配置

插件 1&#xff1a;Annotator pdf批注插件&#xff0c;使用方法&#xff1a;新建一个markdown文件&#xff0c;在文件的头部必须时开头添加以下内容&#xff1a; --- annotation-target: xxx.pdf ---2&#xff1a;Hidden Folder 用正则表达式隐藏文件夹的&#xff0c;我的设…

下载HTMLTestRunner并修改

目录 一. 下载HTMLTestRunner 二. 修改HTMLTestRunner 1. 修改内容 2. 修改原因 一. 下载HTMLTestRunner 下载报告模板地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载模块&#xff1a; 二. 修改HTMLTestRunner 将修改后的模块放到python安装目录下的..…

【C++】- set和map的具体使用(multiset和multimap的介绍)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

【Python 实战】---- 实现批量图片的切割

1. 需求场景 在实际开发中&#xff0c;我们会遇到一种很无聊&#xff0c;但是又必须实现的需求&#xff0c;就是比如协议、大量的宣传页面、大量的静态介绍页面、或者大量静态页面&#xff0c;但是页面高度很高&#xff0c;甚至高度可能会达到50000px&#xff0c;但是为了渲染…

vue知识点————插槽 slot

slot 插槽 在父组件中引用的子组件 在父组件中写入百度 可在子组件slot插槽中展示出 父组件 <template><div id"app"><child url"https://www.baidu.com">百度</child></div> </template><script> import chil…

解决golang无法下载依赖的奇葩问题

最近刚开始学习go&#xff0c;看了几个开源项目&#xff0c;遂下载好朋友的go开源项目&#xff0c;想着coding first&#xff0c;我得先跑起来&#xff0c;结果居然卡在依赖上。就像下图&#xff1a; 真的是头疼&#xff0c;反复执行 go mod tidy&#xff0c;发现本地库中也能下…

教你制作作业查询系统

嗨&#xff0c;各位老师们&#xff0c;今天我要给你们介绍一个超级方便的工具——易查分&#xff01;你知道吗&#xff0c;利用易查分&#xff0c;我们可以轻松制作一个便捷高效的作业查询系统哦&#xff01; 是不是想有个自己的分班or成绩查询页面&#xff1f;博主给老师们争取…

【操作系统】进程的状态

进程的五种状态 创建&#xff0c;就绪&#xff08;等待分配处理机CPU资源&#xff09;&#xff0c;执行&#xff0c;阻塞&#xff08;叫阻塞因为相对CPU来说它很慢&#xff0c;等待除CPU以外的资源&#xff0c;如I/O&#xff09;&#xff0c;终止。 创建好的进程放入就绪队列等…

前端--HTML

文章目录 HTML结构快速生成代码框架HTML常见标签 表格标签 编写简历信息 填写简历信息 Emmet 快捷键 HTML 特殊字符 一、HTML结构 1.认识HTML标签 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body> 标签名 (body) 放到 < > 中 大部分标…

centos安装flink,通过windows访问webui

1. 安装flink 1.1. flink的下载 通过flink官网下载flink安装包 https://flink.apache.org/ 下载安装包 1.2 flink在centos上的安装 将下载好的flink-1.17.1-bin-scala_2.12.tgz安装包放到centos目录下 解压文件&#xff1a; [rootlocalhost ~]# tar -zxvf flink-1.17.…