栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

监控的几个维度

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

监控的几个维度

干了几天运维,对于系统监控的几个小的实践。把思路稍作整理,目前5个维度入手:

    服务器性能监控。应用JVM监控。应用状态监控。日志关键词监控。自定义业务逻辑监控。

监控的基础架构为:Prometheus+Grafana,需一定的基础。

预警渠道:

        短信

        钉钉

        邮件

服务器性能监控

        服务器安装node_expoter,Promentheus采集CPU、内存、IO、硬盘等信息,并在Grafana展示,配置预警信息等。

应用JVM监控

        SpringBoot自带了监控功能,直接添加micrometer包即可。

应用状态监控

        本身可以通过JVM得到系统的运行状态,为何多此一举,有时候发现应用状态正常但是数据库却访问不了。所以想通过一种简单的方式判断应用数据库操作是否正常。

        首先要确定应用的唯一标识,经过衡量:应用名+本机内网IP为对应服务的标识。

        策略:应用每隔一分钟更新数据库中的对应的标识数据时间,类似应用做一次签到。

                由于prometheus只能返回数字信息,将签到的结果(当前时间-签到时间=间隔的分钟数)转换为metrics格式的guage类型数据追加至/actuator/prometheus接口后面。

日志关键词监控

        由于历史原因,未能部署ELK。系统运行中存在一些异常错误,输出在日志中,希望在出现错误关键词后能够及时将信息通知开发知晓。

        应用服务标识与应用状态监控相同,采用应用名+本机内网IP为对应服务的标识。

        策略:定时每10分钟解析近10分钟的日志文件,如出现设置的关键词,取关键词上下文各20行同步保存至数据库的日志异常记录中。并将关键词次数作为结果追加至/actuator/prometheus接口后面。

        邮件:Grafana触发监控值预警后,同步触发一个webhook异常日志的查询接口,将数据库中的异常日志作为邮件发送至该项目对应的开发邮箱中。

自定义业务逻辑监控

        每个业务系统都有自己的业务属性,所以监控点也都不同,可从一下几个维度去入手监控:

        *.单业务点监控维度
                *.最大:上限校验
                *.最小:下限校验
                *.累计:总值校验
                *.期限:时间范围,活动期到期等
                *.连续:监控值是否持续性校验
                *.平衡:与外表的交叉校验

        每项业务都可总结对应的监控点,直接创建一个Bean对象。该监控值会自动添加至/actuator/prometheus返回中,无需手动添加至接口返回值后面。

        举例:每分钟成功总数、每分钟失败总数。

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;

import java.util.concurrent.atomic.AtomicInteger;

@Component
public class TransMonitorBean {
	private final AtomicInteger gauge_trans_tot_amt_min_success;
	private final AtomicInteger gauge_trans_tot_num_min_success;
    
    public TransMonitorBean(MeterRegistry registry) {
    	this.gauge_trans_tot_amt_min_success = registry.gauge("gauge_trans_tot_amt_min_success", new AtomicInteger(0));
    	this.gauge_trans_tot_num_min_success = registry.gauge("gauge_trans_tot_num_min_success", new AtomicInteger(0));
    }
    
    public void handleTotAmtMinSuccess(int val) {
        this.gauge_trans_tot_amt_min_success.set(val);
    }
    
    public void handleTotNumMinSuccess(int val) {
        this.gauge_trans_tot_num_min_success.set(val);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号