美文网首页测试
Prometheus+Grafana监控安装及配置JVM实现企业

Prometheus+Grafana监控安装及配置JVM实现企业

作者: 斯文败类_L先生 | 来源:发表于2022-07-20 08:29 被阅读0次

    背景

    本人Java开发工程师一枚,主攻后端,需要搭建一套Prometheus+Grafana的监控系统,采用企业微信告警通知。在网上各种查阅资料的同时,发现很多资料都大致相通且不完整,踩坑无数,经过多日钻研后,最终完成了整个搭建任务,特此记录下整个安装操作过程,希望能帮助各位。同时也请各位大神指导并提出意见,在此只能傻瓜式的记录下操作过程,如果有幸有哪位运维大神看到,还请指正不足之处,感激不尽[抱拳]

    一、Prometheus下载安装

    Promethus官网下载地址:https://prometheus.io/download/

    image.png

    Xshell连接服务器依次执行以下命令:

    进入local目录下

    cd /usr/local
    

    上传下载好的文件包prometheus-2.36.2.linux-amd64.tar.gz (输入以下命令后回车)

    rz
    

    解压文件

    tar -zxvf prometheus-2.36.2.linux-amd64.tar.gz
    

    将解压后的文件夹重命名为prometheus

    mv prometheus-2.36.2.linux-amd64 /usr/local/prometheus
    

    进入prometheus目录下

    cd prometheus/
    

    编辑配置文件

    vim prometheus.yml
    

    追加以下配置 (注意格式、注意修改自己的ip)

    - job_name: 'mysql'
      static_configs:
      - targets: ['自己的ip:9104']
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc → :wq! → 回车
    

    校验修改后的配置文件格式是否正确

    ./promtool check config prometheus.yml
    

    校验配置文件正常结果展示(非命令操作)

    SUCCESS: prometheus.yml is valid prometheus config file syntax
    

    封装Prometheus启动文件(输入以下命令后回车)

    vim start.sh
    

    输入以下内容

    nohup ./prometheus --config.file=prometheus.yml &
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc → :wq! → 回车
    

    给启动文件执行权限(输入以下命令后回车)

    chmod +x start.sh 
    

    启动Prometheus

    ./start.sh
    

    二、mysqld_exporter下载安装(mysql监控插件)

    mysqld_exporter插件官网下载地址:https://prometheus.io/download/

    image.png
    Xshell连接服务器依次执行以下命令:
    进入local目录下
    cd /usr/local
    

    上传下载好的文件包mysqld_exporter-0.12.1.linux-amd64.tar.gz(输入以下命令后回车)

    rz
    

    解压文件

    tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
    

    将解压后的文件夹重命名为mysqld_exporter

    mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
    

    登录mysql的root账户(回车后输入密码,此操作需在已安装mysql的前提下执行)

    mysql -uroot -p
    

    设置mysql密码策略:密码长度为6

    set global validate_password_length=6;
    

    创建用户名为my的账户 密码为Abc@12 (此密码必须根据上边设置的策略长度为6,否则重新设置策略)

    CREATE USER 'my'@'%' IDENTIFIED BY 'Abc@12' WITH MAX_USER_CONNECTIONS 3;
    

    设置my账户的权限

    GRANT ALL PRIVILEGES ON *.* TO 'my'@'%' IDENTIFIED BY 'Abc@12';
    

    刷新权限

    flush privileges;
    

    退出mysql数据库编辑 (输入exit后点击回车)

    exit → 回车
    

    进入mysqld_exporter目录下

    cd mysqld_exporter
    

    创建配置文件my.cnf

    vim my.cnf
    

    输入以下内容 (注意修改自己的ip,host、port为mysql链接,user、password为mysql的账号密码 ) 复制粘贴命令为Shift+Insert

    [client]
    host=自己的ip
    port=3306
    user=root
    password=root
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    进入/usr/lib/systemd/system/目录下

    cd /usr/lib/systemd/system/
    

    创建mysqld_exporter启动脚本

    vi mysqld_exporter.service
    

    输入以下内容

    [Unit]
    Description=mysqld_exporter
    Documentation=https://prometheus.io
    Wants=network-online.target
    After=network.target
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local /mysqld_exporter/my.cnf
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    重新加载配置文件

    systemctl daemon-reload
    

    启动mysqld_exporter服务 (停止命令:systemctl stop mysqld_exporter.service)

    systemctl start mysqld_exporter.service
    

    查看mysqld_exporter服务状态

    systemctl status mysqld_exporter.service
    

    设置开机启动

    systemctl enable mysqld_exporter.service
    

    访问 IP:9104 地址 (下方图示)


    image.png

    点击 Metrics (下方图示为安装成功)


    image.png

    访问http://ip:9090/targets (如下图示mysql监控成功)

    1658287753917.png

    注:如没有任何展示可重启Prometheus(查看9090端口进程,kill干掉进程后,进入prometheus目录下执行./start.sh)

    三、Grafana 安装

    Grafana官网(版本8.3.3):https://grafana.com/grafana/download/8.3.3?pg=get&plcmt=selfmanaged-box1-cta1

    image.png
    Xshell连接服务器依次执行以下命令:
    进入local目录下
    cd /usr/local
    

    执行下载命令,等待下载完成

    wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.3-1.x86_64.rpm
    

    执行安装

    sudo yum install grafana-enterprise-8.3.3-1.x86_64.rpm
    

    进入/etc/grafana目录下

    cd /etc/grafana
    

    编辑grafana.ini配置文件

    vim grafana.ini
    

    修改以下内容

    data目录位置配置:
    [paths]
    # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
    data = /opt/grafana/data
    
    # Temporary files in `data` directory older than given duration will be removed
    temp_data_lifetime = 240h
    
    # Directory where grafana can store logs
    logs = /opt/grafana/logs
    
    database配置:
    [database]
    # You can configure the database connection by specifying type, host, name, user and password
    # as separate properties or as on string using the url properties.
    
    # Either "mysql", "postgres" or "sqlite3", it's your choice
    type = mysql
    host = 自己的ip:3306
    name = grafana
    user = root
    # If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
    password = root
    
    smpt配置:
    [smtp]
    ;enabled = false
    ;host = smtphz.qiye.163.com
    ;user = 发送邮件账号
    # If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
    ;password = 发送邮件账号密码
    ;cert_file =
    ;key_file =
    ;skip_verify = false
    ;from_address = admin@grafana.localhost
    ;from_name = Grafana
    # EHLO identity in SMTP dialog (defaults to instance_name)
    ;ehlo_identity = dashboard.example.com
    # SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
    ;startTLS_policy = NoStartTLS
    
    [emails]
    ;welcome_email_on_sign_up = false
    ;templates_pattern = emails/*.html, emails/*.txt
    ;content_types = text/html
    

    启动Grafana服务

    systemctl restart grafana-server.service
    

    设置开机启动grafana-server

    systemctl enable grafana-server.service
    

    浏览器访问 IP:3000 默认用户密码都为admin


    image.png image.png

    配置prometheus 数据源

    image.png image.png image.png image.png

    导入mysql dashboards

    image.png image.png

    四、java项目监控 & 企业微信告警

    Prometheus官网下载alertmanager:https://prometheus.io/download/

    image.png

    Xshell连接服务器依次执行以下命令:
    进入local目录下

    cd /usr/local
    

    上传下载好的安装包alertmanager-0.24.0.linux-amd64.tar.gz(输入以下命令后回车)

    rz
    

    解压

    tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz
    

    将解压后的文件夹更名为alertmanager

    mv alertmanager-0.24.0.linux-amd64 alertmanager
    

    进入alertmanager目录下

    cd alertmanager
    

    创建grafana.yml配置文件

    vim grafana.yml
    

    输入以下内容 (获取corp_id、agent_id、api_secret、to_party信息方式:https://www.jianshu.com/p/5704622052de

    global:
      resolve_timeout: 5m
    
    templates:
    - '/usr/local/alertmanager/wechat.tmpl'  #微信模板,同级目录下wechat.tmpl
    
    route:
      group_by: ['alertname']
      group_wait: 5s
      #同一组内警报,等待group_interval时间后,再继续等待repeat_interval时间
      group_interval: 1m
      #当group_interval时间到后,再等待repeat_interval时间后,才进行报警
      repeat_interval: 5m
      receiver: 'wechat'
    receivers:
      - name: 'wechat'
        wechat_configs:
        - corp_id: 'xxxxxxxxxxxxx'  #企业微信ID
          agent_id: 'xxxxxxx'  #应用ID
          api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #应用密码
          to_party: 'xxxxxx' #部门id(部门所属人员均可接收到)   单个账号发送: to_user: 'xxxxx' #多人“,”逗号隔开
          send_resolved: true
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    在/usr/local/alertmanager/创建上面配置文件中使用到的wechat.tmpl模板

    vim wechat.tmpl
    

    输入以下内容

    {{ define "wechat.default.message" }}
    {{- if gt (len .Alerts.Firing) 0 -}}
    {{- range $index, $alert := .Alerts -}}
    {{- if eq $index 0 }}
    ==========异常告警==========
    告警类型: {{ $alert.Labels.alertname }}
    告警级别: {{ $alert.Labels.severity }}
    告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
    故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
    {{- if gt (len $alert.Labels.instance) 0 }}
    实例信息: {{ $alert.Labels.instance }}
    {{- end }}
    {{- if gt (len $alert.Labels.namespace) 0 }}
    命名空间: {{ $alert.Labels.namespace }}
    {{- end }}
    {{- if gt (len $alert.Labels.node) 0 }}
    节点信息: {{ $alert.Labels.node }}
    {{- end }}
    {{- if gt (len $alert.Labels.pod) 0 }}
    实例名称: {{ $alert.Labels.pod }}
    {{- end }}
    ============END============
    {{- end }}
    {{- end }}
    {{- end }}
    {{- if gt (len .Alerts.Resolved) 0 -}}
    {{- range $index, $alert := .Alerts -}}
    {{- if eq $index 0 }}
    ==========异常恢复==========
    告警类型: {{ $alert.Labels.alertname }}
    告警级别: {{ $alert.Labels.severity }}
    告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
    故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
    恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
    {{- if gt (len $alert.Labels.instance) 0 }}
    实例信息: {{ $alert.Labels.instance }}
    {{- end }}
    {{- if gt (len $alert.Labels.namespace) 0 }}
    命名空间: {{ $alert.Labels.namespace }}
    {{- end }}
    {{- if gt (len $alert.Labels.node) 0 }}
    节点信息: {{ $alert.Labels.node }}
    {{- end }}
    {{- if gt (len $alert.Labels.pod) 0 }}
    实例名称: {{ $alert.Labels.pod }}
    {{- end }}
    ============END============
    {{- end }}
    {{- end }}
    {{- end }}
    {{- end }}
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    在当前目录下(/usr/local/alertmanager/)封装Grafana启动文件(输入以下命令后回车)

    vim start.sh
    

    输入以下内容

    nohup ./alertmanager --config.file=grafana.yml --storage.path=data/ --log.level=debug &
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc → :wq! → 回车
    

    给启动文件执行权限(输入以下命令后回车)

    chmod +x start.sh 
    

    启动Grafana

    ./start.sh
    

    访问 IP:9093/#/status 以下图示为成功


    1.png

    五、node_exporter下载安装(CPU监控插件)

    Prometheus官网下载node_exporter:https://prometheus.io/download/

    image.png

    Xshell连接服务器依次执行以下命令:
    进入local目录下

    cd /usr/local
    

    上传下载好的安装包node_exporter-1.3.1.linux-amd64.tar.gz(输入以下命令后回车)

    rz
    

    解压

    tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz
    

    将解压后的文件夹更名为node_exporter

    mv node_exporter-1.3.1.linux-amd64.tar.gz node_exporter
    

    进入node_exporter目录下

    cd node_exporter
    

    在当前目录下(/usr/local/node_exporter/)封装node_exporter启动文件(输入以下命令后回车)

    vim start.sh
    

    输入以下内容

    nohup ./node_exporter & > node.log
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc → :wq! → 回车
    

    给启动文件执行权限(输入以下命令后回车)

    chmod +x start.sh 
    

    启动node_exporter

    ./start.sh
    

    访问 IP:9100/metrics 以下图示为成功


    image.png

    六、添加JMX配置,并修改项目启动方式添加JMX(所有服务器运行;端口可变,这里使用3010)

    Xshell连接服务器依次执行以下命令:
    进入local目录下

    cd /usr/local
    

    创建jmx文件夹

    mkdir jmx
    

    进入jmx文件夹下

    cd jmx
    

    下载jmx_prometheus_javaagent-0.12.0.jar文件包

    wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar
    

    创建配置文件(输入以下命令后回车)

    vim config.yml
    

    输入以下内容

    lowercaseOutputLabelNames: true
    lowercaseOutputName: true
    whitelistObjectNames: ["java.lang:type=OperatingSystem"]
    blacklistObjectNames: []
    rules:
      - pattern: 'java.lang<type=OperatingSystem><>(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<type=OperatingSystem><>((?!process_cpu_time)\w+):'
        name: os_$1
        type: GAUGE
    

    强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    创建java文件夹

    mkdir java
    

    进入java文件夹

    cd java
    

    上传要运行的java项目jar包(输入以下命令后回车,需先安装java环境jdk)

    rz
    

    在当前目录下( /usr/local/jmx/java/)封装java项目启动文件(输入以下命令后回车)

    vim start.sh
    

    输入以下内容(注意修改jar包名称, 注意3010为jmx_prometheus_javaagent端口号,非项目端口号)

    nohup java -javaagent:/usr/local/jmx/jmx_prometheus_javaagent-0.12.0.jar=3010:/usr/local/jmx/config.yml -Xms100m -Xmx1024m -Dfile.encoding=utf-8 -jar /usr/local/jmx/java/上传的java项目包名称.jar
    

    强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc → :wq! → 回车
    

    给启动文件执行权限(输入以下命令后回车)

    chmod +x start.sh 
    

    启动项目

    ./start.sh
    

    访问 IP::3010 以下图示为成功


    image.png

    七、配置node_exporter和jmx到Prometheus并启动

    进入到prometheus目录下

    cd /usr/local/prometheus
    

    编辑配置文件

    vim prometheus.yml
    

    追加以下内容(注意修改自己的ip)

    - job_name: 'node'
      static_configs:
      - targets: ['自己的ip:9100']
    
    - job_name: 'java'
      static_configs:
      - targets: ['自己的ip:3010']
    

    强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)

    Esc -> :wq! -> 回车
    

    查看prometheus进程(回车后可查看进程的PID。lsof命令可能需要安装,百度查看下怎样安装很简单。)

    lsof -i:9090
    

    干掉进程(注意修改进程的PID)

    kill 进程的PID
    

    在当前目录下(/usr/local/prometheus)启动Prometheus

    ./start.sh
    

    访问 IP:9090 以下图示为node_exporter和jmx配置成功(输入 JVM 和 node查看)


    image.png image.png

    八、Grafana配置企业微信报警

    1658298122929.png 1658298027911.png 2.png 3.png 1658298232710.png image.png image.png image.png

    九、测试消息接收

    在企业微信【应用管理 → 引用】添加信任ip地址


    1.jpg

    查看运行的java进程(上边设置的端口是3010) 记录进程PID

    lsof -i:3010
    

    干掉进程

    kill 进程PID
    

    企业微信接收消息下方图示(可能会有延迟,几分钟或十几分钟不等)


    1658299868964.png

    进入jar目录下

    cd /usr/local/jmx/java/
    

    再次启动项目

    ./start.sh
    

    企业微信收到以下信息


    1658300487042.png

    相关文章

      网友评论

        本文标题:Prometheus+Grafana监控安装及配置JVM实现企业

        本文链接:https://www.haomeiwen.com/subject/rspeirtx.html