对于互联网公司。监控就像自己的眼睛,没有眼睛的人,面临的灾难可想而知,所谓无监控不调优,目前的监控总共分几类:

一类 服务级别监控:(服务是否可用,磁盘是否足够,cpu是否高)这个创业公司都是直接用云的赋能服务,目前简单的监控,容器化后,k8s帮我做了很多

二类 业务级别监控:(QPS、RT、失败比例、错误日志等)业务级别的监控,一般大的公司都有针对自己的特点对开源框架的组合。之前公司采用的是:

                                    监控埋点日志->KAFKA->influshdb-> 前端grafana展示 。 

目前创业公司,时间和资源有限,就在考虑一种简单的能快速上线的方案。下面采用的就是简单的基于钉钉的监控:

  首先平时一直在用钉钉,比较赞的地方,钉钉提供了非常方便可以定义的钉钉机器人,可以通过webhook方式推送消息和格式。

  具体可参考: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1

具体实现:

简单版本实现: 通过每个服务接口异常进行捕获,对异常消息进行处理同时采用线程池(单线程:纯内存操作不是IO操作)方式推送消息到本地队列,队列限制大小(可配置),避免无限制推送

然后推送模块定时按一定频率(可配置)获取消息。然后推送消息到钉钉机器人。引入方式各个服务接入jar

后续版本扩展

        是否可以同样多种推送方式(邮件、短信、钉钉)

        是否支持多种存储消息方式(内存队列、MQ、Redis)       

        是否可以接入简单的统计(方法执行时间、方法访问量、超时告警等)

1、整体流程
2、实现细节(Spring boot接入)

     具体源码就不公开了

     1、利用spring boot的自动注入功能。在spring.factories 中增加启动注入

     2、利用ConditionalOnProperty注解中增加配置 只有注解启用时候才会加载成功

@Configuration
@EnableConfigurationProperties(DingtalkProperties.class)
@ConditionalOnProperty(value = "monitor.alert.dingtalk.enble",havingValue ="true")

    3、DingtalkProperties中配置参数

        配置参数:

1 monitor:
2   alert:
3    dingtalk:
4      enble: true
5      phone: [xxxx,xxxx]
6      url: https://oapi.dingtalk.com/robot/send? access_token=

 

        这样服务接入的时候更灵活,简单~

参数名

可选值

默认值

描述

示例

 

enable

true| false

false

true 启用

false 禁用

如上

phone

手机号

通知人手机号,多个人用逗号隔开

如上

url

url地址

通知的地址,必填项

 

如上

level

short|full

short

通知信息是否缩短

short:通知内容最长500个字符

full:通知内容不做缩短

建议默认值

capacity

整数

100

存储异常信息个数,超过阈值不进行推送

建议默认值

pull-interval

整数

5000

报警时间间隔(ms)

可自定义修改

at-all

true| false

false

组内所有都会被通知

建议默认值

env

字符串

Spring激活环境

dev|test|pro等

可自定义修改

applicationName

字符串

Spring应用名称

order-service|user-service等

可自定义修改

      4、接入方式(jar包引入)

           告警通知需要满足条件:

    •  @AccessService注解的类或方法中抛出的异常
    •   配置文件中启用了监控(即enable:true)

       5、通知效果

             

 

             

 

转载于:https://www.cnblogs.com/mxmbk/p/9491558.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐