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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 微服务轮子项目(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.使用了模板变量的查询不能配置告警

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



相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
9天前
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109673 118
|
9天前
|
Dubbo Java 应用服务中间件
微服务框架(十)Maven Archetype制作Dubbo项目原型
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Maven Archetype的制作及使用,使用archetype插件制作Dubbo项目原型
|
9天前
|
微服务
jeecg微服务项目调用接口报错Token验证失效的解决方法
jeecg微服务项目调用接口报错Token验证失效的解决方法
69 0
|
9天前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
222 0
|
9天前
|
Java Maven 微服务
微服务项目-将普通文件夹设为模块与添加services窗口
微服务项目-将普通文件夹设为模块与添加services窗口
11 0
|
9天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
22 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
|
9天前
|
数据采集 运维 监控
微服务监控:守护系统稳定的终极防线
微服务监控在数字化时代日益重要,它帮助运维和开发人员实时监测服务性能、状态和安全,确保微服务架构的稳定性和可用性。构建微服务监控体系需关注合理监控策略、数据采集处理、可视化及告警。数据采集的三大支柱是指标、日志和链路追踪。监控涵盖基础设施、系统、应用和业务层面。通过优化监控体系、融合业务场景和建立跨团队协作,可提升监控效果。未来,AI和云计算将推动微服务监控向更精准、高效和安全的方向发展。
78 0
|
9天前
|
Cloud Native Dubbo Java
如何确定微服务项目中Spring Boot、Spring Cloud、Spring Cloud Alibaba三者之间的版本
如何确定微服务项目中Spring Boot、Spring Cloud、Spring Cloud Alibaba三者之间的版本
44 0
|
9天前
|
XML Java 数据格式
springboot 微服务项目如何集成 html 页面
springboot 微服务项目如何集成 html 页面
36 0
|
9天前
|
数据采集 存储 监控
如何监控微服务调用
【2月更文挑战第2天】搭建一个服务监控系统,涉及数据采集、数据传输、数据处理、数据展示等多个环节。