微服务架构(7)——监控中心

目录:
1、为什么需要监控中心
2、监控中心对比选型
3、集成Prometheus
4、Prometheus原理

为什么需要监控中心

在我们开发完一个系统部署上线后,经常会遇到机器的CPU、内存、磁盘、IO、网络等资源负载过高的问题。那我们总不能说天天对着这些机器,通过一些命令去观察这些机器资源使用的情况。所以我们就需要一个这样的控制中心用来监控我们机器和系统的资源使用情况,通过图形化的界面来直观的去观察这些信息,同时也能设置一些阈值,当资源使用率达到阈值时能进行自动预警。

监控中心组件对比选型

目前比较主流的监控中心就是zabbix和prometheus。

zabbix起源比prometheus早,在传统监控系统中,尤其是在服务器相关监控方面,占据优势,但是对容器监控支持的比较差。zabbix采集的数据存储在关系型数据库,像MySQL、PostgreSQL、Oracle等。

prometheus相对于zabbix来说优点就在于能支持容器监控,并且采集的数据是存储在时序数据库,可以达到每秒千万级别的数据存储。

集成Prometheus

下面基于Prometheus+grafana部署一套可视化监控中心。

安装Prometheus

1、拉取Prometheus镜像

docker pull prom/prometheus

2、启动Prometheus容器

首先创建一个Prometheus的配置文件 prometheus.yml

cd /usr/local/
mkdir prometheus
cd prometheus
vi prometheus.yml

加上如下内容

global:
  scrape_interval:     60s
  evaluation_interval: 60s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

执行下面命令,启动容器

docker run  -d -p 9090:9090 -v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

容器启动后,在浏览器输入192.168.1.5:9090,看到如下界面就说明prometheus部署成功了
微服务架构(7)——监控中心_第1张图片

安装node-exporter

但是这个时候这里还看不到什么监控的数据,接下来安装一个linux的node-exporter,用来监控linux系统的信息,然后prometheus会定期的从node-exporter中拉取监控信息。
1、拉取node-exporter镜像

docker pull prom/node-exporter

2、启动prom/node-exporter容器

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

3、到之前添加的prometheus.yml文件里加上这个node-exporter的地址,表示要从node-exporter这里拉取监控信息。添加配置如下

  - job_name: linux
    static_configs:
      - targets: ['192.168.1.5:9100']
        labels:
          instance: 192.168.1.5

最终prometheus.yml配置
微服务架构(7)——监控中心_第2张图片
重启prometheus,再次到浏览器输入prometheus地址192.168.1.5:9090,到/targets下面,就能看到已经可以收集linux系统的信息了。
微服务架构(7)——监控中心_第3张图片

安装grafana

只从prometheus的界面看到的信息不是那么直观,所以需要用grafana来展示收集到的这些信息。
1、拉取grafana镜像

docker pull grafana/grafana

2、启动grafana容器

docker run -d -p 3000:3000 --name=grafana -v /usr/local/grafana/grafana-storage:/var/lib/grafana grafana/grafana

3、在浏览器输入http://192.168.1.5:3000/login,看到登录界面表示grafana部署成功。用户名/密码都是 admin
微服务架构(7)——监控中心_第4张图片
4、添加一个 Data Source,选择prometheus,输入prometheus部署的地址和端口号,进行保存。
微服务架构(7)——监控中心_第5张图片
微服务架构(7)——监控中心_第6张图片
微服务架构(7)——监控中心_第7张图片
5、添加看板,直接选择Import进行导入。
微服务架构(7)——监控中心_第8张图片
6、到 https://grafana.com/grafana/dashboards 这个地址下找你想要的看板。
微服务架构(7)——监控中心_第9张图片
我这边选择的是10180这个看板。微服务架构(7)——监控中心_第10张图片
7、看板导入grafana,直接输入10180进行导入,或是通过 JSON 进行导入。
微服务架构(7)——监控中心_第11张图片
8、最后就能看到下图的看板了
微服务架构(7)——监控中心_第12张图片

监控Java应用的信息

1、在java应用中引入pom.xml依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>io.micrometer</groupId>
			<artifactId>micrometer-registry-prometheus</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>io.github.mweirauch</groupId>
			<artifactId>micrometer-jvm-extras</artifactId>
			<version>0.2.1</version>
		</dependency>

2、在java应用中添加配置。

management:
  endpoints:
    web:
      exposure:
        include: 'prometheus' # 暴露/actuator/prometheus
  metrics:
    tags:
      application: ${spring.application.name}

3、在prometheus的prometheus.yml添加获取java应用监控信息的配置。targets里是java应用的地址和端口号。

  - job_name: "java-jvm"
    metrics_path: "/actuator/prometheus"
    static_configs: 
      -targets: ['192.168.1.5:8084']

最终配置如下
微服务架构(7)——监控中心_第13张图片

4、重启prometheus,在浏览器输入prometheus的地址192.168.1.5:9090,到/targets下面,此时能看到java应用已经能监控到了。
微服务架构(7)——监控中心_第14张图片
5、在grafana中添加看板,添加看板的过程与上面一致,去grafana的官网找到自己想要的看板,然后进行添加即可。我这边找的是12856这个看板。微服务架构(7)——监控中心_第15张图片
6、最终看板效果
微服务架构(7)——监控中心_第16张图片

Prometheus原理

在上面使用的实例中我们可以看到,要想让Prometheus监控服务器或是应用的信息,就需要对外暴露一些接口。像要监控linux系统的信息,就需要安装一个node-exporter,这个node-exporter会收集服务器的信息,然后对外暴露HTTP接口,让Prometheus server能够通过HTTP的方式去访问这些暴露的接口,来获取服务的信息。整体的流程如下图:
微服务架构(7)——监控中心_第17张图片
Prometheus Server负责定时在目标上抓取metrics(指标)数据并保存到本地存储里面。Prometheus采用了一种Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端可以更加方便的水平扩展。

如果监控数据达到告警阈值Prometheus Server会通过HTTP将告警发送到告警模块alertmanger,通过告警的抑制后触发邮件或者webhook。

PromDash负责展示监控信息,Prometheus支持PromQL提供多维度数据模型和灵活的查询,将监控数据进行任意维度的组合以及聚合,展示到PromDash中。

你可能感兴趣的:(微服务架构,微服务架构)