开源监控系统Prometheus和Grafana应用

Prometheus介绍

官网:Prometheus - Monitoring system & time series database
Github:Prometheus · GitHub

        中文名普罗米修斯,Prometheus 是一个开源系统监控和警报工具包最初在 SoundCloud 构建。自 2012 年成立以来,许多公司和组织都采用了 Prometheus,该项目有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目 并独立于任何公司进行维护。强调这一点,并澄清 该项目的治理架构,Prometheus 于 2016 年加入云原生计算基金会 作为继 Kubernetes 之后的第二个托管项目。

        Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。

特点

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

架构

名称

说明

Prometheus Server

收集指标和存储时间序列数据,并提供查询接口

Push Gateway

短期存储指标数据,主要用于临时性任务

Exporters

采集已有的三方服务监控指标并暴露 metrics

Alertmanager

告警

Web UI

简单的 WEB 控制台

数据模型

        Prometheus 将所有数据存储为时间序列,具有相同度量名称以及标签属于同个指标,也就是说 Prometheus 从数据源拿到数据之后都会存到内置的 TSDB 中,这里存储的就是时间序列数据,它存储的数据会有一个度量名称,譬如你现在监控一个 nginx,首先你要给他起个名字,这个名称也就是度量名,还会有 N 个标签,你可以理解名称为表名,标签为字段,所以,每个时间序列都由度量标准名称和一组键值对 (也称为标签) 唯一标识。

时间序列的格式是这样的:

metric_name [
  "{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"
] value [ timestamp ]

metrice name 指的就是度量标准名称,label name 也就是标签名,这个标签可以有多个。

示例:

jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 2797352.0

这个度量名称为 jvm_memory_used_bytes,后面是两个标签,和他们各对应的值,还可以继续指定标签,指定的标签越多查询的维度就越多。

指标类型

类型名称

说明

Counter

递增计数器,适合收集接口请求次数

Guage

可以任意变化的数值,适用 CPU 使用率

Histogram

对一段时间内数据进行采集,并对有所数值求和于统计数量

Summary

与 Histogram 类型类似

任务和实例

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

prometheus部署

官网采用的docker部署:安装 |普罗 米修斯 (prometheus.io)

这采用docker-compose进行部署

新建目录monitor,创建文件docker-compose.yml,内容如下:

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

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

global:  #全局配置
  scrape_interval:   15s  #全局定时任务抓取性能数据间隔

scrape_configs:  #抓取性能数据任务配置
- job_name:       'lp-server-test'#抓取性能指标数据任务,一个job下可以配置多个抓取的的targets,比如服务的多个实例机器
  scrape_interval: 10s  #每10s抓取一次
  metrics_path: '/actuator/prometheus'  #抓取的数据url
  static_configs:
  - targets: ['192.168.10.111:8080']  #抓取的服务器地址
    labels:
      application: 'lp-server-test-label'  #抓取任务标签

- job_name: 'prometheus-local'  #抓取prometheus自身性能指标数据任务
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9090']

返回monitor目录执行docker compose命令:

docker-compose up -d

在浏览器访问prometheus:http://192.168.92.128:9090/graph,如下图所示:

点击Status下拉,选中Targets,界面如下:

这里显示了在prometheus里配置的两个抓取任务,不过lp-servers-test任务是失败的,state是down,接下来我们需要配置下lp-servers-test服务才能让prometheus抓取数据。

首先需要在我们的服务下增加pom依赖,如下:

所有的导出器和集成地址:出口商和集成 |普罗 米修斯 (prometheus.io)

第三方应用:

spring boot 健康监控:

Production-ready Features (spring.io)

<!-- 开启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>

还需要在服务的配置文件开启Spring Boot  监控的配置:

 #开启SpringBoot 应用健康监控 
management:
  endpoints: 
    promethus: 
      enable: true 
    web: 
      exposure: 
        include: '*' 
   endpoint: 
     health: 
       show-details: always

重启服务刷新刷新prometheus页面,如下所示:

点击lp-servers-test下面的prometheus链接:
http://192.168.10.111:8080/actuator/prometheus
,会打开服务对外暴露的性能指标数据,如下图:

返回prometheus页面首页,点击Graph页面,进入指标查询页面进行查询相关的指标数据

选中指标,然后点击Execute按钮

以上是prometheus自带的指标查询界面,一般我们都是使用grafana图形展示工具配合prometheus一起使用。

Grafana | Prometheus

Grafana 部署

Run Grafana Docker image | Grafana documentation

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

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

在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: 1

deleteDatasources:  #如果之前存在name为Prometheus,orgId为1的数据源先删除
- name: Prometheus
  orgId: 1

datasources:  #配置Prometheus的数据源
- name: Prometheus
  type: prometheus
  access: proxy
  orgId: 1
  url: http://prometheus:9090  #在相同的docker compose下,可以直接用prometheus服务名直接访问
  basicAuth: false
  isDefault: true
  version: 1
  editable: true

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

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

用docker compose启动grafana,访问grafana页面http://192.168.92.128:3000/login,用户名为admin,密码为password,如下:

首页:

点击左边的加号并import事先准备好的可视化指标文件4701_rev10.json

可视化指标文件下载地址:Dashboards | Grafana Labs

上传官网下载的模板json,然后选择Prometheus

创建报警方式点击下图所示:

 可以选择多种报警通知方式,常用Email,也可以选择webhook方式配置报警通知的http接口配置警报的 Webhook 通知程序 |Grafana 文档

配置告警规则:

示例1:监控Linux服务器性能指标

GitHub - prometheus/node_exporter: Exporter for machine metrics

下载linux监控的exporter镜像

docker pull prom/node-exporter

启动监控的数据库连接,容器创建的时候需要指定

#docker 启动
docker run -d -p 9100:9100 prom/node-exporter

#docker-compose 启动
---
version: '3.8'

services:
  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
    network_mode: host
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'

在prometheus.yml文件末尾追加如下配置:

模板:
- job_name: linux
  scrape_interval: 10s
  static_configs:
    - targets: ['IP地址1:9100']
      labels:
      instance: linux-1
    - targets: ['IP地址2:9100']
      labels:
        instance: linux-2
示例:

- job_name: linux
  scrape_interval: 10s
  static_configs:
    - targets: ['192.168.92.128:9100']
      labels:
        instance: linux-128

                     

重启Prometheus

导入Prometheus模板Node Exporter Full | Grafana Labs

示例2:监控Mysql性能指标

GitHub - prometheus/mysqld_exporter: Exporter for MySQL server metrics

下载mysql客户端的exporter镜像

docker pull prom/mysqld-exporter

启动监控的数据库连接,容器创建时指定:

docker run -d \
  -p 9104:9104 \
  --network my-mysql-network  \
  prom/mysqld-exporter
  --config.my-cnf=<path_to_cnf>

在prometheus.yml文件末尾追加如下配置:

- job_name: 'mysql'
  scrape_interval: 5s
  static_configs:
  - targets: ['192.168.92.128:9101']
    labels:
      instance: mysql

重启Prometheus

导入Prometheus模板MySQL Overview | Grafana Labs

  • 32
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Prometheus是一个开源的指标监控系统和时间序列数据库。它专注于收集和存储系统应用程序的度量指标数据,并提供强大的查询和可视化功能。Prometheus使用拉取模型,通过定期从目标系统中获取度量指标数据,支持多种数据格式和协议。 Grafana是一个开源的数据可视化和监控平台,可以与Prometheus集成使用。Grafana提供了丰富的数据可视化功能,可以根据收集到的指标数据创建仪表盘、图表和警报等。用户可以通过Grafana直观地查看和分析Prometheus收集的数据,并根据需要进行自定义配置。 在安装和配置PrometheusGrafana时,可以按照以下步骤进行操作: 1. 首先,安装并配置Prometheus,可以参考Prometheus官方文档提供的安装指南。 2. 然后,在Prometheus的配置文件中添加需要监控的目标系统和相关的度量指标。 3. 启动Prometheus服务,并确保它能够成功收集和存储度量指标数据。 4. 接下来,安装并配置Grafana,可以参考Grafana官方文档提供的安装指南。 5. 将Prometheus配置为Grafana的数据源,以便Grafana可以访问Prometheus收集的数据。 6. 在Grafana中创建仪表盘,配置需要展示的指标数据和图表形式。 7. 最后,通过Grafana的用户界面查看和分析Prometheus收集的指标数据,并设置警报规则等。 通过将PrometheusGrafana结合使用,您可以构建一个强大的开源指标监控系统,以监控和可视化系统应用程序的关键指标数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Prometheus+Grafana监控系统](https://blog.csdn.net/Wemesun/article/details/126455053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值