搭建以Prometheus为核心的监控系统

引言

最近领导们拍板,让开发一个以Prometheus为核心的监控系统,监控服务的某些指标,以及某些厂商提供的机器指标。
然后,机器,没有,只能用一台linux服务器模拟代替。
服务的话,一开始在被监控的服务程序A里面埋点,但是入侵性有点强,点位出了几次BUG,导致A服务几次无法运作。所以,服务指标,就修改为从数据库里面查询,祛除了侵入性(数据库没有的数据让服务对应负责人往数据库里写)。

注意:

prometheus适合用于趋势统计,本质上是周期性拉取数据,储存到prometheus的时序数据库。并提供趋势相关计算函数,以更加直观的方式输出指标的趋势。
它不能替代关系型数据库,断电后会重新计数,也不适合充当计数器。

架构调用时序图

说明
  • 官网地址:https://prometheus.io/
  • 导出器服务:prometheus的exporter。
  • 指标收集器服务:使用JAVA写的一个微服务。它向前端提供将指标聚合为数据的服务,提供创建服务指标、更新节点配置文件、更新告警配置文件、接收以及处理告警消息等功能。
  • AlertManager:prometheus告警触发后,固定通知的告警通知组件。而后,AlertManager会通知到其它自定义的服务。
    (PS: 对于我而言,只是用到了它的webhook,我觉得有点浪费。但是没有找到告警不通过AlertManager,从Prometheus发送到url的方式。)
  • 以下是接口调用流程图
    调用链时序图

设计相关要点

  • 监控埋点分为两种,厂家提供、测试时使用的exporter自带,在程序里向prometheus手动编码注册指标。
  • 将被监控的数据,提供到前端输出流程:埋点(已埋)->prometheus收集->向primetheus查询->向数据库查询->清洗数据发往前端。
  • 若计划将PromSQL以及Prometheus数据查询接口交由前端编写,注意提前展开会议确认。(大概率不会通过,因为我这边前端只负责画界面,相关监控接口,即PromSQL,要后端写)
  • 从数据库中获取指标流程:prometheus周期向微服务拉取指标,微服务指向数据库。示例JAVA代码如下:

countApiByApi() 函数方法为提供计数指标的回调方法。

    /**
     * 创建快照
     *
     * @param api 注释名
     */
    private Gauge creteGauge(String modelName, String api) {
        Integer val = 0;
        List<Tag> tagList = baseTag();
        tagList.add(Tag.of(API_TYPE, api));
        tagList.add(Tag.of(MODEL_NAME, modelName));
        // 子快照
        Gauge gauge = Gauge.builder(API_SUM_GAUGE_NAME, val, value -> countApiByApi(modelName, api))
                .tags(tagList)
                // 描述
                .description(API_SUM_GAUGE_DESP)
                // 注册
                .register(RegistryUnit.getRegistry());
        log.debug("gauge指标:{} tag :{}已创建", API_SUM_GAUGE_NAME, tagList);
        return gauge;
    }

Prometheus搭建、微服务设计、指标设计参见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*crzep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值