微服务轮子项目(23) -Metrics监控

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 微服务轮子项目(23) -Metrics监控

1. 前言

Prometheus普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker

Prometheus应该是为数不多的适合DockerMesosKubernetes环境的监控系统之一。输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如VarnishHaproxyNginxMySQLLinux系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus

与其他监控系统相比,Prometheus的主要特点是:

  • 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
  • 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
  • 一种灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点。
  • 时间集合通过HTTP上的PULL模型进行。
  • 通过中间网关支持推送时间。
  • 通过服务发现或静态配置发现目标。
  • 多种模式的图形和仪表板支持。

Prometheus架构:

  • 它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
  • Prometheus:支持通过配置文件、文本文件、zookeeperConsulDNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
  • Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
  • PushGateway:这个组件是支持Client主动推送metricsPushGateway,而Prometheus只是定时去Gateway上抓取数据。
  • 大多数Prometheus组件都是用Go编写的,它们可以轻松地构建和部署为静态二进制文件。访问prometheus.io以获取完整的文档,示例和指南。

2. 安装部署

1.下载镜像:

docker pull prom/prometheus

2.启动镜像:

docker run -d --name prometheus -p 9090:9090 prom/prometheus

3.创建文件夹:

mkdir conf
mkdir data
chmod 777 -R data

4.拷贝配置文件:

docker cp prometheus:/etc/prometheus/prometheus.yml conf/

5.修改配置文件:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
      labels:
        instance: prometheus
  • job_name:job的名字
  • targets:metrics生产者地址
  • labels:个性化标签

6.重新启动镜像:

docker stop prometheus
docker rm prometheus
docker run \
        -p 9090:9090 \
        -v $PWD/conf/prometheus.yml:/etc/prometheus/prometheus.yml \
        -v $PWD/data:/prometheus \
        --name prometheus \
        -d prom/prometheus \
        --config.file=/etc/prometheus/prometheus.yml

7.安装grafana:

docker stop grafana
docker rm grafana
docker run -d \
      -p 3000:3000 \
      --name=grafana \
      -v $PWD/conf/grafana.ini:/etc/grafana/grafana.ini/grafana.ini \
      -v $PWD/plugins/:/var/lib/grafana/plugins \
      -e "GF_SECURITY_ADMIN_PASSWORD=admin" \
      -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,raintank-worldping-app,grafana-piechart-panel" \
      -v $PWD/data:/var/lib/grafana \
      grafana/grafana

GF_SECURITY_ADMIN_PASSWORD: 设置admin管理员的默认密码

GF_INSTALL_PLUGINS:配置安装的插件

3. 各组件监控

3.1 服务器监控

1.安装运行 node-exporter:

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

2.修改prometheus的配置:

- job_name: 'node'
    static_configs:
    - targets: ['192.168.28.130:9100']
      labels:
        env: test
        name: node1
        instance: 192.168.28.130

3.2 MySQL监控

1.安装运行 mysqld-exporter:

docker run -d -p 9104:9104 \
        --name mysqld-exporter \
        -e DATA_SOURCE_NAME="root:1q2w3e4r@(192.168.28.131:3306)/user-center" \
        prom/mysqld-exporter

2.修改prometheus的配置:

- job_name: 'mysqld'
    static_configs:
    - targets: ['192.168.28.131:9104']
      labels:
        env: test
        name: mysql-5.7
        instance: 192.168.28.131:3306

3.3 Elasticsearch监控

1.安装 elasticsearch-exporter 插件:

cd elasticsearch-6.6.1
./bin/elasticsearch-plugin install -b https://distfiles.compuscene.net/elasticsearch/elasticsearch-prometheus-exporter-6.6.1.0.zip

2.修改prometheus的配置:

- job_name: elasticsearch
    scrape_interval: 10s
    metrics_path: "/_prometheus/metrics"
    static_configs:
    - targets: ['192.168.28.130:9200']
      labels:
        env: test
        name: elasticsearch

3.4 Nacos监控

1.配置nacosapplication.properties文件,暴露metrics数据:

management.endpoints.web.exposure.include=*

2.修改prometheus的配置:

- job_name: nacos
    metrics_path: "/nacos/actuator/prometheus"
    static_configs:
    - targets: ['192.168.28.130:8848']
      labels:
        env: test
        name: nacos
        instance: 192.168.28.130:8848

3.5 Redis监控

1.安装运行 redis-exporter

docker run -d \
       --name redis_exporter \
       -p 9121:9121 \
       oliver006/redis_exporter \
       --redis.addr redis://192.168.28.130:6379

2.修改prometheus的配置

- job_name: redis
    static_configs:
    - targets: ['192.168.28.130:9121']
      labels:
        env: test
        name: redis
        instance: 192.168.28.130:3306

3.6 微服务监控

通过file_sd_configs进行服务发现的配置,每次json文件的内容发生变更,Prometheus会自动刷新target列表:

1.配置服务的json文件:

[
  {
    "targets": [
      "192.168.28.130:9900"
    ],
    "labels": {
      "job":"spring-boot-service",
      "env":"test",
      "application":"api-gateway",
      "instance":"192.168.28.130:9900"
    }
  },
  {
    "targets": [
      "192.168.28.130:8000"
    ],
    "labels": {
      "job":"spring-boot-service",
      "env":"test",
      "application":"uaa-server",
      "instance":"192.168.28.130:8000"
    }
  }
]

2.修改prometheus的配置:

- job_name: spring-boot-service
    metrics_path: "/actuator/prometheus"
    file_sd_configs:
    - files: ['/etc/prometheus/fileDdConfigs/*.json']

4. Grafana仪表盘

4.1 下载

下载地址:

4.2 告警配置

4.2.1 邮件配置

修改 grafana文件/etc/grafana/grafana.ini配置smtp服务器:

host: smtp地址+端口

user: 你的邮箱地址

password: 邮箱客户端授权密码

from_address: 你的邮箱地址

4.2.2 配置邮件通知
4.2.3 Alert配置
4.2.4 注意事项

1.只有Graph图表能配置Alert

2.使用了模板变量的查询不能配置告警

解决办法:单独配置个告警的视图,用正则匹配出所有的主机 或者 每台主机单独一个查询语句



相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
5月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
557 1
日志收集和Spring 微服务监控的最佳实践
|
6月前
|
存储 Prometheus 监控
从入门到实战:一文掌握微服务监控系统 Prometheus + Grafana
随着微服务架构的发展,系统监控变得愈发重要。本文介绍如何利用 Prometheus 和 Grafana 构建高效的监控系统,涵盖数据采集、存储、可视化与告警机制,帮助开发者提升系统可观测性,及时发现故障并优化性能。内容涵盖 Prometheus 的核心组件、数据模型及部署方案,并结合 Grafana 实现可视化监控,适合初学者和进阶开发者参考实践。
910 6
|
5月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
302 2
|
11月前
|
Java Maven Android开发
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
本文介绍了Spring Boot开发环境的搭建和项目启动流程。主要内容包括:jdk的配置(IDEA、STS/eclipse设置方法)、Spring Boot工程的构建方式(IDEA快速构建、官方构建工具start.spring.io使用)、maven配置(本地maven路径与阿里云镜像设置)以及编码配置(IDEA和eclipse中的编码设置)。通过这些步骤,帮助开发者顺利完成Spring Boot项目的初始化和运行准备。
1004 0
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
|
11月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
239 0
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1247 0
|
7月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
11月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
491 0
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
229 0
|
存储 监控 负载均衡
构建高效微服务架构:服务治理与监控的实践
构建高效微服务架构:服务治理与监控的实践

热门文章

最新文章