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 密碼 進行密碼重置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章