c++ 项目使用 prometheus + grafana 进行实时监控

监控指标设置

使用 prometheus-cpp 进行监控指标设置,这里以 mqtt-server 的活跃连接数为例,统计四种协议类型的活跃连接数,在接收到连接进行连接数加一,连接断开时进行连接数减一,使用 gauge 类型

cpp 复制代码
#pragma once

#include <unordered_map>

#include "metrics/IMetrics.h"

class MqttConnMetrics : public IMetrics {
public:
    void register_metrics(prometheus::Registry& registry) override {
        auto& family = prometheus::BuildGauge()
            .Name("mqtt_active_connections")
            .Help("Number of active MQTT connections")
            .Register(registry);

        protocol_gauges_ = {
            {MQTT_PROTOCOL::MQTT, &family.Add({{"protocol", "mqtt"}})},
            {MQTT_PROTOCOL::MQTTS, &family.Add({{"protocol", "mqtts"}})},
            {MQTT_PROTOCOL::WS, &family.Add({{"protocol", "ws"}})},
            {MQTT_PROTOCOL::WSS, &family.Add({{"protocol", "wss"}})}
        };

        is_registered_ = true;
    }

    void increment(MQTT_PROTOCOL protocol) {
        if (!is_registered_) return;
        protocol_gauges_[protocol]->Increment();
    }

    void decrement(MQTT_PROTOCOL protocol) {
        if (!is_registered_) return;
        protocol_gauges_[protocol]->Decrement();
    }

private:
    bool is_registered_ = false;
    std::unordered_map<MQTT_PROTOCOL, prometheus::Gauge*> protocol_gauges_;
};

开发完成后,可以通过 http://<address>:<port>/metrics 路径访问到所有的监控指标

prometheus 采集监控指标

安装好 prometheus 之后修改一下 prometheus.yml 配置中 采集的目的地址

yaml 复制代码
# 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).

# Alertmanager 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"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "mqtt-server"
    scrape_interval: 1s
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:8085"]

启动后访问 prometheus 界面,检查是否成功采集到,默认地址 http://localhost:9090

grafana 展示监控数据

安装完 grafana 之后,进入界面添加 prometheus 数据源,然后新增仪表盘,配置监控指标等

相关推荐
小欣加油2 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
星恒随风3 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
浪客灿心4 小时前
项目篇:模块设计与实现
数据库·c++
小黑蛋学java4 小时前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
牛油果子哥q4 小时前
【C++ STL vector】C++ STL vector 终极精讲:动态数组底层原理、两倍扩容机制、迭代器失效、增删查改、性能剖析与工程避坑指南
开发语言·c++
为何创造硅基生物6 小时前
独占指针的创建std::make_unique 本身自带堆出现
c++
kyle~6 小时前
ROS 2 与 Isaac Sim 联合仿真(一)体系架构、环境选型与基础通信闭环
c++·机器人·nvidia·仿真·ros2
努力努力再努力wz6 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂7 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
起床困难户5757 小时前
条款20:协助完成返回值优化
c++