• Grafana+Prometheus+jmx实现微服务与多台服务器的jvm监控


    Grafana+Prometheus安装文档 ——基于 RPM 的 Linux(CentOS、Fedora、OpenSuse、Red Hat)上安装

    工具版本

    jmx_prometheus_javaagent-0.16.1.jar
    grafana-enterprise-8.3.3-1.x86_64
    node_exporter-1.3.1.linux-amd64
    prometheus-2.32.1.linux-amd64
    仪表盘官网 https://grafana.com/grafana/dashboards/8563

    一、下载安装配置Grafana

    1.下载Grafana

    linux环境下输入命令:
    wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.3-1.x86_64.rpm

    或者 在官网下载后传到linux: https://grafana.com/grafana/download

    需要选择对应的版本。

    2.安装Grafana

    在linux系统输入: sudo yum install grafana-enterprise-8.3.3-1.x86_64.rpm

    在安装过程中需要下载相关依赖 输入:y

    3.启动服务器

    可以选择systemdinit.dbinary方式启动
    我是用了init.d方法启动服务器
    要启动服务并验证服务是否已启动:
    启动sudo service grafana-server start
    查看状态sudo service grafana-server status
    停止 sudo service grafana-server stop
    重启sudo service grafana-server restart

    将 Grafana 服务器配置为在开机时启动
    sudo /sbin/chkconfig --add grafana-server

    4.默认配置

    安装二进制文件到 /usr/sbin/grafana-server
    将 init.d 脚本复制到 /etc/init.d/grafana-server
    将默认文件(环境变量)安装到 /etc/sysconfig/grafana-server
    将配置文件复制到 /etc/grafana/grafana.ini
    安装 systemd 服务(如果 systemd 可用)名称 grafana-server.service
    默认配置使用日志文件在 /var/log/grafana/grafana.log
    默认配置指定一个 sqlite3 数据库在 /var/lib/grafana/grafana.db

    5.登录

    默认:
    网址 http://localhost:3000/login
    账号:admin
    密码:admin

    初次登录会提示修改密码。

    二、下载安装配置node_exporter节点导出器

    1.下载node_exporter

    https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

    2.安装node_exporter

    tar -xvfz node_exporter-1.3.1.linux-amd64.tar.gz
    cd node_exporter-1.3.1.linux-amd64
    ./node_exporter
    
    • 1
    • 2
    • 3

    会看到这样的输出,表明节点导出器现在正在运行并在端口 9100 上公开指标:

    INFO[0000] Starting node_exporter (version=0.16.0, branch=HEAD, revision=d42bd70f4363dced6b77d8fc311ea57b63387e4f)  source="node_exporter.go:82"
    INFO[0000] Build context (go=go1.9.6, user=root@a67a9bc13a69, date=20180515-15:53:28)  source="node_exporter.go:83"
    INFO[0000] Enabled collectors: source="node_exporter.go:90"
    INFO[0000]  - boottime source="node_exporter.go:97"
    ...
    INFO[0000] Listening on :9100 source="node_exporter.go:111"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可通过访问 http://localhost:9100/metrics 来验证是否正在导出指标.或者执行以下命令

    curl http://localhost:9100/metrics
    
    • 1

    三、下载安装配置JMX Exporter

    1.下载

    因为使用的是jdk8,所以需要下载以下jar包:
    https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar

    2.运行

    下载jar包之后,只需输入以下命令(config.yml为自己配置的yml文件,在监控jvm相关配置里配置,yourJar.jar为需要代理的jar文件):
    官网命令:
    java -javaagent:/export/grafana/jmx/jmx_prometheus_javaagent-0.16.1.jar=3010:config.yml -jar yourJar.jar

    根据需要修改之后:
    nohup java -javaagent:/export/grafana/jmx/jmx_prometheus_javaagent-0.16.1.jar=3010:/export/grafana/jmx/simple-config.yml -jar demo1-0.0.1-SNAPSHOT.jar &

    四、配置Prometheus

    1、安装 Prometheus

    tar -xvfz prometheus-2.32.1.linux-amd64.tar.gz
    
    • 1

    开启Prometheus:

    ./prometheus --config.file=prometheus.yml &
    
    • 1

    由于Prometheus默认端口9090被占用 ,需要修改默认端口
    在prometheus.yml文件中 修改端口号为9101;

    并运行如下命令,通过9101端口监听并开始热启动:

    nohup ./prometheus --web.enable-admin-api --web.enable-lifecycle --config.file=prometheus.yml --web.listen-address=:9101 &
    
    • 1

    启动热启动:

    curl -XPOST http://localhost:9090/-/reload
    
    • 1

    查看所有命令行参数:

    ./prometheus -h
    
    • 1

    使用参数详解:

    –config.file=“prometheus.yml” 用于选择Prometheus的运行配置文件
    –web.listen-address=“0.0.0.0:9090” 用于监听UI、API、和数据的地址

    –web.enable-lifecycle 开启热启动,可通过http请求来关机和重启

    –web.enable-admin-api 设置管理控制操作的api端点

    2、在 Grafana Explore 视图中检查 Prometheus 指标

    通过访问 http://localhost:9090,图页面:/graph ,metrics页面: /metric
    可以查看到监控的相关视图信息。

    五、监控jvm相关配置

    1、配置jmx_exporter

    在jmx目录下创建一个simple-config.yml(名字可以随意起)文件,并在其中添加配置
    ---   
    lowercaseOutputLabelNames: true
    lowercaseOutputName: true
    whitelistObjectNames: ["java.lang:type=OperatingSystem"]
    blacklistObjectNames: []
    rules:
      - pattern: 'java.lang<>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
        name: os_$1_bytes
        type: GAUGE
        attrNameSnakeCase: true
      - pattern: 'java.lang<>((?!process_cpu_time)\w+):'
        name: os_$1
        type: GAUGE
    attrNameSnakeCase: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    如下为所使用配置相关介绍:
    名称 描述

    lowercaseOutputName 是否把指标名称转换为小写,默认为false。
    lowercaseOutputLabelNames 是否把标签名称转换为小写,默认为false
    rules 一个按顺序引用的规则列表,处理过程会在第一条规则匹配上时停止。未匹配上的atrributes则不会被收集。默认以默认格式收集所有指标
    pattern 匹配每一个bean attribute(属性)的正则样式。该样式不是锚定的。可以设置正则捕获组用与其他配置项(如上面的样例
    name: cassandra_$1_$2)。默认匹配所有格式。 name 指标名。可以引用
    pattern中设置的捕获组。如果没有指定则使用默认格式。如果为空,此attribute的处理会停止且没有输出。
    value 指标值。静态值和引用pattern捕获组均可。如果没指定则抓取mBean attribute对应的value值。
    labels 标签名:标签值 形式的键值对。可引用捕获组。使用时必须配置 name 项。如果没有指定并且没有使用默认格式,则不会输出标签。
    whitelistObjectNames 查询对象白名单,默认是所有mBeans对象。不在白名单则不会被查询。支持正则匹配。
    blacklistObjectNames 查询对象黑名单,默认无。支持正则匹配。
    attrNameSnakeCase 将attribute名称 转换为蛇形格式。例如 anAttrName 转换为an_attr_name。默认为false

    2、配置Prometheus

    修改prometheus.yml文件(红色为新增或修改的)

    # 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=` to any timeseries scraped from this config.
      - job_name: "prometheus"
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
        - targets: ["localhost:9101"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    采集每台服务器node exporter监控数据

      - job_name: 'node'
        static_configs:
        - targets: ['192.168.4.249:9100','localhost:9100']
    #JMX jmx监控的进程
      - job_name: 'jvmmonitor'
        static_configs:
        - targets: ['localhost:3010']
          labels:
            instance: jvmmonitor1  
        - targets: ['localhost:3011']
          labels:
            instance: jvmmonitor2
        - targets: ['192.168.4.249:3010']
          labels:
            instance: jvmmonitor3
        - targets: ['192.168.4.249:3011']
          labels:
            instance: jvmmonitor4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    启动热启动:

    curl -XPOST http://localhost:9090/-/reload
    
    • 1

    六、在Grafana上配置Prometheus数据源并创建仪表盘

    仪表盘配置,在Grafana界面上create ->import
    在官网https://grafana.com/grafana/dashboards/8563导入JVM dashboard,输入8563

    七、多台服务器部署监控

    1、在所监控的服务器上安装node_exporterjmx

    在需要监控的服务器上下载安装配置 node_exporter 与 jmx即可
    可查看安装步骤二、三

    在监控服务器上安装Grafana、Prometheus即可

    2、修改配置

    在监控服务器的Prometheus.yml进行修改,加入所监控的node_exporter与 jmx的ip与端口信息(并通过label标签对每个监控的进程进行备注,方便查看):

    采集每台服务器node exporter监控数据

      - job_name: 'node'
        static_configs:
        - targets: ['192.168.4.249:9100','localhost:9100']
    #JMX jmx监控的进程
      - job_name: 'jvmmonitor'
        static_configs:
        - targets: ['localhost:3010']
          labels:
            instance: jvmmonitor1  
        - targets: ['localhost:3011']
          labels:
            instance: jvmmonitor2
        - targets: ['192.168.4.249:3010']
          labels:
            instance: jvmmonitor3
        - targets: ['192.168.4.249:3011']
          labels:
            instance: jvmmonitor4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    Rxjs TakeUntil 操作符的学习笔记
    动态内存管理
    闭包的理解
    hive 谓词下推实例分析(on与where的区别)
    面试高频手撕算法 - 01背包系列
    Unity之ShaderGraph如何实现光边溶解
    MySQL|相关概念及规则
    【数据库数据恢复】linux操作系统下MYSQL数据库恢复案例
    js判断变量数据类型的几种常用方法
    Developer Machines FireSolution调色板实现
  • 原文地址:https://blog.csdn.net/qq2632246528/article/details/122145086