当前位置: 首页 > article >正文

【监控体系搭建三】Docker部署PrometeusGrafana

一、Prometheus

1. Prometeus介绍

1.1 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

1.2 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图形界面中,可视化查看采集数据。

1.3 Prometheus架构图

在这里插入图片描述

1.4 Prometheus特性

  1. 多维度数据模型。
  2. 灵活的查询语言。
  3. 不依赖分布式存储,单个服务器节点是自主的。
  4. 通过基于HTTP的pull方式采集时序数据。
  5. 可以通过中间网关进行时序列数据推送。
  6. 通过服务发现或者静态配置来发现目标服务对象。
  7. 支持多种多样的图表和界面展示,比如Grafana等。

1.5 Prometheus组件

  1. Prometheus server
    Prometheus架构中的核心组件,基于go语言编写而成,无第三方依赖关系,可以独立部署在物理服务器上、云主机、Docker容器内。主要用于收集每个目标数据,并存储为时间序列数据,对外可提供数据查询支持和告警规则配置管理。
  • Prometheus服务器可以对监控目标进行静态配置管理或者动态配置管理,它将监控采集到的数据按照时间序列存储在本地磁盘的时序数据库中(当然也支持远程存储),自身对外提供了自定义的PromQL语言,可以对数据进行查询和分析
  1. Client Library
    用于检测应用程序代码的客户端库。在监控服务之前,需要向客户端库代码添加检测实现Prometheus中metric的类型。
  2. Exporter(数据采集)
    用于输出被监控组件信息的HTTP接口统称为Exporter(导出器)。目前互联网公司常用的组件大部分都有Expoter供直接使用,比如Nginx、MySQL、linux系统信息等。
  3. 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是普罗米修斯的一个组件,是通过被动的方式将数据上传至普罗米修斯。这个可以解决不在一个网段的问题
  1. Alertmanager
    主要用于处理Prometheus服务器端发送的alerts信息,对其去除重数据、分组并路由到正确的接收方式,发出告警,支持丰富的告警方式。
  2. Service Discovery
    动态发现待监控的target,从而完成监控配置的重要组件,在容器环境中尤为重要,该组件目前由Prometheus Server内建支持

1.6 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 机制进行维护。针对我们现有的系统情况,我们选择了静态配置方式。

2. Prometheus部署

2.1 拉取镜像

docker pull prom/prometheus

2.2 创建prometheus挂载目录

mkdir /opt/prometheus

2.3 创建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.110.30:9100']
    labels:
      instance: centos7

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

2.4 启动prometheus

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

2.5 查看端口状态

netstat -antupl |grep 9090

在这里插入图片描述

2.6 访问地址

本机IP:9090
http://192.168.110.30:9090
在这里插入图片描述

二、Grafana

1. Grafana介绍

Grafana是一个开源软件,拥有丰富的指标仪表盘和图形编辑器,适用Prometheus、Graphite、Elasticsearch、OpenTSDB、InfluxDB、redis… 简单点说就是一套开源WEB可视化平台。通过对数据库数据二次提取,做出好看的图形化界面。
官网地址:https://grafana.com/

Prometheus的查看界面过于简单,也很难做到一目了然,配合Grafana的强大前端表现力和丰富的dashboard,我们可以很轻松的配置出美观的界面。

2. Grafana部署

2.1 拉取镜像

docker pull grafana/grafana

2.2 创建Grafana挂载目录

mkdir /opt/grafana-storage

2.3 设置权限

chmod 777 -R /opt/grafana-storage

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

2.4 启动grafana

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

2.5 查看端口状态

netstat -antupl | grep 3000

在这里插入图片描述

2.6 访问地址

本机IP:3000
192.168.110.30:3000

注:默认账密是admin,初次登录会要求你改管理员密码。
在这里插入图片描述

三、node-exporter

1. node-exporter介绍

由于Prometheus只是一个监控工具,无法主动获取你想要监控的服务器、数据库…等目标,所以需要相应的exporter去探测目标。下面介绍下使用node_exporter探测Linux服务器的过程。

2. node-exporter部署

2.1 拉取镜像

docker pull prom/node-exporter

2.2 启动node-exporter

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

2.3 查看端口状态

netstat -antupl | grep 9100

在这里插入图片描述

2.4 访问网址

本机IP:9100
192.168.110.30:9100
在这里插入图片描述

四、武魂融合(开始监控)

探测器exporter、监控工具Prometheus、图形化工具Grafana都有了,下一步就是把这些融合起来,最终形成完整的监控系统。

1. 修改Prometheus配置

vi /opt/prometheus/prometheus.yml

这一步的目的是将exporter与Prometheus结合起来,是的Prometheus可以获取目标的监控信息。
配置内容:

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

2. 重启prometheus

docker restart prometheus

3. 测试是否监控成功

  1. 网页登录prometheus
  2. 点击Status下拉选项,选择Targets
    在这里插入图片描述
  3. 如下图说明添加监控节点已完成
    在这里插入图片描述

4. Grafana配置数据源

  1. 网页登陆grafana
    在这里插入图片描述
  2. 依次点击左侧Connections Data source Add data source
    在这里插入图片描述
  3. 在Add data source中找到Prometheus
    在这里插入图片描述
  4. 点击Prometheus,设置名字和IP地址
    在这里插入图片描述在这里插入图片描述

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

5. Grafana添加展示模板

  • 点击左上角+号,点击Import dashboard
    在这里插入图片描述
    在这里插入图片描述
    此时有两种导入模板方案

  • 服务器可访问grafana官网,则直接输入模板ID,如10467,点击Load
    在这里插入图片描述

  • 不能访问的话,使用可访问的电脑,浏览器访问 https://grafana.com/grafana/dashboards下载所需要的dashboard页面json
    在这里插入图片描述
    在这里插入图片描述

6. 效果演示

在这里插入图片描述

上述介绍的只是监控Linux服务器,还有windows、IIS、sql等,需要安装相应的exporter才可进行监控,在后续的文章中会介绍。


http://www.kler.cn/news/328200.html

相关文章:

  • Linux网络命令:用于管理和查询系统名称解析器(DNS)的实用工具resolvectl详解
  • 【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
  • TypeScript 设计模式之【状态模式】
  • JavaScript Set基础与实战应用
  • 基于大数据的健身器材销售数据分析及可视化系统
  • Python:lambda 函数详解 以及使用
  • 如何在本地和远程删除 Git 分支
  • SQL,将多对多的关联记录按行输出
  • Qt Creator安卓环境配置【筑基篇】
  • 数据结构-4.1.特殊矩阵的压缩存储
  • 【STM32单片机_(HAL库)】4-3-2【定时器TIM】测量按键按下时间1——编程实现捕获功能
  • 在Unity编辑器中实现组件的复制与粘贴:完整指南
  • Vue3学习(六)Vue3 + ts几种写法
  • 深入工作流调度的内核
  • 等保测评:企业数字安全的坚实盾牌
  • [Docker学习笔记]利用Dockerfile创建镜像
  • 无人机之编队控制篇
  • 速盾:cdn是怎么加速视频的?
  • C++第3课——保留小数点、比较运算符、逻辑运算符、布尔类型以及if-else分支语句(含视频讲解)
  • JAVA连接HDFS操作
  • docker(1) --- win11环境配置
  • React Native使用高德地图
  • vscode 的terminal 输出打印行数限制设置
  • 深度学习之贝叶斯分类器
  • camunda + oracle 启动报错 解决方法
  • Nginx的命令行控制
  • NLP:BERT的介绍并使用该模型计算文本相似度
  • VS2013 运行Qt生成的.exe报错
  • 【系统架构设计师】专题:需求工程总结
  • Qwen2-VL论文阅读笔记