Prometheus + Grafana 搭建监控报警系统

Prometheus + Grafana 搭建监控报警系统

Prometheus + Grafana 搭建监控报警系统_第1张图片

1. 简介

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

Prometheus + Grafana 搭建监控报警系统_第2张图片

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

Prometheus + Grafana 搭建监控报警系统_第3张图片

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 + Grafana 搭建监控报警系统_第4张图片

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:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  # 配置监控的 Job
  - job_name: "prometheus"
    # 拉取监控数据的地址 --> 完整路径即为 targets[i]/metrics_path, 本 Job 即为http://localhost:9090/metrics
    metrics_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 的状态

Prometheus + Grafana 搭建监控报警系统_第5张图片

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

Prometheus + Grafana 搭建监控报警系统_第6张图片

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.

Prometheus + Grafana 搭建监控报警系统_第7张图片

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 + Grafana 搭建监控报警系统_第8张图片

file

  • 添加数据源

Prometheus + Grafana 搭建监控报警系统_第9张图片

  • 填入 Prometheus 信息

Prometheus + Grafana 搭建监控报警系统_第10张图片

  • 测试保存

Prometheus + Grafana 搭建监控报警系统_第11张图片

3.4 配置 Grafana 可视化仪表盘

  • 选择 Import

Prometheus + Grafana 搭建监控报警系统_第12张图片

  • 输入 Dashboard ID 再加载

Prometheus + Grafana 搭建监控报警系统_第13张图片

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

Prometheus + Grafana 搭建监控报警系统_第14张图片

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

Prometheus + Grafana 搭建监控报警系统_第15张图片

3.4 效果展示

  • Dashboard 9276

Prometheus + Grafana 搭建监控报警系统_第16张图片

  • Dashboard 8919

Prometheus + Grafana 搭建监控报警系统_第17张图片

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.micrometergroupId>
	 <artifactId>micrometer-registry-prometheusartifactId>
dependency>
<dependency>
	 <groupId>org.springframework.bootgroupId>
	 <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

4.3 配置 application.yml

server:
   port: 9411

management:
   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 效果展示

Prometheus + Grafana 搭建监控报警系统_第18张图片

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

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

Prometheus + Grafana 搭建监控报警系统_第19张图片

你可能感兴趣的:(架构,docker,java,监控程序,Prometheus,Grafana)