基于Docker搭建Prometheus

一、介绍Prometheus

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。

与其他监控系统相比,Prometheus的主要特点是:

  • 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)
  • 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
  • 一种灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点。
  • 时间集合通过HTTP上的PULL模型进行。
  • 通过中间网关支持推送时间。
  • 通过服务发现或静态配置发现目标。
  • 多种模式的图形和仪表板支持。

二、安装运行Prometheus(docker版)

下面介绍如何使用Prometheus、Grafana、CAdvisor、node-exporter、mysqld-exporter对本机服务器性能、Docker容器、MySQL数据库进行监控。

监控本机,只需要一个exporter

  • node_exporter – 用于机器系统数据收集
  • mysqld-exporter 用于MySQL数据库数据收集
  • Cadvisor 用于收集宿主机上的docker容器数据
  • Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化。它内置了以下数据源的支持:

下面是我们安装时用到的架构图:

注意:本文使用的是CentOS 7 x64,只需要一台服务器即可!

2.1 安装docker

安装方法可以看之前的文章【云原生 • Docker】Docker入门

出现如下效果则成功

[root@iZbp16vhn64fpaj6qmsum0Z ~]# docker --version
Docker version 24.0.2, build cb74dfc

2.2 下载镜像包

docker pull prom/node-exporter
docker pull prom/mysqld-exporter
docker pull oliver006/redis_exporter 
docker pull prom/prometheus
docker pull grafana/grafana
  • prom/node-exporter:用于收集主机系统信息和指标的
  • prom/mysqld-exporter:用于收集数据库系统信息和指标的
  • oliver006/redis_exporter :用于收集redis信息和指标的
  • grafana/grafana:是一个用于可视化和分析监控指标的开源平台。
  • prom/prometheus:是一个开源的监控系统,用于收集和存储时间序列数据,并提供基于数据的查询、报警和可视化功能。

2.3 容器启动

启动node-exporter

docker run -d --name node-exporter \
--restart=always -p 9100:9100 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro prom/node-exporter

查看访问
http://192.168.1.31:9100/metrics
效果如下

在这里插入图片描述
这些都是收集到数据,有了它就可以做宿主机Linux数据展示了

启动mysqld-exporter

docker run -d --name mysqld_exporter \
--restart=always -p 9104:9104 \
-e DATA_SOURCE_NAME="root:Password123@(172.17.0.2:3306)/"  \
prom/mysqld-exporter

查看访问
http://192.168.1.31:9104/metrics
效果如下

在这里插入图片描述
这些都是收集到数据,有了它就可以做MySQL数据库数据展示了

安装redis_exporter

#不带密码
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr redis://192.168.0.1:6379

# 绑定集群中一个redis实例就可以了
# 带密码
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr redis://192.168.0.1:6379 --redis.password 'mypassword'

查看访问
http://192.168.1.31:9121/metrics
效果如下
在这里插入图片描述

启动prometheus

新建目录prometheus,编辑配置文件prometheus.yml

mkdir /opt/prometheus
cd /opt/prometheus/
vim prometheus.yml

内容如下:

global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:

  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

  - job_name: linux
    static_configs:
      - targets: ['172.17.0.2:9100']
        labels:
          instance: localhost
   #  - targets: ['192.168.1.22:9100']  
   #这里添加targets,可以使用Prometheus监控其他装有node_exporter的节点,单节点则不需要
   #    labels:
   #      instance: 192.168.1.22

  - job_name: cadvisor
    static_configs:
      - targets: ['172.17.0.4:8080']
        labels:
          instance: cAdvisor

  - job_name: mysqld
    static_configs:
      - targets: ['172.17.0.3:9104']
        labels:
          instance: mysql-exporter

注意:修改IP地址,这里的172.17.0. xx就是docker容器内的私网,需要自行查询。可以直接通过url查询信息得那个IP。

如果想加上redis监控

- job_name: 'redis_exporter_cluster_targets'
  # redis 集群的ip:端口号,我用的在阿里云搭的redis集群
    static_configs:
    - targets: 
      - redis://ip:6381
      - redis://ip:6382
      - redis://ip:6383
    params: 
      check-keys: ["metrics:*"]
    metrics_path: /scrape
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 172.19.0.11:9121

  - job_name: "redis_exporter_cluster"   
    static_configs:  
    # 注意这里是容器间访问的端口,不是暴露给宿主机的
    # 这里是redis_export的容器ip和容器间相互使用的端口(不是暴露给主机的)
      - targets: ['172.19.0.11:9121']
        labels:
          instance: '集群'

启动prometheus

docker run  -d --name prometheus --restart=always -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

注意:宿主机的路径必须是绝对路径:/opt/prometheus/prometheus.yml,否者报错

访问url:
http://192.168.1.31:9090/graph

效果如下:

在这里插入图片描述
访问targets,url如下:
http://192.168.1.31:9090/targets
效果如下:

在这里插入图片描述

三、启动grafana

新建空文件夹grafana-storage,用来存储数据

mkdir /opt/grafana-storage

添加权限

chmod 777 -R /opt/grafana-storage

因为grafana用户会在这个目录写入文件,直接设置777,比较简单粗暴!

启动grafana

docker run -d --name grafana --restart=always  \
 -p 3000:3000 --name=grafana  \
 -v /opt/grafana-storage:/var/lib/grafana grafana/grafana

访问url:

http://192.168.1.31:3000/

默认会先跳转到登录页面,默认的用户名和密码都是admin

登录之后,它会要求你重置密码。你还可以再输次admin密码

密码设置完成之后,就会跳转到首页
在这里插入图片描述
点击Setting——Add data source,由于使用的是镜像方式,所以版本比较新。和网络上的文章展示的图片不一样

在这里插入图片描述
选择Prometheus
在这里插入图片描述
name名字写Prometheus

type 选择Prometheus,因为数据都从它那里获取

url 输入Prometheus的ip(docker容器私网ip)+端口

在这里插入图片描述
点击下面的Save & Test,如果出现绿色的,说明ok了
在这里插入图片描述
在这里插入图片描述

监控mysql

回到首页,导入grafana监控模板,mysql监控模板id为7362,填入如下输入框内
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存就可以进行数据可视化展示
在这里插入图片描述

监控主机

导入主机的监控模板,模板id为8919,以相同方式导入即可

监控容器

导入容器的监控模板,模板id为179,以相同方式导入即可

监控redis

导入容器的监控模板,模板id为 763,以相同方式导入即可

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值