简介

Micrometer/Prometheus/Grafana体系是当前最成熟的低成本Java监控解决方案,而且通过其他的Prometheus exporter,还可以进行诸如我们可能需要的Windows操作系统监控/Mysql/Kakfka等常用组件的监控、

Prometheus

Prometheus(普罗米修斯)是一套比较完备的监控报警系统,其主要架构设计如图:

主要是由以下组件构成:

  • Prometheus server:服务中心,主要负责拉取和存储时序书库(Prometheus有自带的时序数据库)
  • Client Libraries:客户端库,主要用于和具体的服务进行集成,采集监控数据,例如Micrometer
  • Push gateway:另外一种数据push的采集方式(Prometheus默认使用pull的方式主动采集应用数据),用于适配一些没有长期稳定的进程的服务
  • Exporter:用于针对某些特定服务的数据采集工具,例如mysql/kafka/HA等
  • Alert Manager:Prometheus的监控告警工具,主要通过webhook和其他告警系统进行集成告警,能够进行告警规则的配置
  • 其他工具

同时,Prometheus也有一套自己的查询语法,用于已经采集的数据的结果查询,具体可以参考:

https://prometheus.io/docs/prometheus/latest/querying/basics/

或者中文翻译: https://www.jianshu.com/p/3bdc4cfa08da

Micrometer

Micrometer是Java的指标监控工具,而且建立了一套独立的数据模型,能够和大部分常见的监控工具进行整合,简单快速的建立指标监控体系

Micrometer提供了包括Timer , Counter , Gauge ,

DistributionSummary , LongTaskTimer , FunctionCounter , FunctionTimer , TimeGauge等不同的监控工具,以适应不同的场景,例如Timer用于监控一个操作的消耗时间,并能在这个基础上统计例如minx/max/avg/tp等指标

Grafana

Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。

Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。

其工作模式主要分为三步:

  • 设置数据源:可视化的基础数据来源,例如从数据库/Prometheus/ElasticSearch
  • 配置数据抽取方式:例如通过数据库的SQL/Prometheus的ProQuery等进行数据查询
  • 数据面板配置:Grafana支持多样的数据呈现方式,例如折线图/直方图/热力图等等,通过简单的配置,即可通过多样化的数据呈现方式去展示监控数据

使用流程

Prometheus部署

写在前面:默认的访问地址 http://127.0.0.1:9090

PS: 下方有docker方式部署

开源的Prometheus是单节点模式,部署非常简单,这里以Windows下为例,首先在Prometheus官方下载文件包,例如当前最新的Windows64版本为:

https://github.com/prometheus/prometheus

下载完毕后解压其目录结构如下:

data为Prometheus是自带时序数据库持久化的目录,pometheus.yml为整个Prometheus的配置文件,pometheus.exe为服务启动应用,默认可以直接启动,这个时候Prometheus会使用最基本的默认配置,运行在本地9090端口,采集自身的运行的数据并持久化到时序数据

prometheus.yml的配置规则参考文档:

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

当Prometheus启动完毕后,本地浏览器访问

http://127.0.0.1:9090即可查看到Prometheus的查询工具

值得注意的是,如果要启用restful接口支持热加载配置,需要在启动的命令行增加参数: --web.enable-lifecycle ,这在生产环境中不停机更新非常重要

例如:cmd下执行:prometheus.exe --web.enable-lifecycle

CentOS下安装

wget https://github.com/prometheus/prometheus/releases/download/v2.22.0/prometheus-2.22.0.linux-amd64.tar.gz

tar -zxvf prometheus-2.5.0.linux-amd64.tar.gz

// --config.file="prometheus/prometheus.yml": 指定配置文件,不写为默认
nohup /dimples/soft/prometheus-2.22.0/prometheus --config.file="/dimples/soft/prometheus-2.22.0/prometheus.yml" & // 关闭
ps -aux | grep prometheus
kill -s 9 24204(上一步查询出来的pid)

查看Prometheus监控的应用(Prometheus启动时,默认监控的是自己)

此时我们可以看到,在Prometheus中只有一个自己的服务被监控了,那么我们怎么去将自己的服务加入监控呢?请往下看。

Grafana部署

写在前面:默认的访问地址 http://127.0.0.1:3000/login

Grafana的部署和Prometheus的部署类似,也非常简单,这里也以Windows为例,首先需要从官方网站下载最新的安装包:

https://grafana.com/grafana/download

这里以zip包为例,解压后目录结构为:

配置文件路径为 conf/defaults.ini,这里可以修改默认端口,配置持久化方式,默认用户名和密码

启动执行文件为 bin/grafana-server.exe,双击即可启动。(默认端口为3000,默认用户名和密码均为admin)

启动后浏览器访问即可登录使用,http://127.0.0.1:3000/login 第一次使用会强制修改密码

CentOS下安装

wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm
yum install -y grafana-6.4.4-1.x86_64.rpm
yum clean all // 安装后需要手动启动
service grafana-server start service grafana-server stop
  • 配置文件位于/etc/grafana/grafana.ini,这里暂时保持默认配置即可
  • 设置开机启动
systemctl enable grafana-server
systemctl start grafana-server

配置第一个监控面板 - Prometheus

当Prometheus和Grafana部署完成之后,默认Prometheus就已经在开始采集自身的监控数据,所以我们就可以开始配置Prometheus的监控界面,首先需要登录Grafana,在左侧的设置界面配置数据源:

点击 Add data source添加第一个数据源,由于我们这里主要是以Prometheus作为数据源,所以直接选择Prometheus即可:

Name为这个数据源的别称,用于在多个数据源的时候进行区分,url为Prometheus的restful接口地址,例如这里就为刚刚部署完毕的本地Prometheus服务,最后点击最下的Save&Test即可添加成功,然后点击back返回上一步即可查看到已经添加的数据源:

添加完毕数据源之后,则可以开始进行监控面板的设计了,这里考虑到监控面板设计有一定的门槛,所以建议直接使用官方提供的监控面板模板,具体可以从官方的模板仓库下载:https://grafana.com/grafana/dashboards

例如我们这里需要进行Prometheus本身的监控,我们搜索 Prometheus stat:

此处可以选择编号 1 的编号导入或者使用编号 2 ,下载JSON文件使用,此处我们使用下载json文件的方式

下载完毕之后,则可以导入到Grafana:

配置panel,有三种方式(编号 1、2、3 任选一种):上传JOSN文件、填写ID(然后点击Load)、填写JSON配置内容(然后点击Load),此处我们选择方便的填写ID的方式,然后点击对应框后的Load按钮进入下一步

点击import之前需要配置别名和选择一个数据源,所以在import之前必须至少配置一个数据源,点击import后即可看到监控窗口

到此,我们已经学会了启动Grafana和Prometheus,同时学会了配置一个简单的监控服务,即监控Prometheus本身。我们已经了解到其工作的一个基础的流程,以后我们就要去配置监控 Java服务、MySQL、Redis数据库等各种复杂的服务

监控第一个Java程序

在上面们简单的将Prometheus采集的对于自身的数据通过Grafana进行了展示,而我们的核心是通过Prometheus去采集Java应用的数据,这就需要针对前面提到的通过Prometheus的pull模式定时去拉取SpringBoot通过Actuator暴露的Micrometer采集的监控指标

  • 首先需要的做的是完成Java应用的Micrometer集成,访问actuator/prometheus或者/prometheus能够正常的返回Micrometer采集的数据指标
  • 进入部署Prometheus的文件目录,打prometheus.yml进行拉取节点的配置,这里以我自己部署的java应用为例,在配置文件的scrape_configs节点添加针对java的配置

SpringBoot 集成Micrometer

Micrometer的集成主要依托于SpringBoot的Actuator,Micrometer会默认采集JVM以及一些其他常用组件(例如HikariCP/Http/Tomcat/Logback)的各项指标,然后通过Actuator输出,供Prometheus pull进行数据采集

由于历史的原因,Micrometer的Java集成和SpringBoot版本有关

SpringBoot 2.x

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

激活配置:

management.endpoints.web.exposure.include=prometheus,health
management.metrics.tags.application=${spring.application.name}
spring.application.name= demo-project

SpringBoot 1.5.x

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-spring-legacy</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.0.3</version>
</dependency>

必须配置:

spring.application.name=dimples-demo-project
management.security.enabled=false
spring.metrics.export.includes=health,prometheus

公共配置

@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags(@Value("${spring.application.name}") String application) {
return registry -> registry.config().commonTags("application", application);
}

激活后启动程序,通过IDEA查看是否已经包含/actuator/prometheus端点:

访问

http://${hostname}{port}/actuator/prometheus (2.x)

或者 http://${hostname}{port}/prometheus (1.5.x)

配置 Prometheus 监控

打开 Prometheus 的 prometheus.yml 文件,这里我们配置一个Java服务

global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093 rule_files:
# - "first_rules.yml"
# - "second_rules.yml" scrape_configs:
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
static_configs:
- targets: ['localhost:9090']
- job_name: 'demo'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['127.0.0.1:8080'] # []表示数组,我们可以配置多个服务

修改配置并保存之后,通过Prometheus的restful接口热加载配置:

http://localhost:9090/-/reload

请求接口后返回 Lifecycle API is not enabled. 那么就是启动的时候没有开启热更新配置,需要在启动的命令行增加参数: --web.enable-lifecycle

这里返回200表示执行成功,否则会提示错误信息(这里需要post/put请求,所以这里使用了postman来发起请求,如果Linux可以使用 curl -X POST http://localhost:9090/-/reload发起请求

更新指令执行成功之后,可以在web界面进行确认:

如果想验证是否确实采集到数据,可以返回首页的查询界面:

随意选择一个jvm指标,点击execute即可查询对应的指标数据:

可以看到对应的指标已经有数据采集到,然后我们则可以到grafana进行监控面板的配置,同样我们先下载一个面板模板:

导入之后选择之前配置的数据源之后即可看到监控面板:

到此一个简易的java监控则已经完成

配置服务器监控

这里以监控Java程序为例。需要使用到Windows-exporter的插件来队windows操作系统进行数据采集,首先需要下载最新的exporter:

https://github.com/prometheus-community/windows_exporter/releases

例如我这里下载的是 https://github.com/prometheus-community/windows_exporter/releases/download/v0.14.0/windows_exporter-0.14.0-amd64.msi

安装完毕后,浏览器访问: http://localhost:9182/metrics 即可查看到采集的数据指标,在windows的服务中也能看到有windows_exporter启动:

然后我们需要在Prometheus中配置采集节点,参考Java的配置模式:

同样的需要刷新加载 http://localhost:9090/-/reload

同样选择一个Grafana模板,导入即可查看到具体的监控信息:

本节只是简单的整合 Prometheus + Grafana 在监控Java服务方面的使用,但是在我们的微服务业务中,常常还有包括 MySQL、Redis、docker、微服务端点等应用,同时应用发生异常时,还需要发送预警短信或者邮件。那么这些功能如何实现呢?请继续阅读第二章 -《Prometheus + Grafana (2) mysql、redis、Docker容器、服务端点以及预警》。


附录 - 自定义监控面板

Grafana提供不同样式的基础数据层呈现样式,大多数情况下默认的模板即可满足我们的日常需求,如果我们需要进行自定义的面板设计,也可以非常简单的完成的目标,这里建议从已经存在的模板做参考开始,例如JVM的监控面板,随机找一个面板:

选择edit即可以查看是如何配置才能达到当前的效果:

需要配置的内容有:

  • 数据源,例如这里选择的是Prometheus
  • Metrics:查询表达式,例如这里是Prometheus的表达式,如果是用数据库做数据源,这里应该是SQL
  • Legend:数据标题,这里可以用表达式类似{{name}}这样的格式
  • Visualization:可视化样式,这里是Graph,也就是折线图,也可以选择其他的样例其他的一些配置可以自己多尝试看看效果

Prometheus + Grafana (1) 监控的更多相关文章

  1. Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警

    Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警 一.添加依赖 1.1 Actuator 的 /prometheus端点 二.Prometheus 配置 部 ...

  2. Prometheus+Grafana企业监控系统

    Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...

  3. go-zero docker-compose 搭建课件服务(七):prometheus+grafana服务监控

    0.转载 go-zero docker-compose 搭建课件服务(七):prometheus+grafana服务监控 0.1源码地址 https://github.com/liuyuede123/ ...

  4. Prometheus+Grafana搭建监控系统

    之前在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题.这样显得开发很被动.所以是时候搭建一套监控系统了. 由于是业余时间自己捯饬,所以神马业务层面的监 ...

  5. prometheus+grafana实现监控过程的整体流程

    prometheus安装较为简单,下面会省略安装步骤: 一.服务器启动 Prometheus启动 ./prometheus --config.file=prometheus.yml Grafana启动 ...

  6. Prometheus+Grafana+kafka_exporter监控kafka

    Prometheus+Grafana+kafka_exporter搭建监控系统监控kafka 一.Prometheus+Grafana+kafka_exporter搭建监控系统监控kafka 1.1K ...

  7. 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)

    目的:给我们项目的微服务应用都加上监控告警.在这之前你需要将 Spring Boot Actuator引入 本章主要介绍 如何集成监控告警系统Prometheus 和图形化界面Grafana 如何自定 ...

  8. k8s实战之部署Prometheus+Grafana可视化监控告警平台

    写在前面 之前部署web网站的时候,架构图中有一环节是监控部分,并且搭建一套有效的监控平台对于运维来说非常之重要,只有这样才能更有效率的保证我们的服务器和服务的稳定运行,常见的开源监控软件有好几种,如 ...

  9. Python3.5+SQL+Prometheus+Grafana报表/监控

    参考资料: pymysql 单独获取表的栏位名称 pymysql返回数据为字典形式(key:value--列:值)   行列结合,作为prometheus_client的输出. 话不多说,直接上脚本. ...

  10. Kubernetes prometheus+grafana k8s 监控

    参考: https://www.cnblogs.com/terrycy/p/10058944.html https://www.cnblogs.com/weiBlog/p/10629966.html ...

随机推荐

  1. 基于SLS构建RDS审计合规监控

    简介: 数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要. 背景 数据库是企业业务 ...

  2. [FAQ] Git 修改最后一次的提交人和提交时间 ?

    $ date -R Tue, 21 Mar 2021 21:08:58 +0800 $ git commit --amend  --author="xxx <xxx@email.com ...

  3. 实用的 Bash 快捷键

    前端也有需要运维的时候,这时我们不可避免需要登录 Linux 服务器,并在 Bash 终端输入一些命令,当需要对输入的命令进行一些操作时,比如快速移动光标位置或快速删除字符,如果只会用方向键和退格键, ...

  4. win10 uwp 使用 XamlTreeDump 获取 XAML 树元素内容

    本文来安利大家 XamlTreeDump 库,通过这个库可以将 XAML 树上的元素转换为 json 字符串,可以用来进行 UI 单元测试 开始之前先通过 NuGet 工具安装 XamlTreeDum ...

  5. 2019-10-28-dotnet-代码调试方法

    title author date CreateTime categories dotnet 代码调试方法 lindexi 2019-10-28 08:50:11 +0800 2019-6-5 9:4 ...

  6. three.js实现相机碰撞,相机不穿墙壁、物体

    大家好,本文实现了相机碰撞检测,使相机不穿墙壁.物体,并给出了思路和代码,感谢大家~ 关键词:数字孪生.three.js.Web3D.WebGL.相机碰撞.游戏相机 我正在承接Web3D数字孪生项目, ...

  7. await this.$nextTick()和this.$nextTick(callback)有什么区别?记一次bug调试

    背景 需要实现一个需求,一个小区业务详情页面,在左侧菜单栏切换了小区后,详情页跟着切换. 这个详情页面是根据url上的/:id来确定小区id的,所以切换了小区后,应该切换路由. 于是这样实现: wat ...

  8. uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈

    原创研发uniapp+vue3+pinia2跨三端仿微信app聊天模板Uniapp-Wechat. uni-vue3-wchat基于uni-app+vue3+pinia2+uni-ui+uv-ui等技 ...

  9. 用Vue仿了一个类似抖音的App

    大家好,我是 Java陈序员. 今天,给大家介绍一个基于 Vue3 实现的高仿抖音开源项目. 关注微信公众号:[Java陈序员],获取开源项目分享.AI副业分享.超200本经典计算机电子书籍等. 项目 ...

  10. 快速了解Django:核心概念解析与实践指南

    title: 快速了解Django:核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 ta ...