Prometheus 接入传统JavaEE服务监控的一些思考

按惯例,先展示成果

工作中遇到一个项目,传统工程需要接入 Prometheus 监控,恰好之前接触 Nacos 的时候有用 Docker 部署过。

Nacos 官方镜像地址:

https://hub.docker.com/r/nacos/nacos-server

在 standalone-derby.yaml 中其实已经包含了 prometheus 和 grafana 的安装

version: "2"
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos-standalone
    environment:
    - PREFER_HOST_MODE=hostname
    - MODE=standalone
    volumes:
    - ./standalone-logs/:/home/nacos/logs
    - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
    - "8848:8848"
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/prometheus-standalone.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - nacos
    restart: on-failure
  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - 3000:3000
    restart: on-failure

我们加上一些 volume 映射,以确保数据不丢失。

version: "2"
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos-standalone
    environment:
    - PREFER_HOST_MODE=hostname
    - MODE=standalone
    volumes:
    - ./standalone-logs/:/home/nacos/logs
    - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    - ./data/nacos/:/home/nacos
    ports:
    - "8848:8848"
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/prometheus-standalone.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - nacos
    restart: on-failure
  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    volumes:
      - ./data/grafana/lib/:/var/lib/grafana
      - ./data/grafana/share/:/usr/share/grafana
    ports:
      - 3000:3000
    restart: on-failure

Prometheus 添加监控

参考这篇博客,非常详细,不做累述

监控神器普罗米修斯Prometheus安装配置

注意

在使用过程中,我发现每次重新 build Nacos,都会导致 node_exporter 停掉,9100无法监听。

prometheus 的 exporter 集合详见:https://github.com/prometheus?q=_exporter

传统JavaEE服务如何监控

先从 springboot 项目尝试

springboot 项目接入prometheus的方法有多种,我们采用 jmx_exporter 的方法接入,步骤如下:

1、准备 jmx_prometheus_javaagent-0.11.0.jar 和 config.yaml;

2、修改 Dockerfile

3、修改 docker-compose.yml,暴露 18991 端口

4、修改 prometheus-standalone.yaml,添加 job_name

- job_name: 'job-jvm'
    static_configs:
    - targets: ['172.16.8.139:18990', '172.16.8.139:18991']

注意:

1、0.12.0会报错:Usage: -javaagent:/path/to/JavaAgent.jar=[host:]<port>:<yaml configuration file>,使用 0.11.0 版本解决。

2、官方 config.yaml 里的demo会报错:At most one of hostPort and jmxUrl must be provided,去掉 hostPort 配置即可。

Jetty9.4+jdk7的web应用如何安装监控

根据 springboot 应用的逻辑,我们大概能了解到安装的基本注意事项,Jetty9.4 的启动方法就是 java -jar start.jar,那么将相关参数配置在启动文件里:

JAVA=/app/java/jdk1.7.0_91/bin/java
JAVA_OPTIONS="-javaagent:./jmx_prometheus_javaagent-0.11.0.jar=18990:config.yaml -Xmn256M -Xms1024M -Xmx1024M -XX:MaxPermSize=256M -Xss256k -Xconcurrentio -XX:SurvivorRatio=5 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=90 -XX:MaxDirectMemorySize=256M -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Dsun.net.inetaddr.ttl=60 -Dorg.mortbay.jetty.Request.maxFormContentSize=-1"

 最终,Prometheus 设置监听 18990 即可。

问题:

看下一下 jmx_prometheus_javaagent-0.11.0.jar 的编译环境是 java8,为什么用 Jetty9.4+jdk7 启动成功?

collectd如何安装

网上还有部分帖子主题是:collectd+infludb+grafana实现tomcat JVM监控

于是尝试安装了下 collectd,在 CentOS 下请参考:centos7 yum安装collectd + 报错处理

但是在尝试修改 collectd.conf 后,启动一直报错,由于时间关系,这个方案没有继续下去。

如何修改 grafana 的账号密码

年纪略大,一不小心设置的密码结果忘记了,参考 Grafana 重置 admin 密码 进行密码重置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值