目录

一、Prometheus简介



Prometheus 是一个开源的系统监控和报警系统,在 2012 年由 SoundCloud 公司创建,并于 2015 年正式发布。2016 年,Prometheus 正式加入 CNCF (Cloud Native Computing Foundation),成为继kubernetes之后第二个在CNCF托管的项目, 现已广泛用于在容器和微服务领域中得到了广泛的应用,当然不仅限于此Prometheus 本身基于Go语言开发的一套开源的系统监控报警框架和时序列数据库(TSDB)。

Prometheus 的监控功能很完善和全面,性能也足够支撑上万台规模的集群。

网站:https://prometheus.io/

github:https://github.com/prometheus

二、Prometheus基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

其大概的工作流程是:

1、Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。

2、Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。

3、Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。

4、在Grafana图形界面中,可视化查看采集数据。

三、Prometheus架构图

四、Prometheus特性

1、多维度数据模型。

2、灵活的查询语言。

3、不依赖分布式存储,单个服务器节点是自主的。

4、通过基于HTTP的pull方式采集时序数据。

5、可以通过中间网关进行时序列数据推送。

6、通过服务发现或者静态配置来发现目标服务对象。

7、支持多种多样的图表和界面展示,比如Grafana等。

五、Prometheus组件

  • Prometheus server是Prometheus架构中的核心组件,基于go语言编写而成,无第三方依赖关系,可以独立部署在物理服务器上、云主机、Docker容器内。主要用于收集每个目标数据,并存储为时间序列数据,对外可提供数据查询支持和告警规则配置管理。

    • Prometheus服务器可以对监控目标进行静态配置管理或者动态配置管理,它将监控采集到的数据按照时间序列存储在本地磁盘的时序数据库中(当然也支持远程存储),自身对外提供了自定义的PromQL语言,可以对数据进行查询和分析
  • Client Library是用于检测应用程序代码的客户端库。在监控服务之前,需要向客户端库代码添加检测实现Prometheus中metric的类型。
  • Exporter(数据采集)用于输出被监控组件信息的HTTP接口统称为Exporter(导出器)。目前互联网公司常用的组件大部分都有Expoter供直接使用,比如Nginx、MySQL、linux系统信息等。
  • Pushgateway是指用于支持短期临时或批量计划任务工作的汇聚节点。主要用于短期的job,此类存在的job时间较短,可能在Prometheus来pull之前就自动消失了。所以针对这类job,设计成可以直接向Pushgateway推送metric,这样Prometheus服务器端便可以定时去Pushgateway拉去metric
  • Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据),pushgateway则是通过被动方式推送数据到prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给pushgateway, 然后pushgateway再把数据发送给Prometheus server
    • 总结就是pushgateway是普罗米修斯的一个组件,是通过被动的方式将数据上传至普罗米修斯。这个可以解决不在一个网段的问题
  • Alertmanager主要用于处理Prometheus服务器端发送的alerts信息,对其去除重数据、分组并路由到正确的接收方式,发出告警,支持丰富的告警方式。
  • Service Discovery:动态发现待监控的target,从而完成监控配置的重要组件,在容器环境中尤为重要,该组件目前由Prometheus Server内建支持

六、Prometheus服务发现

由于 Prometheus 是通过 Pull 的方式主动获取监控数据,也就是每隔几秒钟去各个target采集一次metric。所以需要手工指定监控节点的列表,当监控的节点增多之后,每次增加节点都需要更改配置文件,尽管可以使用接口去热更新配置文件,但仍然非常麻烦,这个时候就需要通过服务发现(service discovery,SD)机制去解决。

Prometheus 支持多种服务发现机制,可以自动获取要收集的 targets,包含的服务发现机制包括:azure、consul、dns、ec2、openstack、file、gce、kubernetes、marathon、triton、zookeeper(nerve、serverset),配置方法可以参考手册的配置页面。可以说 SD 机制是非常丰富的,但目前由于开发资源有限,已经不再开发新的 SD 机制,只对基于文件的 SD 机制进行维护。针对我们现有的系统情况,我们选择了静态配置方式。

七、部署环境

系统版本:CentOS Linux release 7.9.2009 (Core)

docker版本:Docker version 1.13.1

关闭防火墙 systemctl stop firewalld.service

禁止防火墙开机自启 systemctl disable firewalld.service

关闭selinux

sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g’ /etc/selinux/config

重启系统即可 reboot

八、部署主机

监控主机:192.168.112.30(Prometheus+Grafana)

被监控主机:192.168.112.20(node-exporter)

九、部署Prometheus

1、安装docker

在监控主机:192.168.112.30(Prometheus+Grafana)上操作

[root@server ~]# yum install wget.x86_64 -y	#使用Yum包管理器在系统上安装wget工具(适用于x86_64架构)
[root@server ~]# rm -rf /etc/yum.repos.d/* #删除 /etc/yum.repos.d/ 目录下的所有文件。这个目录存放了Yum用来获取和更新软件包的仓库定义文件。通过删除现有仓库配置,管理员可以确保接下来将只使用新添加的仓库源。
[root@server ~]# wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo #使用wget工具从阿里云镜像站下载CentOS 7的官方软件仓库配置文件,并将其保存为 /etc/yum.repos.d/Centos-7.repo。这样做的目的是更换默认的CentOS基础软件源为阿里云提供的国内镜像源,以提高软件包下载速度。
[root@server ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载适用于CentOS 7的EPEL扩展仓库配置文件,并将其保存到 /etc/yum.repos.d/epel-7.repo
[root@server ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#下载Docker CE的官方仓库配置文件,同样是从阿里云镜像站下载,这样可以加速Docker CE相关软件包的下载。
[root@docker-server ~]# yum install docker-ce -y #使用配置好的yum软件源来安装Docker CE社区版。

2、启动docker并设置开机自启

systemctl start docker
systemctl enable docker

3、下载镜像包

docker pull prom/node-exporter

docker pull prom/prometheus

docker pull grafana/grafana

4、创建prometheus挂载目录

mkdir /opt/prometheus

5、创建prometheus配置文件

vi /opt/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: centos7 - job_name: grafana
static_configs:
- targets: ['192.168.112.30:9100']
labels:
instance: centos7

注:这里的IP:192.168.112.30就是本地localhost本地IP,为了实验方便,将prometheus和grafana搭建在同一个服务器上了。

6、启动prometheus

docker run  -d \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus

7、查看端口状态

netstat -antupl |grep 9090

8、访问地址

192.168.112.30:9090

十、部署grafana

1、创建挂载数据目录

mkdir /opt/grafana-storage

2、设置权限

chmod 777 -R /opt/grafana-storage

注:因为这个文件需要写入所以要给一定的权限,这里为了方便测试给777,具体权限要根据具体实际情况而定。

3、启动grafana

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

4、查看端口状态

netstat -antupl | grep 3000

5、访问地址

192.168.112.30:3000

注:默认账号密码都是admin

十一、部署node-exporter

1、启动node-exporter

docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

2、查看端口状态

netstat -antupl | grep 9100

3、访问网址

192.168.112.30:9100

十二、添加监控节点

在被监控主机:192.168.112.20(node-exporter)上操作

1、安装docker

yum -y install docker

2、启动docker并设置开机自启

systemctl start docker
systemctl enable docker

3、被监控主机安装node-exporter

docker pull prom/node-exporter

4、安装并启动镜像

docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

5、修改prometheus配置文件

在监控主机:192.168.112.30(Prometheus+Grafana)上操作

cat /opt/prometheus/prometheus.yml

global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: centos7
- job_name: grafana
static_configs:
- targets: ['192.168.112.30:9100']
labels:
instance: centos7
- job_name: harbor
static_configs:
- targets: ['192.168.112.20:9100']
labels:
instance: centos7

6、重启prometheus

docker restart 6decfdbc9fa4

7、测试

  • 网页登录prometheus
  • 点击Status下拉选项,选择Targets。

  • 如下图说明添加监控节点已完成

十三、添加监控模版

1、添加数据源

  • 网页登陆grafana

  • 依次点击左侧Connections Data source Add data source

  • Add data source中找到Prometheus

  • 点击Prometheus,设置名字和IP地址


注:如上图点击Save & Test,如果出现绿色的,说明ok了。

2、添加模版

  • 点击左上角+号,点击Import dashboard


3、下载需要的dashboard页面

  • 本示例使用的Dashboard如下图所示,链接如下

[Node Exporter Full | Grafana Labs](Node Exporter Full | Grafana Labs)

  • 下载JSON文件,用于导入。

  • 上传JSON文件

4、效果演示


docker部署监控Prometheus+Grafana的更多相关文章

  1. 使用Docker部署监控系统,Prometheus,Grafana,监控服务器信息及Mysql

    使用Docker部署监控系统,Prometheus,Grafana,监控服务器信息及Mysql 一.docker部署prometheus监控系统 1.1 配置安装环境 1.1.1 安装promethe ...

  2. 0基础入门 docker 部署 各种 Prometheus 案例 - 程序员学点xx 总集篇

    目录 大家好, 学点xx 系列也推出一段时间了.虽然 yann 能力有限,但还是收到了很多鼓励与赞赏.对这个系列 yann 还是很喜欢的,特别是 Prometheus 篇,在期间经历公众号 100 篇 ...

  3. K8S的Kafka监控(Prometheus+Grafana)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 手把手教你 Docker部署可视化工具Grafana

    一.Grafana的简单介绍 Grafana是开源的.炫酷的可视化监控.分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起.它还有丰富的套件供您选 ...

  5. Prometheus+Grafana企业监控系统

    Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...

  6. SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控

      无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator.提到Actuator,又不得不提Micrometer ...

  7. kubernetes监控-prometheus(十六)

    监控方案 cAdvisor+Heapster+InfluxDB+Grafana Y 简单 容器监控 cAdvisor/exporter+Prometheus+Grafana Y 扩展性好 容器,应用, ...

  8. 基于Docker+Prometheus+Grafana监控SpringBoot健康信息

    在微服务体系当中,监控是必不可少的.当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险.在CNCF云计算平台中,Prometheus+Grafana是 ...

  9. Prometheus+Grafana监控部署实践

    参考文档: Prometheus github:https://github.com/prometheus grafana github:https://github.com/grafana/graf ...

  10. Prometheus+Grafana 监控 Docker

    cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息. https://github.com/google/cadvisor Prometheus(普罗 ...

随机推荐

  1. Asp .Net Core 部署在阿里云Centos上 :使用Docker部署

    参照 https://www.cnblogs.com/xiaxiaolu/p/9973631.html 运行环境 使用SecureCrt连接服务器 1.阿里云ECS 4核 16 GiB 8Mbps 带 ...

  2. 从零开始配置vim(26)——LSP UI 美化

    之前我们通过几个实例演示如何配置其他语言的lsp服务,相信各位小伙伴碰到其他的编程语言也能熟练的配置它对应的lsp服务.本篇讲作为一个补充,我们来优化一下LSP 相关的显示 配置 UI 原始的 lsp ...

  3. Visual Studio安装教程、Visual Studio2017软件提供,版本序列号丨编写第一个程序。

    一.安装步骤 1.安装前注意一下自己电脑的IE浏览器是不是10 版本及以上的,如果不是要先升级到10才能安装 Visual Studio2017.打开IE浏览器,点击[设置]接着点击[关于]即可查看. ...

  4. hydra 密码爆破工具入门

    Hydra(九头蛇海德拉)是希腊神话之中的一个怪兽,以九个头闻名于世,在Kali中hydray(hai der rua) 是默认被安装的,该工具是密码破解的老司机,可以破解各种登录密码,非常怪兽,但是 ...

  5. 2、数据库:SQL Server部署 - 系统部署系列文章

    对于微软的SQL Server的安装,以前已经有写过了,到了2022版本,安装没多大的改变,很多只需要少配置,然后直接下一步即可.现在是2023年了,SQL Server已经出到了2022版本,这篇博 ...

  6. Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  7. java线程池实现多任务并发执行

    Java线程池实现多任务并发执行 1️⃣ 创建一些任务来落地多任务并发执行 每一个数组里面的数据可以看成任务,或者是需要并发的业务接口, 数组与数组之间,可以看作为他们之间有血缘关系,简单来说就是: ...

  8. 配置PHP的运行环境

    一.wamp Wamp是Windows Apache Mysql PHP的缩写,即在windows下将Apache+PHP+Mysql集成的开发环境,操作简单一键安装,摆脱手动修改配置文件的繁琐. 图 ...

  9. TP5图片处理常见问题

    一.Class 'think\Image' not found composer require topthink/think-image 装上了扩展控制器头部加了 use think\Image然后 ...

  10. Oracle 数据库锁表问题及相关解决方法

    Oracle 数据库锁表问题及相关解决方法 问题描述: 今天在公司运行服务的时候,需要查询300多万的数据,再进行排序之后放到kafka的消息队列中,供flink进行消费.在服务器上直接运行后,服务报 ...