一、环境部署
yum search java | grep jdk yum install -y java-11-openjdk-devel
二、监控java应用(tomcat/jar)
JMX exporter 负责收集 Java 虚拟机信息---没举例,等以后再做测试
进入到tomcat安装目录,vim
PROMETHEUS_JMX_EXPORTER_OPTS="-javaagent:../prometheus-exporter/jmx_prometheus_javaagent-0.18.0.jar=12345:../prometheus-exporter/tomcat.yml" JAVA_OPTS="-Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=2048m -Xss1024K $PROMETHEUS_JMX_EXPORTER_OPTS"
三、监控java应用(springboot)
分4个步骤
1、引入maven依赖
2、application.propertiesl配置
3、prometheus配置采集springboot2.x应用提供的监控样本数据
4、grafana将prometheus作为数据源进行可视化展示
3.1 springboot项目(二选一)
引入maven依赖
修改pom.xml添加如下代码,引入Spring Boot Actuator的相关依赖。
<!-- spring-boot-actuator依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- prometheus依赖 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
application.propertiesl配置
在application.properties中添加相关配置暴露监测数据端口,如果是application.yaml格式,需要转成yaml
出于安全考虑,默认情况下除了/health和/info之外的所有actuator都是关闭的
server.port=8081 spring.application.name=springboot-demo management.endpoints.web.exposure.include=prometheus,health #management.endpoints.web.exposure.include=* #management.endpoints.web.exposure.exclude=env,beans management.metrics.tags.application=${spring.application.name}
3.2 使用现成的springboot项目(二选一)
docker安装
提前把springboot项目添加了依赖,并开启了prometheus,封装成镜像,服务器上安装的CAdvisor
已经把8080端口占用了。所以映射为8081端口
docker run -d --restart=always -p 8081:8080 --name springboot-demo linge365/springboot-demo
检查:
http://192.168.10.100:8081/actuator/prometheus
3.3 Prometheus配置
prometheus配置采集springboot2.x的应用target提供的数据
cd /data/docker-prometheus #在scrape_configs(搜刮配置):下面增加如下配置: cat >> prometheus/prometheus.yml << "EOF" # Spring Boot 2.x 应用数据采集配置 - job_name: 'springboot-demo' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['192.168.10.100:8081'] EOF
重新加载:curl -X POST http://localhost:9090/-/reload
查看:
http://192.168.10.14:9090/graph
http://192.168.10.14:9090/targets?search=
3.4 监控指标
process_files_max_files # 最大文件处理数量 tomcat_sessions_active_current_sessions # Tomcat 当前活跃 session 数量 tomcat_sessions_alive_max_seconds # Tomcat session 最大存活时间 jvm_buffer_total_capacity_bytes # 预估的池中缓冲区的总容量 jvm_threads_daemon_threads # 当前守护进程的线程数量 tomcat_global_request_max_seconds{name="http-nio-8080",} # 全局最长一次请求的时间 tomcat_sessions_active_max_sessions # 最大活跃 session 数量 system_cpu_usage # CPU 利用率 jvm_buffer_memory_used_bytes # 预估 Java 虚拟机用于此缓冲池的内存 jvm_classes_loaded_classes # 当前在 Java 虚拟机中加载的类的数量 jvm_memory_committed_bytes # 为 Java 虚拟机提交的内存量(以字节为单位) jvm_threads_live_threads # 当前线程数,包括守护进程和非守护进程的线程 tomcat_threads_config_max_threads # 配置的 Tomcat 的最大线程数 tomcat_global_received_bytes_total # Tomcat 接收到的数据量 tomcat_global_sent_bytes_total # Tomcat 发送的数据量 tomcat_threads_current_threads # Tomcat 当前的线程数 tomcat_sessions_created_sessions_total # Tomcat 创建的 session 数 system_load_average_1m # 在一段时间内,排队到可用处理器的可运行实体数量和可用处理器上运行的可运行实体数量的总和的平均值 tomcat_sessions_expired_sessions_total # 过期的 session 数量 jvm_buffer_count_buffers # 预估的池中的缓冲区数量 jvm_memory_used_bytes# JVM 内存使用量 process_uptime_seconds # Java 虚拟机的正常运行时间 jvm_gc_memory_allocated_bytes_total # 增加一个 GC 到下一个 GC 之后年轻代内存池的大小增加 jvm_gc_pause_seconds_count # GC暂停耗时数量和总时间 jvm_gc_pause_seconds_sum jvm_gc_pause_seconds_max tomcat_sessions_rejected_sessions_total # 被拒绝的 session 总数 jvm_gc_live_data_size_bytes# Full GC 后的老年代内存池的大小 tomcat_threads_busy_threads # Tomcat 繁忙线程数 jvm_threads_peak_threads # 自 Java 虚拟机启动或峰值重置以来的最高活动线程数 jvm_threads_states_threads # 当前具有 NEW 状态的线程数 jvm_gc_max_data_size_bytes # jvm_gc内存池的最大大小 http_server_requests_seconds_count #某个接口的请求数量和请求总时间 http_server_requests_seconds_sum http_server_requests_seconds_max jvm_gc_memory_promoted_bytes_total # GC之前到GC之后的老年代内存池大小的正增加计数 # 日志按级别计数 logback_events_total{application="prometheus-demo",level="info",} 7.0 logback_events_total{application="prometheus-demo",level="trace",} 0.0 logback_events_total{application="prometheus-demo",level="warn",} 0.0 logback_events_total{application="prometheus-demo",level="debug",} 0.0 logback_events_total{application="prometheus-demo",level="error",} 0.0 process_start_time_seconds # 启动时间 process_files_open_files # 打开文件描述符的数量 tomcat_global_error_total # 异常数量 jvm_memory_max_bytes # 可用于内存管理的最大内存量(以字节为单位) process_cpu_usage # 最近的 CPU 利用率 jvm_classes_unloaded_classes_total # 自 Java 虚拟机开始执行以来卸载的类总数 system_cpu_count # CPU 核数 tomcat_global_request_seconds_count # 全局请求总数和总耗时 tomcat_global_request_seconds_sum
3.5 触发器
cat >> prometheus/rules/springboot.yml <<"EOF" groups: - name: SprinBoot rules: - alert: SprinBooErrorEvents expr: increase(logback_events_total{level="error"}[2m]) > 0 for: 2m labels: severity: warning annotations: summary: "Springboot错误事件 容器: $labels.instance" description: "在过去2分钟有新的{{ $value }}个错误事件" EOF
重新加载配置:
curl -X POST http://localhost:9090/-/reload
检查:
http://192.168.10.14:9090/alerts?search=
http://192.168.10.14:9090/rules
3.6 grafana dashboard 数据展示
grafana将prometheus作为数据源进行可视化展示 https://grafana.com/grafana/dashboards/12856-jvm-micrometer/ # 1 SLS JVM监控大盘 https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ # JVM(Micrometer) https://grafana.com/grafana/dashboards/10280 # Sprint Boot 2.1 Statistics https://grafana.com/grafana/dashboards/12900-springboot-apm-dashboard/ # 监控数据库连接池dashboard hikari连接池:https://grafana.com/grafana/dashboards/6083 # SpringBoot HikariCP /JDBC druid连接池:https://grafana.com/grafana/dashboards/11157 # Druid Connection Pool Dashboard
标签:Java,监控,tomcat,--,grafana,prometheus,threads,jvm,total From: https://www.cnblogs.com/yangmeichong/p/18156411