Grafana + prometheus 实现连接数监控系统

本文介绍了如何利用Grafana和Prometheus搭建监控系统,以跟踪流媒体服务的在线人数。通过Prometheus收集数据,Grafana进行可视化展示,详细阐述了从安装、数据格式、验证到绘图配置的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

团队在开发流媒体服务,需要实现一个监控在线人数的功能,可以看到历史有多少人在线,当前有多少人在线的功能。 如果用mysql等关系型数据库来实现,可以用事件记录日志,然后通过PHP加上一些绘图的插件来实现,但这种方式并不好,首先用关系型数据库随着时间累积,会存在数据量越来越大,导致查询缓慢,再者需要编写这部分统计代码,因此并不是最佳选择。

我们很快找到了一个“时序性数据库”(prometheus),这种数据库会以时间节点来记录我们要存储的数据,然后结合他的一些绘图功能,我们完全可以不用写绘图的逻辑,而且prometheus还提供数据收集的功能,我们只需要把需要统计的数据按照固定的格式传递就好了。而Grafana是一个专门绘图的,支持很多种数据源,比如mysql,prometheus,es等数据库,绘图功能特别强大,因此我们便使用了这两种软件的结合实现了一个监控功能。

实现过程

两个工具都是英文的,如果英文和我一样不怎么好,建议使用谷歌浏览器的网页翻译功能,可以节省很多时间
复制代码
操作步骤:
  1. 安装
  2. 数据收集
  3. 收集验证
  4. 绘图配置
  5. 完成
一、安装
1. Grafana

官方安装文档:grafana.com/grafana/dow…

mac下安装
brew install grafana
复制代码
docker安装
docker run -d --name=grafana -p 3000:3000 grafana/grafana 
复制代码
2. prometheus

官方安装文档:prometheus.io/docs/promet…

配置文件

在安装之前我们先建立好配置文件,让安装后可以直接启动,配置文件的模板在官方文档中有,下面是我使用的配置文件,也可以直接使用,记得把配置文件的(#后面的内容删除)

---
global:         #全局配置
  scrape_interval: 5s   #5秒钟收集一次数据
  scrape_timeout: 3s    #连接超时时间
scrape_configs: #子配置
- job_name: 'media' # 任务名称为media
  scrape_interval: 3s   # 3秒钟收集一次数据
<think>我们使用Prometheus来收集MongoDB的指标,然后将这些指标展示在Grafana中。主要步骤如下:1.在MongoDB服务器上部署一个MongoDBExporter,用于将MongoDB的指标暴露给Prometheus。2.配置Prometheus抓取Exporter暴露的指标。3.在Grafana中配置Prometheus数据源。4.在Grafana中创建仪表板,使用PromQL查询来展示MongoDB的插入数据条数。具体步骤如下:###1.部署MongoDBExporter有多种Exporter可以选择,比如`percona/mongodb_exporter`或者`dcu/mongodb_exporter`。这里以`percona/mongodb_exporter`为例。首先,下载并运行MongoDBExporter。确保你已安装Docker,然后运行以下命令:```bashdockerrun-d-p9216:9216\--namemongodb_exporter\-eMONGODB_URI=mongodb://<username>:<password>@<mongodb_host>:<mongodb_port>\percona/mongodb_exporter```请替换`<username>`,`<password>`,`<mongodb_host>`和`<mongodb_port>`为你的MongoDB连接信息。如果没有用户名密码,可以省略。注意:Exporter默认端口为9216。###2.配置Prometheus抓取Exporter在Prometheus的配置文件`prometheus.yml`中添加一个新的抓取任务。例如:```yamlscrape_configs:-job_name:'mongodb'static_configs:-targets:['<exporter_host>:9216']```请将`<exporter_host>`替换为运行Exporter的主机名或IP地址。然后重启Prometheus服务。###3.在Grafana中配置Prometheus数据源-打开Grafana,进入Configuration->DataSources。-点击Adddatasource,选择Prometheus。-设置Prometheus服务的URL(例如:http://localhost:9090),然后点击Save&Test。###4.创建Grafana仪表板监控插入数据条数在Grafana中创建一个新的仪表板,并添加一个Panel。在Panel的Metrics浏览器中,我们可以使用PromQL查询来监控MongoDB的插入操作。MongoDB的指标中,通常有一个指标叫做`mongodb_opcounters_inserts`或`mongodb_opcounters_insert`,它记录了插入操作的数量。这个指标是Counter类型的,表示从MongoDB启动以来的总插入次数。所以,要展示每秒插入的数据条数,我们可以使用`rate`函数。在PromQL中输入:```promqlrate(mongodb_opcounters_inserts_total[5m])```注意:具体的指标名称可能因Exporter的不同而略有差异。可以使用Prometheus的表达式浏览器来查看Exporter暴露了哪些指标。如果我们使用的是Percona的Exporter,指标名称可能是`mongodb_opcounters_inserts_total`。如果是dcu的Exporter,可能是`mongodb_mongod_metrics_opcounters_insert_total`等。请根据你使用的Exporter的文档或实际暴露的指标来确定。因此,你可以尝试查询:```promqlsum(rate(mongodb_opcounters_inserts_total[5m]))by(instance)```或者如果是在集群中,可以添加更多的标签。###5.配置图表在Grafana的Panel中,选择图表类型(例如,Graph或Singlestat),并根据需要调整图表选项。例如,将图例设置为显示实例名称,设置合适的单位等。###注意事项-确保Prometheus能够访问到Exporter的端点(`exporter_host:9216`)。-如果MongoDB需要认证,确保Exporter能够正确连接MongoDB。-在Grafana中,可以设置刷新间隔,以便实时监控。以上步骤完成后,你就能够在Grafana仪表板上看到MongoDB的插入数据速率了。§§相关问题§§1.如何监控MongoDB的其他操作(如查询、更新、删除)?2.MongoDBExporter还提供了哪些有用的指标?3.如何为MongoDB的监控设置警报?4.在Grafana中如何创建复杂的监控仪表板?</think> ### 通过 GrafanaPrometheus 监控 MongoDB 插入数据条数的完整方案 #### 一、监控实现步骤 1. **部署 MongoDB Exporter** - 安装 Prometheus 的 MongoDB 监控代理: ```bash docker run -d --name mongodb_exporter -p 9216:9216 \ -e MONGODB_URI=mongodb://<user>:<password>@<mongodb_host>:27017 \ percona/mongodb_exporter ``` - 验证指标暴露:访问 `http://<exporter_ip>:9216/metrics` 查看原始数据 2. **配置 Prometheus 抓取目标** ```yaml scrape_configs: - job_name: 'mongodb' static_configs: - targets: ['<exporter_ip>:9216'] ``` - 重启 Prometheus 生效配置[^4] 3. **Grafana 配置** 1. 添加 Prometheus 数据源(Configuration → Data Sources) 2. 创建仪表板 → 新建 Panel → 选择 Prometheus 数据源 4. **编写插入量查询** - 关键 PromQL: ```promql sum(increase(mongodb_opcounters_inserts_total[5m])) by (instance) ``` - 此查询统计每 5 分钟窗口内的插入总数[^1] #### 二、监控面板配置详解 ```json { "datasource": "Prometheus", "expr": "sum(increase(mongodb_opcounters_inserts_total[$__interval])) by (instance)", "legendFormat": "{{instance}} 插入量", "title": "MongoDB 数据插入速率", "unit": "cps", "type": "graph", "interval": "1m" } ``` - **核心指标解析**: - `mongodb_opcounters_inserts_total`:自 MongoDB 启动以来的总插入次数 - `increase()`:计算在时间窗口内的增量 - `$__interval`:自动适配 Grafana 时间范围[^5] #### 三、高级监控方案 1. **集群维度监控** ```promql sum by (cluster) ( increase(mongodb_opcounters_inserts_total{instance=~"node1|node2|node3"}[5m]) ) ``` 2. **异常检测规则** ```promql # 插入量突降告警 predict_linear(mongodb_opcounters_inserts_total[1h], 3600) < 0.5 ``` 3. **优化建议** - 为 `opcounters` 添加索引提升查询效率[^3] - 配置数据保留策略:`--storage.tsdb.retention.time=30d`[^5] #### 四、典型效果展示 ![监控面板示意图](https://example.com/monitor-dashboard.png) *实时展示各实例插入速率,支持时间范围对比和异常标注[^1]*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值