java微服务开发(监控篇)

java微服务开发(监控篇)

我们的目标是~~_浩瀚的宇宙 _~~全栈开发
后台就是花式curd工程师,前端就是抠图工程师,大数据就是swl工程师,算法就是调参工程师,中间件就是客服热线接线员
只有运维才能拯救世界! — 布置到·誰索德

监控乍一听 觉得这就是运维的活 和我们好像没啥关系 但是说不定你的公司没有运维呢
老板又说要整个监控啥的 为啥都买了几台服务器了 还有有人反馈网站响应慢
开了个会 把你臭骂一顿 然后叫你查一下 叫你优化一下
你打开shell top命令一看 哟吼 cpu都120% 一看进程 呀哈 一个挖矿脚本正在奴隶你的服务器
经过你的一番排查 原来是redis的密码是123456(弱密码) 被挖矿扫描到6379然后暴力破解密码
利用redis内存漏洞给你搞了一个挖矿脚本 肺都给你气炸

经过上述描述 监控也是一个全栈工程师的必经之路啊

路不好走啊 共勉吧

其实现在很多的云服务提供商都有一个良好的图像界面的监控 redis有redis的监控 MySQL有MySQL的监控 ecs也有ecs的监控
但是也有公司是自己买服务器 然后找个托管商 毕竟数据在自己手里才是最好的
所以为了避免老板叫你搞一个监控系统啥的 你来句不会 这就很尴尬

废话不多说 直接开始
本篇的前提是docker,docker-compose环境已经完成安装 安装教程java微服务开发(基础环境篇)

Linux上的监控

其实Linux的基础命令里已经有很多可以查看服务器状态的命令了
比如: top

top命令

其实top命令只是Linux上的一个比较常用的命令 Linux可以用于监控的命令实在是太多 这里用一个top举个栗子

[root@centos cadvisor]# top
top - 06:05:26 up  1:44,  1 user,  load average: 0.01, 0.03, 0.05
Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7910332 total,  6168012 free,   438212 used,  1304108 buff/cache
KiB Swap:  8126460 total,  8126460 free,        0 used.  7194220 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                     
12610 65534     20   0  717876  23104   6092 S   1.7  0.3   0:42.70 node_exporter                                                                                                                                                               
12650 root      20   0 1244852  43992   9260 S   1.3  0.6   1:16.06 cadvisor                                                                                                                                                                    
    1 root      20   0  128196   6668   4052 S   0.0  0.1   0:01.21 systemd                                                                                                                                                                     
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                                                                                                                                    
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                                                                                                
    6 root      20   0       0      0      0 S   0.0  0.0   0:00.03 ksoftirqd/0                                                                                                                                                                 
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/0                                                                                                                                                                 
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                                                                                                                      
    9 root      20   0       0      0      0 S   0.0  0.0   0:02.13 rcu_sched                                                                                                                                                                   
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                                                                                                                                                               
   11 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 watchdog/0                                                                                                                                                                  
   12 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 watchdog/1                                                                                                                                                                  
   13 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/1                                                                                                                                                                 
   14 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/1                                                                                                                                                                 
   15 root      20   0       0      0      0 S   0.0  0.0   0:00.04 kworker/1:0                                                                                                                                                                 
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                                                                                                                                                                
   17 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 watchdog/2                                                                                                                                                                  
   18 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/2                                                                                                                                                                 
   19 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/2                                                                                                                                                                 
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H                                                                                                                                                                
   22 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 watchdog/3                                                                                                                                                                  
   23 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/3                                                                                                                                                                 
   24 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/3                                                                                                                                                                 
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H                                                                                                                                                                
   28 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs                                                                                                                                                                   
   29 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns                                                                                                                                                                       
   30 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd                                                                                                                                                                  
   31 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback                                                                                                                                                                   
   32 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd                                                                                                                                                                 
   33 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                      
   34 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                      
   35 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                      
   36 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd                                                                                                                                                                     
   37 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md                                                                                                                                                                          
   38 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 edac-poller                                                                                                                                                                 
   39 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 watchdogd                                                                                                                                                                   
   40 root      20   0       0      0      0 S   0.0  0.0   0:00.20 kworker/0:1                                                                                                                                                                 
   45 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kswapd0                                                                                                                                                                     
   46 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd                                                                                                                                                                        
   47 root      39  19       0      0      0 S   0.0  0.0   0:00.04 khugepaged                                                                                                                                                                  
   48 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 crypto                                                                                                                                                                      
   56 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kthrotld                                                                                                                                                                    
   57 root      20   0       0      0      0 S   0.0  0.0   0:00.30 kworker/u8:1                                                                                                                                                                
   58 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kmpath_rdacd                                                                                                                                                                
   59 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kaluad                                                                                                                                                                      
   60 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kpsmoused                                                                                                                                                                   
   61 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ipv6_addrconf                                                                                                                                                               
   74 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 deferwq                                                                                                                                                                     
  111 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kauditd                                                    

但是top命令不够直观 你要是用这个展示给你老板看当前服务器的状态 那我觉得 你是真的勇
其实我们还是希望有个一图像化的界面展示 直观的展示目前的服务器状态 docker容器的状态 msyql内存 redis内存等

Prometheus

看这个标题 应该是两个玩意 有一说一 确实是两个东西
一个是prometheus: 开源监控报警系统
一个是granfana: 网络架构和应用分析中最流行的时序数据展示工具

Prometheus是啥

音译:普罗米修斯 这就是这个监控的核心组件了 监控和报警一体的 他也有一个简单的web展示页面 但是大多数还是使用他作为Grafana的数据源
它可以监控很多玩意 主要是通过对应的exporters 你可以自己开发 也可以使用别人或者官方开发好的exporters来监控你要的东西
官方的exporters: 链接

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus的特点

  • 多维度数据模型。
  • 灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点是自主的。
  • 通过基于HTTP的pull方式采集时序数据。
  • 可以通过中间网关进行时序列数据推送。
  • 通过服务发现或者静态配置来发现目标服务对象。
  • 支持多种多样的图表和界面展示,比如Grafana等。

通过Prometheus可以实现对多台服务器 多个应用 多个服务的实时监控 你设定指定的规则 然后发送警报 提醒你处理
也可以就当一个好看的实时数据展示面板 给你老板看看
prometheus页面展示

在这里插入图片描述

Zabbix

它和Prometheus也差不多 也是用于服务监控的 不过感觉他要高级一点 因为有中文官网
不过我在这里没有采用Zabbix作为这台监控方案的首选

Zabbix是什么

Zabbix是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标。
官网:https://www.zabbix.com/cn

在这里插入图片描述

Grafana

Grafana严格来说不是一个用于监控的工具 是一个开源的指标量监测和可视化工具
通过对不同的数据源进行读取 然后展示不同的指标 常用于展示基础设施的时序数据和应用程序运行分析
官网: https://grafana.com/
grafana的页面非常炫酷 可以用于提升b格(如图所示)

在这里插入图片描述

使用Prometheus和Grafana搭建监控系统

为啥不用Zabbix 或者使用Zabbix作为数据源Grafana作为可视化界面呢? 没有为什么 哪里有这么多为什么 说到底还不就是一个字 懒
我已经搭建好了Prometheus的 就用它了
话不多说 直接开干

环境检查

这里还是要预先检查一波环境 环境没弄好还不是白搭 到时候啥都干不了
我这里有两台Linux 都是是centos7.7
hostname:mytest IP:192.168.28.254
hostname:centos IP:192.168.28.252

docker环境检查

docker检查已经安装 并且配置了镜像加速~~(如果没配置那就看网络情况了 说不定一晚上都没把镜像拉下来)~~
命令 docker info

[root@centos ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 3
  Running: 2
  Paused: 0
  Stopped: 1
 Images: 9
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1127.13.1.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.544GiB
 Name: centos
 ID: 3QOG:3RWM:H72U:QIRL:NBYC:4ZHN:AAUA:AWZI:PWSE:3VTY:TPL3:KZTY
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://uz6p4blc.mirror.aliyuncs.com/
 Live Restore Enabled: false

这里可以看到我的docker已经安装完毕 并且Registry Mirrors: 下面的也是我的阿里云地址 想用这个可以直接用
没配置的直接用下面的命令配置

配置docker的镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uz6p4blc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

### docker-compose检查 docker-compose是docker三剑客的其中一个 docker-compose可以大量简化我们得Linux命令 只用一个yml文件就可以实现对docker容器得编排
命令 docker-compose -v ```shell [root@centos ~]# [root@centos ~]# docker-compose -v docker-compose version 1.25.4, build 8d51620a [root@centos ~]#
看到输入了docker-compose得版本号 这里得版本已经比较新了 可以兼容version: '3'了 懂得都懂<br />

<a name="UQSgr"></a>
## 文件准备
什么测试驱动编程 什么敏捷开发 说到底不是懒 所以我明白大伙的心思 就不要白嫖好了么 整个关注啥的 以后更新了其他的东西 还可以多找到我<br />在这里我准备了好了要用的文件(懒狗包): [百度云链接](https://pan.baidu.com/s/1iN-k7kP3xz08i0XTz1Xjag) 提取码:pjfe<br />压缩包里的就是要用的文件 直接解压上传到你的Linux /root/目录下就行<br />

<a name="vsFQn"></a>
## 部署Prometheus
<a name="qNn24"></a>
# 
如果你不是一个懒人 没有上传文件准备里的东西到/root/目录下 你可以跟着我一步一步来<br />如果你使用了懒人包 直接看后面的修改prometheus-standalone.yml和启动命令<br />新建一个prometheus的文件夹
```shell
mkdir prometheus

进入到prometheus文件里

cd prometheus

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

vim prometheus.yml

复制下面的内容到prometheus.yml里

version: "3"
services:
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    volumes:
      - ./data/prometheus-standalone.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    restart: on-failure

从上面的volumes中可以看到 有在当前目录的data下面有个prometheus-standalone.yml文件映射到了容器的prometheus.yml 这就是prometheus的配置文件
所以我们需要在prometheus下新建一个data目录

mkdir data

创建一个prometheus-standalone.yml文件

vim prometheus-standalone.yaml

复制下面的内容到prometheus-standalone.yaml里

# 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).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'nacos'
    metrics_path: '/nacos/actuator/prometheus'
    static_configs:
      - targets: ['192.168.28.254:8848']
      
  - job_name: 'mysql1'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.28.254:9104']
      
  - job_name: 'linux1'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.28.254:9100','192.168.28.252:9100']
      
  - job_name: 'redis1'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.28.254:9121']
      
  - job_name: 'docker'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.28.254:8080']

注意 里面的IP地址 192.168.28.254 换成你们主机的IP 192.168.28.252换成第二个Linux的 如果没有直接删除ip即可 逗号也要删除
回到上一个目录

cd  ..

启动prometheus docker容器

docker-compose -f prometheus.yml up -d

查看docker容器是否运行成功
命令:

docker ps | grep prom/prometheus:latest

输入如下界面

[root@mytest data]# docker ps | grep prom/prometheus:latest
3fbd65cc80fe        prom/prometheus:latest                                                      "/bin/prometheus --c…"   5 hours ago         Up 3 hours          0.0.0.0:9090->9090/tcp                                                                       prometheus

这样我们的prometheus就运行成功了
运行成功后在浏览器输入IP:9090访问prometheus的web界面
在这里插入图片描述

到IP:9090/targets下查看所有被监控的项目(我这里所有的都是蓝色 有可能你的大部分红色 不过不用管 等会其他的监控容器启动了就会显示正常)
但是你的prometheus这个一定要保证绿色 如果短时间内没有 多刷新几次 或者看看上面的prometheus-standalone.yaml是不是配置正确
在这里插入图片描述

部署cadvisor

cadvisor是什么: 为了解决docker stats的问题(存储、展示),谷歌开源的cadvisor诞生了,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取
一句话 cadvisor就是一个监控容器的探针 这里我们还是先安装一个探针
我们在这里还不只安装了cadvisor 还安装了prometheus的node-exporter 这个是监控linux的exporter

如果你不是一个懒人 没有上传文件准备里的东西到/root/目录下 你可以跟着我一步一步来
如果你使用了懒人包 自己进入cadvisor 运行 docker-compose -f cadvisor.yml up -d
创建一个cadvisor目录

cd
mkdir cadvisor

创建一个cadvisor.yml文件

vim cadvisor.yml

复制如下内容到cadvisor.yml

version: "3"
services:
  node-exporter:
      image: quay.io/prometheus/node-exporter
      container_name: mytest
      hostname: mytest
      restart: always
      ports:
        - "9100:9100"
  cadvisor:
      image: google/cadvisor:latest
      container_name: cadvisor
      hostname: cadvisor
      restart: always
      volumes:
          - /:/rootfs:ro
          - /var/run:/var/run:rw
          - /sys:/sys:ro
          - /var/lib/docker/:/var/lib/docker:ro
      ports:
          - "8080:8080"

启动cadvisor和node-exporter 容器

docker-compose -f cadvisor.yml up -d

验证是否启动成功
命令

docker ps | grep -E "mytest|cadvisor"

输出

[root@mytest cadvisor]# docker ps | grep -E "mytest|cadvisor"
37f78fb94186        quay.io/prometheus/node-exporter                                            "/bin/node_exporter"     4 hours ago         Up 4 hours          0.0.0.0:9100->9100/tcp                                                                       mytest
67478d6ac132        google/cadvisor:latest                                                      "/usr/bin/cadvisor -…"   4 hours ago         Up 4 hours          0.0.0.0:8080->8080/tcp                                                                       cadvisor
[root@mytest cadvisor]# 

到这里我们的cadvisor就安装完成了 还可以打开ip:8080验证cadvisor的安装 界面如下
在这里插入图片描述

部署Grafana

前面的安装了这么多 其实最后还是要给Grafana服务
进行到现在了点波关注咯

如果你不是一个懒人 没有上传文件准备里的东西到/root/目录下 你可以跟着我一步一步来
如果你使用了懒人包 自己进入grafana目录执行 docker-compose -f grafana.yml up -d
新建一个grafana的目录和data目录 并且给data目录权限

cd
mkdir grafana
mkdir data
chmod 777 data

新建一个grafana.yml文件

vim grafana.yml

复制如下文件到grafana.yml里

version: "3"
services:
  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - 3000:3000
    restart: always
    volumes:
      - ./data:/var/lib/grafana

启动grafana容器

docker-compose -f grafana.yml up -d

验证容器启动

docker ps grep | grafana

在浏览器输入ip:3000 访问grafana的后台 默认用户名: admin 密码: admin
在这里插入图片描述

后台界面
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTYwMDA4MDI4LWFiNzQzMzU5LTM0MjQtNGE0ZC04MTI1LTQzMThlOWM2NDNmZC5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=635&margin=[object Object]&name=image.png&originHeight=635&originWidth=1920&size=258793&status=done&style=none&width=1920)


Grafana配置

grafana已经安装好了 只要经过一些简单的配置就能监测Linux的状态

首先第一步就是配置源

grafana配置数据源

点击右侧的设置按钮->Data Sources -> Add data source
在这里插入图片描述

选择我们的Prometheus源
在这里插入图片描述

在URL 输入 http://ip:9090后点击Save & Test 出现 Data source is working即可
在这里插入图片描述

数据源配置完成

grafana配置linux监控面板(dashboard)

数据源配置完成后就需要配置监控面板了
grafana的官网提供了很多面板给我们选择

grafana面板地址: https://grafana.com/grafana/dashboards
排名第一的就是node exporter的面板 前面我们在cadvisor的时候也部署了一个node exporter 这里我们就利用这个面板来作为监控
在这里插入图片描述

导入Node exporter 面板
点击+号 选择import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1NjgxOTAyLTkyYTlhYTZiLTRhMTAtNDRmNy1hMzRhLTg3Yjk2MmQ0Y2ZhYy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=278&margin=[object Object]&name=image.png&originHeight=278&originWidth=248&size=27908&status=done&style=none&width=248)
在import via grafana.com下面的输入框中输入8919 点击locad

8919就是刚刚那个中文node exporter的面板id

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1NzI5MTUzLWQ3ZjQ4OWE2LTk1YmQtNGYyMy04ZmNmLTRmY2ZjOWNjY2U2MC5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=472&margin=[object Object]&name=image.png&originHeight=472&originWidth=456&size=17224&status=done&style=none&width=456)
在Name下面输入linux
然后数据源在下拉列表中选择Prometheus
点击import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1ODE4MjE1LTk3MDA2NzJhLTRjYmItNGNiNS1iMTdlLTA4OTgzN2JkMWE3MS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=499&margin=[object Object]&name=image.png&originHeight=499&originWidth=477&size=43941&status=done&style=none&width=477)
之后便进入了监控面板页面
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1OTMzMjI1LWExOWMyNDY0LWRlODktNDM2Zi1hZTU1LTQ3NWM1YjdmZjZkYy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=915&margin=[object Object]&name=image.png&originHeight=915&originWidth=1917&size=233499&status=done&style=none&width=1917)

grafana配置docker容器监控面板

导入Node exporter 面板
点击+号 选择import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1NjgxOTAyLTkyYTlhYTZiLTRhMTAtNDRmNy1hMzRhLTg3Yjk2MmQ0Y2ZhYy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=278&margin=[object Object]&name=image.png&originHeight=278&originWidth=248&size=27908&status=done&style=none&width=248)
在import via grafana.com下面的输入框中输入11558点击locad

11558是刚刚那个中文docker监控的面板id

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY2MDY5MzIzLWEyODBkNDNhLWM5YzEtNDZmZS1iM2M2LTIyYWMyNTc2ZTcyYS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=434&margin=[object Object]&name=image.png&originHeight=434&originWidth=390&size=16255&status=done&style=none&width=390)
在Name下面输入Docker monitoring
然后数据源在下拉列表中选择Prometheus
点击import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY2MjY5MDY3LWUzZTFiNWVlLWRhNjQtNGI4YS05YWJiLWY4OGZlYjhkNTBhMi5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=513&margin=[object Object]&name=image.png&originHeight=513&originWidth=464&size=43724&status=done&style=none&width=464)
之后便进入了监控面板页面
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY2Mjk4MDMxLTA0MzQ5YWNkLWY3NmYtNDljZC05YTQ4LTJhMzIyYjNlY2QyZC5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=855&margin=[object Object]&name=image.png&originHeight=855&originWidth=1856&size=109192&status=done&style=none&width=1856)

监控MySQL

MySQL使用Prometheus和gragana来监控

安装mysql的exporter

在基础环境篇中已经完成了docker容器里运行mysql的环节 这里结合Prometheus和grafana来对MySQL进行监控
首先进入到上篇中的mysql文件夹里

cd  mysql

编辑mysql.yml文件

vim mysql.yml

在mysql.yml的最后添加下面的代码

  exporter:
    container_name: mysql-exporter-dev
    image: prom/mysqld-exporter
    environment:
      - DATA_SOURCE_NAME=root:123456@(mysql:3306)/
    ports:
      - "9104:9104"

完整的mysql.yml如下

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
      
  exporter:
    container_name: mysql-exporter-dev
    image: prom/mysqld-exporter
    environment:
      - DATA_SOURCE_NAME=root:123456@(mysql:3306)/
    ports:
      - "9104:9104"

重新启动一下mysql的docker容器

docker-compose -f mysql.yml restart

等待mysql启动完毕

验证mysql-exporter是否正常

检查prometheus的web客户端 看mysql1是否正常
在浏览器输入IP:9090/targets
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY3MTc0NDYzLTZkMmU2ZThmLTAyZmEtNGRhMy05ZDg1LTIxYWQ0NTA5M2ZjZi5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=135&margin=[object Object]&name=image.png&originHeight=135&originWidth=1510&size=16757&status=done&style=none&width=1510)
看到mysql1正常以后进行grafana面板的配置

配置grafana的msyql监控面板

导入Node exporter 面板
点击+号 选择import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1NjgxOTAyLTkyYTlhYTZiLTRhMTAtNDRmNy1hMzRhLTg3Yjk2MmQ0Y2ZhYy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=278&margin=[object Object]&name=image.png&originHeight=278&originWidth=248&size=27908&status=done&style=none&width=248)
这里需要下载一个json文件 百度网盘: 地址 提取码:2tpw
在Upload .json file中上传下载的json文件
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY3OTUxOTYxLWUxYjc3ZTg3LTYwODMtNDc2ZC1iNmVjLTNjNzg2YzUwOWQ3Zi5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=450&margin=[object Object]&name=image.png&originHeight=450&originWidth=427&size=17988&status=done&style=none&width=427)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY3NTg4NjUzLTJlMzZkMjhhLTdmMWItNDBiNi1iMzY1LTAwN2YzNmNjOGExMS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=335&margin=[object Object]&name=image.png&originHeight=335&originWidth=360&size=29194&status=done&style=none&width=360)
点击import即可进入mysql的监控面板
进入mysql的监控面板后需要等待一会才能显示正常数据
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NjIxMTU0MDg4LTAxODMyNjc3LTY5YjEtNDM1Ni1iNjQxLWZhM2UzMWVkMjIzMi5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=680&margin=[object Object]&name=image.png&originHeight=680&originWidth=1805&size=136180&status=done&style=none&width=1805)
mysql监控面板

监控redis

在redis也是项目中非常重要的一个非关系的数据库
一个大型项目的redis挂了 高并发的时候就可能会有很多的请求直接打到mysql数据库 对于我们脆弱的mysql来说 太大了 是会受不了的
所以需要加入redis作为一个缓存机制
redis也就理所当然的需要监控起来

安装redis的exporter

配置redis的监控面板也和msyql的差不多
也是需要添加一个redis的exporter

修改redis的yml文件

vim redis.yml 

添加如下文件到redis.yml里
这里的REDIS_ADDR=换成你自己的ip

  redis_exporter:
    restart: always
    image: oliver006/redis_exporter
    container_name: redis_exporter 
    ports:
      - 9121:9121
    environment:
      - REDIS_ADDR=192.168.28.254:6379

重启redis

docker-compose -f redis.yml restart

验证redis的exporter是否正常

重启完成后在Prometheus里查看redis的exporter是否正常
在浏览器输入IP:9090/targets
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NjIxNTkwMDAxLTNjYjU5ZjE2LTQ4M2MtNDViNC1hMzE3LWE0OWM1MThmYjhkNy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=125&margin=[object Object]&name=image.png&originHeight=125&originWidth=1402&size=14821&status=done&style=none&width=1402)

配置grafana的redis监控面板

导入Node exporter 面板
点击+号 选择import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NTY1NjgxOTAyLTkyYTlhYTZiLTRhMTAtNDRmNy1hMzRhLTg3Yjk2MmQ0Y2ZhYy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=278&margin=[object Object]&name=image.png&originHeight=278&originWidth=248&size=27908&status=done&style=none&width=248)
在import via grafana.com下面的输入框中输入12328点击locad

12328就是redis监控的面板id

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NjIzMDQyNzE4LTU1ZDlkNTQwLWM4N2QtNGNhMy04ODk0LWMwMjBlYTI1MjhhMy5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=415&margin=[object Object]&name=image.png&originHeight=415&originWidth=359&size=15926&status=done&style=none&width=359)
然后数据源在下拉列表中选择Prometheus
点击import
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NjIzMTE2MjE0LTI0ZTI4MTQ1LTA3MjctNDg2NC1hODEyLTg3ZTA2NTBkYTdjMS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=497&margin=[object Object]&name=image.png&originHeight=497&originWidth=378&size=42092&status=done&style=none&width=378)
就进入到了redis的监控面板
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTY5NzEyNy8xNTk0NjIzMTkwODY1LTBmMDJkOWVjLTBlNmItNDRlOC1iZDk4LTY2Zjg4ZTEzOTk1Yi5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=843&margin=[object Object]&name=image.png&originHeight=843&originWidth=1835&size=149658&status=done&style=none&width=1835)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Zabbix的Java Gateway来监控Spring微服务的JVM。首先需要在Zabbix Server上安装Java Gateway,并在Zabbix Web界面上配置Java Gateway的主机和端口。然后在Spring微服务的JVM参数中添加JMX监控参数,并在Zabbix Web界面上添加JMX监控项和触发器来监控JVM的性能指标。具体的配置方法可以参考Zabbix官方文档或者相关的技术博客。 ### 回答2: Zabbix是一款流行的开源监控工具,可以用于监控各种服务器和应用程序。如果我们想要监控Spring微服务的JVM,可以通过以下步骤来实现。 首先,我们需要在Zabbix服务器上安装并配置Zabbix Agent。Zabbix Agent是一个在被监控主机上运行的软件,可以收集各种指标并将其发送到Zabbix服务器。 接下来,我们需要在Spring微服务的服务器上安装并配置Zabbix Agent。这样,Zabbix Agent将能够连接到Zabbix服务器,并传输JVM的指标数据。 然后,我们需要在Zabbix服务器上创建一个新的主机,用于监控Spring微服务的JVM。我们需要指定主机的IP地址和其他相关信息,并将其与之前安装的Zabbix Agent关联起来。 一旦主机创建完毕,我们可以开始配置监控项。监控项定义了我们希望收集的特定指标,如内存使用情况、垃圾回收时间等。对于JVM的监控,常见的监控项包括堆内存使用率、线程数、垃圾回收时间等。 配置完监控项后,我们还可以创建触发器和动作。触发器用于定义何时触发警报,而动作则定义了在触发警报时采取的操作,如发送电子邮件或短信通知。 最后,我们可以将监控结果以图表或图形的形式展示在Zabbix的仪表板上。这样,我们就可以实时监控Spring微服务的JVM性能,并及时进行故障排除和性能优化。 总而言之,通过安装并配置Zabbix Agent,创建主机、监控项、触发器和动作,并展示监控结果,我们可以使用Zabbix来监控Spring微服务的JVM。这样,我们可以及时发现和解决潜在的性能问题,提高应用程序的可靠性和可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值