Prometheus + Grafana 搭建监控报警系统

1. 简介

监控报警目前比较主流的解决方案有云原生新秀 Prometheus 、老牌 Zabbix 等等, 下图是两种技术 Prometheus 与 Zabbix 的对比, 本文将介绍 Prometheus + Grafana 搭建服务器/虚拟机、SpringBoot 应用服务的监控报警及可视化.

扫码参与讨论, 分享您现在正在用的监控报警系统架构, 去帮助更多的人.

1.1 Prometheus

Kubernetes自从2012年开源以来便以不可阻挡之势成为容器领域调度和编排的领头羊,Kubernetes是Google Borg系统的开源实现,于此对应Prometheus则是Google BorgMon的开源实现。
Prometheus(中文名:普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发, 2016年,由Google发起的 Linux 基金会旗下的云原生基金会(Cloud Native Computing Foundation)将Prometheus 纳入继 Kubernetes 之后的其第二大开源项目。Prometheus 在开源社区也十分活跃,在GitHub上拥有两万多Star,并且系统每隔一两周就会有一个小版本的更新,而Prometheus与它的“师兄”Kubernetes" 都自带云原生的光环,天然能够友好协作。

1.1.1 Prometheus

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态, 任意组件只要提供对应的HTTP接口就可以接入监控. 不需要任何SDK或者其他的集成过程。输出被监控组件信息的HTTP接口被叫做exporter,目前开发常用的组件大部分都有exporter可以直接使用, 比如Nginx、MySQL、Linux系统信息、Mongo、ES等

1.1.2 Exporter

prometheus可以理解为一个数据库+数据抓取工具, 工具从各处抓来统一的数据, 放入 prometheus 这一个时间序列数据库中. 那如何保证各处的数据格式是统一的呢? 就是通过这个exporter.
Exporter是一类数据采集组件的总称. Exporter负责从目标处搜集数据, 并将其转化为 Prometheus 支持的格式, 它开放了一个http接口(以便Prometheus来抓取数据). 与传统的数据采集组件不同的是, Exporter 并不向中央服务器发送数据, 而是等待中央服务器(如Prometheus等)主动前来抓取。
https://github.com/prometheus 有很多写好的 exporter, 可以直接下载使用。

1.1.3 架构

Prometheus Server负责定时在目标上抓取metrics(指标)数据并保存到本地存储里面。Prometheus采用了一种Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端可以更加方便的水平扩展。
如果监控数据达到告警阈值 Prometheus Server 会通过 HTTP 将告警发送到告警模块alertmanger,通过告警的抑制后触发邮件或者webhook。Prometheus 支持 PromQL 提供多维度数据模型和灵活的查询,通过监控指标关联多个 tag 的方式,将监控数据进行任意维度的组合以及聚合。

1.2 Grafana

Grafana是一个图形化工具, 它可以从很多种数据源(例如Prometheus)中读取数据信息, 使用很漂亮的图表来展示数据, 并且有很多开源的 dashborad 可以使用, 可以快速地搭建起一个非常精美的监控平台。它与Prometheus的关系就类似于Kibana与ElasticSearch。
所有的 Dashboard 都可以在 https://grafana.com/grafana/dashboards 检索到.

2. 通过 Docker 部署

部署采用 Docker(Docker-Compose) 容器化部署. ------ 能不安装的绝不手动安装.

2.1 部署 Prometheus

2.1.1 创建配置文件 prometheus.yml

所有配置文件可以先通过 2.1.2 启动过程中不挂载配置文件路径启动, 然后通过 docker cp 命令从容器里面 copy 到本地磁盘, 再通过挂载路径启动.

# my global config
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093rule_files:# - "first_rules.yml"# - "second_rules.yml"scrape_configs:# 配置监控的 Job- job_name: "prometheus"# 拉取监控数据的地址 --> 完整路径即为 targets[i]/metrics_path, 本 Job 即为http://localhost:9090/metricsmetrics_path: '/metrics'static_configs:# 监控的目标 -- 这里配置的是监控 prometheus 自身- targets: ['localhost:9090']# 添加一个标示labels:instance: prometheus

2.1.2 启动 Prometheus

docker run  -d --name prometheus \-p 9090:9090 \-v ${CONF_DIR}/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \prom/prometheus

2.1.3 测试

通过访问 http://localhost:9090/targets 就可以看到打开 Prometheus 自带的可视化页面并查看监控 Job 的状态

通过访问 [http://localhost:9090/metrics] 也可以看到 Prometheus 拉取的数据详情

2.2 部署 Grafana

2.2.1 部署

docker run -d \-p 3000:3000 \--name=grafana \-v ${CONF_DIR}/grafana/:/var/lib/grafana \grafana/grafana

2.2.2 测试

通过访问 http://localhost:3000 就可以看到 grafana 的登录界面, 默认用户名密码是 admin/admin.

3. 监控服务器/虚拟机

上面已经介绍过, Prometheus 监控是通过各种 Exportor 进行信息采集, 监控服务器/虚拟机常用的 Exportor 就是 Node_Exportor;

3.1 部署 Node_Exportor 采集服务器/虚拟机信息

docker run -d --name node-exporter -p 9100:9100 \-v "/proc:/host/proc:ro" \-v "/sys:/host/sys:ro" \-v "/:/rootfs:ro" \prom/node-exporter

需要注意的是需要将物理机的 proc/sys 等路径挂载, 不然采集到的数据就是容器的数据而不是服务器/物理机的数据.

3.2 添加 Prometheus 监控 Job

编辑 prometheus.yml 配置文件

scrape_configs:# 配置监控的 Job- job_name: "prometheus"static_configs:# 监控的目标 -- 这里配置的是监控 prometheus 自身- targets: ['localhost:9090']# 添加一个标示labels:instance: prometheus- job_name: "self-node-exportor"static_configs:- targets: ['192.168.1.88:9100', '192.168.1.89:9100']

3.3 配置 Grafana 数据源

Grafana 要对 Prometheus 进行可视化的第一步先需要配置 Prometheus 为 Grafana 的数据源

  • 选择数据源

  • 添加数据源

  • 填入 Prometheus 信息

  • 测试保存

3.4 配置 Grafana 可视化仪表盘

  • 选择 Import

  • 输入 Dashboard ID 再加载

Dashboard ID 可以在 https://grafana.com/grafana/dashboards 中检索.

  • 编辑 Name 和数据源, 点击 Import

3.4 效果展示

  • Dashboard 9276

  • Dashboard 8919

4. 监控 SpringBoot

随着微服务架构的迅猛发展, 服务水平化拆分越来越多, 系统服务数量也在不断剧增, 因此, 对后台服务的监控报警也越来越重要.
Prometheus 的 Exportor 已经有了对 SpringBoot 数据采集的实现 ---- micrometer-registry-prometheus, 因此便可以直接在 Prometheus 和 Grafana 的基础上快速搭建起来一个 SpringBoot 的监控报警系统.

4.1 环境

  • Spring Boot: 2.3.2.RELEASE

4.2 引入依赖

micrometer-registry-prometheus 需要 actuator 的支持.

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

4.3 配置 application.yml

server:port: 9411management:endpoints:web:exposure:include: '*'endpoint:health:show-details: always

4.5 添加 Prometheus 监控 Job

  - job_name: "prometheus-sb"# 多久采集一次数据scrape_interval: 15s# 采集时的超时时间scrape_timeout: 10s# 采集的路径metrics_path: '/actuator/prometheus'static_configs:- targets: ["host.docker.internal:9411"]

其中 host.docker.internal 指向 SpringBoot 的应用地址, 由于这里 Prometheus 是在 docker 中安装, 因此 localhost127.0.0,1 都是容器内的地址, 通过 host.docker.internal 可以将其映射到宿主机上.
当然, 你也可以直接配置成你真实的 IP 地址(192.168.1.128)也是可以的.

4.6 配置 Grafana 仪表板

Grafana 监控 SpringBoot, SpringCloud, k8s 等都有现成的 Dashboard, 帅帅这里找了一个 — 11378, 大家按照上面的步骤添加就可以使用

4.7 效果展示

5. Docker-Compose 一键部署 Prometheus 和 Grafana

还是那句老话, 既然大侠已经看到这里了, 那小弟也不藏着掖着了, 公众号后台回复 PGM 即可拿到帅帅整理好的 Prometheus 和 Grafana 的 docker compose 配置文件以及 Prometheus 配置文件, 一个 up 命令启动 ELK, 一个 down 命令停止 ELK, 它 不香吗?

Prometheus + Grafana 搭建监控报警系统相关推荐

  1. 基于Prometheus+Grafana搭建监控平台-(2)实现监控elink服务器EIMServer

    EIMServer是由北京华夏易联科技开发有限公司研发的一款可以私有部署的即时通讯服务平台E-Link,服务器是基于OSGI框架研发的java服务器程序,所以也可以通过Prometheus+Grafa ...

  2. 基于Prometheus+Grafana搭建监控平台-(5)实现监控Solr服务

    基于Prometheus+Grafana搭建监控平台-(1)搭建基础环境,实现监控JVM 基于Prometheus+Grafana搭建监控平台-(2)实现监控elink服务器EIMServer 基于P ...

  3. Prometheus Grafana 搭建监控系统

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

  4. 技术实践丨Prometheus+Grafana搭建HBase监控仪表盘

    摘要:Grafana+Prometheus是目前非常流行的监控方案,图形化展示非常强大. 本文分享自华为云社区<Prometheus+Grafana搭建HBase监控仪表盘>,原文作者:L ...

  5. 视频教程-Prometheus+Grafana搭建全方位的监控告警系统-Linux

    Prometheus+Grafana搭建全方位的监控告警系统 高级运维工程师.资深DevOps工程师,精通kubernetes容器编排工具,熟练使用linux操作系统,多年线上线下教学经验 韩先超 ¥ ...

  6. 五分钟搭建基于 Prometheus + Grafana 实时监控系统

    文章目录 Prometheus + Grafana 实时监控系统 Prometheus + Grafana 实时监控系统 依赖镜像包 启动 node-exporter check 端口 node_ex ...

  7. prometheus连续查询_Grafana + Prometheus快速搭建监控平台

    随着业务的越发复杂,软件系统也越来越庞大,对软件系统的要求越来越高,意味着我们需要随时掌控系统的运行情况.因此,系统的实时监控以及可视化展示,就显得非常重要. 今天来介绍下使用Grafana + Pr ...

  8. 视频教程-Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程-Linux

    Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程 资深DevOps工程师,曾经在华为,乐逗游戏工作,目前就职于知名物流公司工作 希望结合工作实践 给大家带来很多干货 周龙 ...

  9. Prometheus+Grafana 搭建全方位的监控告警系统

    一.Prometheus介绍 Prometheus是一个最初在SoundCloud上构建的监控系统.自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区.为强调开源及独立维护,Prometh ...

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

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

最新文章

  1. redis-4.0.11主从配置初步探究
  2. asp.net 六大对象之Request、Response
  3. Hello boke!
  4. string.intern_使用String.intern()减少内存使用
  5. Win11桌面没有图标怎么解决 Win11桌面没有图标解决教程
  6. capture 部分元器件编号_十大电子元器件及其相关基础知识
  7. 火星人谚语系列之五:答案将由我在下一分钟给出(心想事成)
  8. [转载] 2011 ScrumGathering大会简要记录 - 周金根
  9. 2014百度之星第一题Energy Conversion
  10. win10家庭版和专业版的区别
  11. 微信小程序怎么字体鼠标放上去变颜色?_【干货】CDR快捷键常识小技巧大全,记得收藏!...
  12. NPOI操作Excel类代码(打开 插入 设置行列宽 合并单元格 增删改工作表 保存等等) .NET4.5
  13. 【ACwing】一、基础算法:1.1 递归枚举(指数型)
  14. 微软苏州STCA面试
  15. 报警c语言程序,PIC单片机警报声C程序
  16. 来自帅气博主的c语言文案
  17. 加强杂交和环境选择的高维目标进化算法
  18. java jtextarea 监听文本_Java Swing JTextArea文本区域的实现示例
  19. 【R生态】非参数多元检验(ADONIS、ANOSIM、PERMANOVA及MRPP等多元方差分析)
  20. 圣商,牢记使命成就当代圣商

热门文章

  1. 不讲废话,全程硬核,处理结构化数据的终极解决方案
  2. 2020ICPC 昆明热身赛 C.Statues(小思维)
  3. 【Python】Pandas实现二表查重高亮、去重
  4. 桌面计算机图标双击打不开了,双击打不开图标怎么办 双击打不开图标解决方法【详解】...
  5. 怀旧服ouf头像插件_魔兽世界7.0前夕ShadowedUF简洁头像插件
  6. html自动幻灯片代码,简单常用的幻灯片播放实现代码
  7. matlab欧式期权定价公式,[转载]期权定价的Matlab实现(以欧式看涨期权为例)
  8. 5个最优秀的Java和C#代码转换工具
  9. 计算机找不到ac97前面板怎么办,电脑Win7系统前面板耳机插孔没有声音解决方法(音频设置+前面板插线方法)...
  10. Windows小工具 tcping