按慣例,先展示成果
工作中遇到一個項目,傳統工程需要接入 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 添加監控
參考這篇博客,非常詳細,不做累述
注意:
在使用過程中,我發現每次重新 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 密碼 進行密碼重置。