Java应用系统监控看这篇就够了


文章目录

  • 业务背景
  • 系统监控发展历程
  • 技术方案
    • 日志监控技术方案
      • Grafana+阿里云SLS日志服务
    • 分布式链路追踪技术方案
      • 阿里云jaeger方案
      • 开源框架skywalking
    • 指标监控技术方案
      • SpringBoot Actuator+Jolokia+Telegraf+Influxdb+Grafana 方案
      • Springboot+Springboot admin方案
      • Springboot+ SOFA-Lookout + Prometheus +Grafana方案
      • SpringBoot Actuator+Prometheus+Grafana 方案

本文主要介绍了系统监控的发展以及日志监控、分布式链路跟踪和指标监控的技术方案。

业务背景


随着互联网行业的迅速发展,用户增长越来越快,为了保证用户的体验,对产品的性能和产品的体验越来越高,产品的迭代速度越来越快,为了保证用户的体验感和了解用户的需求,一个全过程、规范化、自动化、智能化的监控管理管理系统非常迫切。

为了更好、更有效的保障系统上线后的稳定的运行。对于服务器的硬件资源、性能、带宽、端口、进程、服务等都必须有一个可靠和可持续的监测机制,统计分析每天的各种数据,从而能及时反映出服务器哪里存在性能瓶颈、安全隐患等。另外是要有危机意识,就是了解服务器有可能出现哪些严重的问题,出现这些问题后该如何去迅速处理。比如数据库的数据丢失,日志容量过大,被黑客入侵等等。

平台的设计要求

监控平台上实现对系统运行状态的集中管理(主要包含服务器、网络、数据库、中间件、操作系统、应用软件),具体体现在:

1、服务器资源分析,实现服务器CPU、内存、磁盘、网络出入流量等指标监控管理;

2、操作系统分析, 实现操作系统的进程、线程、TCP等指标管理

3、数据库、中间件、应用系统分析, 实现可用性监控管理

4、应用系统的链路跟踪分析,实现业务故障的快速定位


系统监控发展历程

  1. 日志监控阶段

    本阶段实现中间件、应用系统的运行日志的采集和存储,提供搜索功能,通过日志来进故障排查。

  2. 链路监控阶段

    日志监控阶段只是一行一行日志 ,日志之间没有上下文关联,无法掌握一次请求耗时的时长,以及较长耗时在那个环节。本阶段实现将实现链路分析以及热点链路的报表,针对报表可以进行阈值监控与故障排查,一旦有告警,可以通过点击报表来详细定位有问题的链路,顺便找到对应的链路,查看详细的信息。

  3. 指标监控阶段

    链路监控对自定义指标支持的比较弱,也无法实现或者展现更加多样的查询聚合需求。

    本阶段的实现支持丰富的Metric指标,将链路上的一些报表数据也可以划分到指标中,交给专业的时序数据库来做指标的存储和查询,对接或者自研丰富的指标看板。针对指标进行更加丰富的告警策略与故障排查,一旦有告警,可能需要到各个系统上查看指标看板,粗略定位根因,再结合链路总和分析。

  4. 深度分析阶段

    指标监控虽然可以在一个系统中看到所有各个层面的监控数据了,但是每次排障时仍然要花很多的时间去查看各个层面是否有问题,一旦漏看一项可能就错过了问题所在的根因没有整个业务的全局监控视角,都停留在各自应用的角度。用户查询什么指标就展示相应的数据,并不去关心用户所存储数据的内容。本阶段需要主动去帮用户分析存储的数据内容,帮助用户结合业务的需求和数据结构,进行模型抽象,为用户构建应用大盘和业务大盘,提供准确的数据,并做相关业务的分析。

    应用大盘:就是为当前应用构建上下游应用依赖的监控、当前应用所关联的机器监控、中间件、数据库等监控,可以时刻为应用做体检,来主动暴露出问题,而不是等用户去一个个查指标而后发现问题。

    业务大盘:就是根据业务来梳理或者利用链路来自动生成大盘,该大盘可以快速告诉用户是哪些业务环节出的问题。

    趋势报表分析:主动帮用户发现一些逐渐恶化的问题点,比如用户发布之后,接口耗时增加,很可能用户没有发现,虽然当前没有问题,但是很有可能在明天的高峰期就会暴露问题。

    告警方式:可以统一的针对各个层面的监控数据做统一化的告警。


技术方案

日志监控技术方案
Grafana+阿里云SLS日志服务

图片来自阿里云 https://yq.aliyun.com/articles/227006


采集端:Logtail采集 日志服务快速入门 https://helpcdn.aliyun.com/document_detail/54604.html?spm=a2c4g.11186623.6.574.6d556cc3n7eQ2X

接收端:阿里云SLS日志服务

展示端:Grafana

Grafana集成SLS日志服务,需要安装插件,通过插件配置SLS数据源,详情请参阅 https://yq.aliyun.com/articles/227006

支持数据源:应用程序的程序输出 ,访问日志 ,中间件日志、数据库日志


分布式链路追踪技术方案
阿里云jaeger方案

开源框架skywalking

skywalking部署有2种方式:

  • 独立部署:可以在每个应用机器上单独部署agent代理,请参阅 https://github.com/apache/skywalking/tree/master/docs
  • 应用程序集成:另外一种是与springboot、Springcloud集成,详情请阅读 https://www.jianshu.com/p/e81e35dc6406

指标监控技术方案
SpringBoot Actuator+Jolokia+Telegraf+Influxdb+Grafana 方案

Actuator

actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。

Jolokia

Spring Boot Actuator对外暴露应用的监控信息,Jolokia提供使用HTTP接口获取JSON格式 的数据。

Telegraf

收集系统和服务的统计数据,并支持写入到 InfluxDB 数据库。

Telegraf 详情,请参阅 https://www.influxdata.com/

创建spring-boot-monitoring 工程

配置 pom.xml

     <dependency><groupId>org.jolokia</groupId><artifactId>jolokia-core</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.0.0</version></dependency>

配置 application.properties

spring.application.name=spring-boot-monitoring
management.endpoints.jmx.enabled=true
management.jolokia.enabled=true
management.jolokia.config.debug=true

telegraf配置

[[inputs.jolokia]]context = "/actuator/jolokia/read/"[[inputs.jolokia.servers]]name = "spring-boot-monitoring"host = "127.0.0.1"port = "8080"[[inputs.jolokia.metrics]]name = "heap_memory_usage"mbean  = "java.lang:type=Memory"attribute = "HeapMemoryUsage"[[inputs.jolokia.metrics]]name = "thread_count"mbean  = "java.lang:type=Threading"attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount"[[inputs.jolokia.metrics]]name = "class_count"mbean  = "java.lang:type=ClassLoading"attribute = "LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount"[[inputs.jolokia.metrics]]name = "metrics"mbean  = "org.springframework.boot:name=metricsEndpoint,type=Endpoint"attribute = "Data"[[inputs.jolokia.metrics]]name = "tomcat_max_threads"mbean  = "Tomcat:name=\"http-nio-8080\",type=ThreadPool"attribute = "maxThreads"[[inputs.jolokia.metrics]]name = "tomcat_current_threads_busy"mbean  = "Tomcat:name=\"http-nio-8080\",type=ThreadPool"attribute = "currentThreadsBusy"
[[outputs.influxdb]]## The full HTTP or UDP URL for your InfluxDB instance.#### Multiple urls can be specified as part of the same cluster,## this means that only ONE of the urls will be written to each interval.# urls = ["udp://localhost:8089"] # UDP endpoint exampleurls = ["http://localhost:8086"] # required## The target database for metrics (telegraf will create it if not exists).database = "telegraf" # required

Influxdb

InfluxDB 是一个开源分布式时序、事件和指标数据库。它具备如下主要特性;

  • Time Series (时间序列):你以使用与时间有关的相关函数(如最大,最小,求和等)
  • Metrics(度量):你可以实时对大量数据进行计算
  • Eevents(事件):它支持任意的事件数据

介绍与SQL语法、常用命令使用方法

https://www.influxdata.com/

Grafana

Grafana 是一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形化选项,可以混合多种风格,支持多个数据源特点。通过Influxdb数据源配置,定制 Dashboard。

Grafana安装与使用

https://grafana.com/docs/grafana/latest/installation/


Springboot+Springboot admin方案

Spring Boot Admin

Spring Boot Admin 是一个管理 和监控 Spring Boot 应用程序 的一款开源软件。Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI 部分使用 AngularJS 将数据展示在前端。

功能如下:

  • 显示 name/id 和版本号
  • 显示在线状态
  • Logging 日志级别管理
  • JMX beans 管理
  • Threads 会话和线程管理
  • Trace 应用请求跟踪
  • 应用运行参数信息,如:Java 系统属性、Java 环境变量属性、内存信息、Spring 环境属性

官方地址:https://github.com/codecentric/spring-boot-admin/

创建SpringBootAdminServer工程

添加依赖pom.xml

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server</artifactId><version>2.1.1</version>
</dependency>
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server-ui</artifactId><version>2.1.1</version>
</dependency>

SpringBootAdminApplication 类 添加*@EnableAdminServer*注解

@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminApplication {public static void main(String[] args) {SpringApplication.run(SpringBootAdminWebApplication.class, args);}
}

在application.properties文件中添加如下配置

spring.application.name=admin-server
server.port=8769

创建SpringBootAdminClient工程

添加依赖pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.1</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.1.1</version></dependency>
</dependencies>

添加配置项 application.properties

spring.application.name=admin-client
server.port=8768
spring.boot.admin.client.url=http://localhost:8769
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

启动adminserver与adminclient工程

访问地址 http://localhost:8769/ 就可以看到监控信息

Springboot+ SOFA-Lookout + Prometheus +Grafana方案

SOFAStack

ScalableOpenFinancialArchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

SOFALookout 是蚂蚁金服在 SOFAStack 体系内研发开源的一款解决系统的度量和监控问题的轻量级中间件服务。本文给大家介绍下 SOFALookout 服务器端主要提供的特性以及使用方式。

SOFALookout:https://github.com/sofastack/sofa-lookout

springboot工程

pom.xml 引入jar

     <dependency><groupId>com.alipay.sofa.lookout</groupId><artifactId>lookout-sofa-boot-starter</artifactId><version>1.5.2</version></dependency><dependency><groupId>com.alipay.sofa.lookout</groupId><artifactId>lookout-reg-prometheus</artifactId><version>1.5.2</version></dependency>

配置文件指定SOFALookout 暴露端口

spring.application.name=springboot2_sofa_lookout
com.alipay.sofa.lookout.prometheus-exporter-server-port=8081

Prometheus需要配置一下刚刚SOFA-Lookout的端口,如下:

- job_name: 'springboot2_sofa_lookout'scrape_interval: 5sstatic_configs:- targets: ['localhost:8081']

granafa 配置Prometheus数据源,定制 Dashboard

源码地址:

https://gitee.com/dalaoyang/springboot_learn/tree/master/springboot2_sofa_lookout


SpringBoot Actuator+Prometheus+Grafana 方案

添加依赖

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

启动端点

启用 /actuator/prometheus 端点,供 Prometheus 来抓取指标

management:endpoints:web:exposure:include: health,info,env,metrics,prometheus

启动 SpringBoot 服务 查看 /actuator/prometheus

# HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool
# TYPE jvm_gc_max_data_size_bytes gauge
jvm_gc_max_data_size_bytes 1.395654656E9
...

配置Prometheus 通过/actuator/prometheus 端点来抓取数据

prometheus.yml

# my global config
global:
scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).# Alert manager configuration
alerting:
alertmanagers:
- static_configs:- targets:# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"scrape_configs:
- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']
- job_name: 'spring'metrics_path: '/actuator/prometheus'static_configs:- targets: ['localhost:8077']

思考题

上述方案的优缺点,如何改进,改进后的适合的对应场景是什么?

通过本文的学习,让你对系统监控有个宏观上的认识和了解,实现的方案很多,具体选择和落实需要扎实的功夫。

后续会持续更新,提供更详细的参考方案和github的源码。


群沟通讨论交流,添加微信号:nuanshoutx 。

如果觉得文章有帮助,关注下作者的公众号,赞个人气,不胜感谢。

Java应用系统监控看这篇就够了相关推荐

  1. 解析分账系统,看这篇就够了!

    作者:JANMING  公众号:产品思考随笔 目前官方微信支付.支付宝均已推出了分账功能,而其他第三方支付机构(例如:汇聚支付)也推出了聚合支付分账,那么各方的分账系统有什么优缺点?如何进行对比分析呢 ...

  2. Java 集合框架,看这篇真的够了!

    话不多说,直接上图: Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的: Collection 和 Map 顾名思义,容器就是用来存放数据的. 那么这两大接口的不同之处 ...

  3. error 系统错误 错误码10007_干货分享:退款系统,看这篇就够了

    退款,是一个易造成负体验的业务产品.原因是商户对于退款的要求务必退款成功.高效.快,而且又得很好地支撑业务,否则就容易招来吐槽. 退款,一个看似简单,但充满复杂性的产品. 要想做好退款系统,我们必须深 ...

  4. Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!

    Java集合知识点,猿人花了几天时间整理,还有Java超神之路脑图.月薪3万Java优秀简历模板.全网最全一线大厂Java笔试面试题.1000+本Java开发精华电子书送给大家,希望大家认真学习哦! ...

  5. Java String,看这篇就够了

    String,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思. ...

  6. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  7. 女生就不适合学Java吗_女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业!...

    原标题:女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业! 女生适合学java吗?女生做IT怎么样 首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说 ...

  8. Spring Cloud入门,看这篇就够了!

    点击▲关注 "中生代技术"   给公众号标星置顶 更多精彩 第一时间直达 概述 首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟. 什 ...

  9. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

最新文章

  1. Day 13 老师应该要让课堂有趣吗
  2. AJAX省市县三级联动的实现
  3. SSAS系列——【02】多维数据(维度对象)
  4. React 相关资料
  5. 信息学奥赛C++语言: 将字符串中的小写字母转换成大写字母
  6. eclipse(jee) 配置Tomcat
  7. 王校长撩妹不成反被锤爆?再有钱的舔狗也只是舔狗【Python爬虫实战:微博评论采取】
  8. 电子科大计算机操作系统ppt,电子科大计算机操作系统实验报告级.docx
  9. Unity2D开发小细节
  10. 交叉编译opencv:undefined reference to `png_riffle_palette_neon
  11. 计算机二级公共基础知识笔记
  12. python下载豆丁文档_.NET - edu.docin.com豆丁校园
  13. 同个网络找不到计算机打印机共享,局域网共享打印机搜索不到怎么办 局域网共享打印机搜索不到解决方法...
  14. 仿网易云音乐小程序-uniapp
  15. STM32系列BSP外设驱动使用教程
  16. python3文本文件读取方法_[Python3] 读取文本文件[TZZ]
  17. Excel加密如何破解
  18. 2008年买书流水账
  19. 腾讯短视频SDK代码层面上录制功能的实现,短视频APP开发第一步
  20. 12113个岗位争夺AI人才!中国成为AI岗位空缺最多的国家

热门文章

  1. QUIC 协议在蚂蚁集团落地总结
  2. 单片机中利用SHT11实现温湿度实验
  3. Python opencv进行圆形识别(圆检测)
  4. 物流配送进程快递100查询接口
  5. 洛达应用层开发教程系列6-配置工具的使用
  6. armbian ubuntu 命令行移除蓝牙设备
  7. 中小企业面临“招聘难”
  8. WPS设置参考文献自动标号+交叉引用
  9. 2000_narrowband to wideband conversion of speech using GMM based transformation
  10. Typora去除红色波浪线