简介

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. 阿里云 EMR Delta Lake 在流利说数据接入中的架构和实践

    简介: 为了消灭数据孤岛,企业往往会把各个组织的数据都接入到数据湖以提供统一的查询或分析.本文将介绍流利说当前数据接入的整个过程,期间遇到的挑战,以及delta在数据接入中产生的价值. 背景 流利说目 ...

  2. Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞

    ​简介:Dataphin,用中台方法论打造企业级好数据.Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著 ...

  3. 揭秘!阿里实时数仓分布式事务Scale Out设计

    简介: Hybrid Transaction Analytical Processing(HTAP) 是著名信息技术咨询与分析公司Gartner在2014年提出的一个新的数据库系统定义,特指一类兼具O ...

  4. 漫画 | 一口气搞懂 Serverless !

    ​简介: 第二届云原生编程挑战赛为热爱技术的年轻人提供一个挑战世界级技术问题的舞台,希望用技术为全社会创造更大价值. 作者 | 刘欣 呃,我可能是别人眼中所说的不用奋斗的一代. 大家喜欢听的什么多姿多 ...

  5. dotnet C# 基于 INotifyPropertyChanged 实现一个 CLR 属性绑定辅助类

    习惯了 WPF 或 UWP 等的依赖属性的绑定机制之后,我在写 CLR 属性时,有时也期望将两个 CLR 属性给绑定到一起.在 dotnet 里,提供了 System.ComponentModel.I ...

  6. WPF 应用启动过程同时启动多个 UI 线程且访问 ContentPresenter 可能让多个 UI 线程互等

    在应用启动过程里,除了主 UI 线程之外,如果还多启动了新的 UI 线程,且此新的 UI 线程碰到 ContentPresenter 类型,那么将可能存在让新的 UI 线程和主 UI 线程互等.这是多 ...

  7. WPF 下拉框选项做鼠标 Hover 预览效果

    本文来告诉大家如何在 WPF 中,在 下拉框 ComboBox 里面,鼠标移动到 ComboBoxItem 上时,自动触发对应的事件,用来预览此选项值.例如我在实现一个颜色下拉框,此时我可以通过点击下 ...

  8. 2018-8-10-win10-uwp-如何开始写-uwp-程序

    title author date CreateTime categories win10 uwp 如何开始写 uwp 程序 lindexi 2018-08-10 19:16:50 +0800 201 ...

  9. vue框架keepAlive缓存的坑

    页面跳转顺序index=>detail2=>detail3(三个页面不是单独请求数据,后两个页面是第一个页面数据的传递) detail2页面与methods同级: beforeRouteL ...

  10. Python的国内安装源(也称为镜像源)

    Python的国内安装源(也称为镜像源)数量会随着时间而增加或减少,因为新的镜像源可能会建立,而一些旧的镜像源可能会停止服务或不再更新.以下是一些常用的Python国内安装源(也称为PyPI镜像源): ...