# Prometheus+Grafana+Mongodb数据可视化

我们的目的是搭建

mongodbmongodbexporterprometheusgrafanamongodb \rightarrow mongodb \: exporter \rightarrow prometheus \rightarrow grafana

实现mongodb中的数据可视化。

# 安装Grafana

利用brewbrew工具安装grafanagrafana

brew update //更新brew工具,确保安装软件最新版本

安装grafanagrafana最新版本

brew install grafana

之后运行grafanagrafana

brew services start grafana

grafanagrafanaUIUI界面默认端口是3000,因此在浏览器地址输入本地IP:PortIP:Port(这里的192.168.19.178是我的IPIP地址,应该设置为自己的IPIP地址)

http://192.168.19.178:3000

进入登陆界面,此时主界面为

6bcb0994f0e24dd307533affa80052cb

GrafanaGrafana的默认用户名和密码均为adminadmin,输入之后点击确定就可以进入GrafanaGrafana的控制台页面

到此为止GrafanaGrafana安装完成

# 安装MongoDB

为了节省资源和方便配置,选择用dockerdocker来搭建mongodbmongodb

dockerhubdocker \: hubpullpull 下来 mongodbmongodb的镜像

docker pull mongo

之后运行即可

docker run --name mydocker -p 27017:27017 -d mongo --auth

进入mongomongo中,给数据库增加一个用户(登陆使用)

use admin
db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})

PS:这里最好重启一下,使新配置的用户名生效

到此mongodbmongodb安装完成

# 安装Prometheus

为了节省资源和方便配置,选择用dockerdocker来搭建prometheusprometheus

dockerhubdocker \: hubpullpull 下来 prometheusprometheus的镜像

docker pull prom/prometheus

在本地新建一个自己的prometheusprometheus的配置文件prometheus.ymlprometheus.yml,假设放在桌面的prometheusprometheus文件夹中,文件内容为

# 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).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'codelab-monitor'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"

# 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: 'mongo1'
    static_configs:
      - targets: ['192.168.19.178:9001']

文件中,最后一部分代表了所监控的内容的信息,需要在这个地方配置要监听的端口

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'mongo1'
    static_configs:
      - targets: ['192.168.19.178:9001']

之后,在dockerdocker中运行prometheusprometheus

docker run -d --name prometheus -p 9090:9090 -v ~/Desktop/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

prometheusprometheus的端口为9090,在浏览器中输入

http://192.168.19.178:9090

可以进入prometheusprometheus的界面中

2220ad99cae87ea334dbde022a3fccfd

可以看到prometheusprometheus开启成功,点击页面中的statusTargetsstatus \rightarrow Targets可以看到所配置的监听节点

6aec0c1b2f6b7191e39800c80d2eb376

当未将mongodbmongodbprometheusprometheus真正连接时,节点的StatusStatus显示为红色的DownDown

到此prometheusprometheus安装配置完成

# 安装Mongodb_exporter

真正将mongodbmongodbprometheusprometheus连接的是mongodb_exportermongodb\_exporter,这个东西就像一个桥梁,用户在mongodbmongodb中进行了什么操作,会先告诉mongodb_exportermongodb\_exporter,之后mongodb_exportermongodb\_exporter再告诉prometheusprometheus

为什么这么麻烦搞一个中间人?是因为GrafanaGrafana的默认数据源不包括mongodbmongodb,所以需要将prometheusprometheus作为数据源,用mongodbmongodb作为prometheusprometheus的输入端。而prometheusprometheusmongodbmongodb之间的连接需要mongodb_exportermongodb\_exporter

同样在dockerdocker中安装mongodb_exportermongodb\_exporter

dockerhubdocker \: hubpullpull 下来 mongodb_exportermongodb\_exporter的镜像

docker pull prom/mongodb_exporter

之后运行它(在这里我进行了一个端口映射,为了跟我前面配置的PrometheusPrometheus监听的端口对应,因此设置了端口为9001)

docker run -d --name exporter -p 9001:9104 prom/mongodb_exporter --mongodb.uri mongodb://root:root@192.168.19.178:27017

这时mongodb_exportermongodb\_exporter就配置完了,正式将mongodbmongodbprometheusprometheus连接起来。

现在进入prometheusprometheusUIUI界面内,点击页面中的statusTargetsstatus \rightarrow Targets可以看到StatusStatus已经由DownDown改为了UpUp

到此为止

mongodbmongodbexporterprometheusmongodb \rightarrow mongodbexporter \rightarrow prometheus

已经调通。

# 连接Prometheus和Grafana

再次进入到grafanagrafana

  1. 首先配置数据源

666a49c2b6418f1f3d39851c85839779

配置完后,点击绿色按钮,会提示配置成功

  1. 添加mongodbmongodb专用可视化模版,在导入中,输入2583,之后配置数据源,点击确认

372b29ec20d6e98e282f16f0871df63f

  1. 之后会出现图表模板

93935cb415410ac4af0978124869c1f0

但是我们会发现,what???没有数据??难道是配置错了??no no no

  1. 重新写搜索条件

经过多次测试后,发现其实是新版软件中的queryquery语句已经变了。

于是我们修改它默认的queryquery语句。随便点一个图表的标题(比如QueryOperationsQuery \: Operations),然后点击edit,会进入一个图表的具体配置页面,如下所示

74cd15ae94c4ab703504f91b80aafbc8

可以看到,这条查询语句

62a82aabe7fe922d0b4a07270c9a5b4a

然后我们把它修改为

rate(mongodb_mongod_op_counters_total{instance=~"192.168.19.178:9001"}[$interval])

然后数据出现了

671f19cce8896fe406919634e936845d

发现它默认的语句中的instanceinstance要修改为自己的数据地址,然后前面的查询语句中需要添加一个mongodmongod单词(自己手动输入查询语句的时候会有提示~)

之后配置一下其他的图表,tada,整个页面就出现效果了~

abe542451aea7a083fc83b0ef686e564

到此,整个环境就搭建完成了~

完结~

🎉🎉🎉🎉🎉