从零开始搭建Prometheus+grafana服务器组件监控系统

news2024/12/23 14:42:39

服务器及相关组件监控

本文档主要记录了常用企业级服务器及各种组件的监控手段和监控部署方案,使企业可以实时感知服务器组件的健康状态,并在服务器或组件出现异常时及时做出反应。

本方案采用的Prometheus+grafana的方式实现对服务器及各种组件的监控,以下内容将会带你从零开始,一步步搭建整个监控方案。监控对象包括:服务器监控(cpu、内存、磁盘等指标)、mysql监控、redis监控、kafka监控、clickhouse监控、docker容器等常用组件的监控。

为便于维护,本方案几乎所有用到的组件均采用docker进行部署,需要服务器上安装部署好了docker环境,包括dockerdocker-compose

基础环境安装部署

基础环境总共包含Prometheusalertmanagergrafana三个组件,其中,Prometheus组件主要用于采集各监控对象的各项指标,并将其入库(Prometheus本身就是一个数据库),alertmanager作为Prometheus组件的一个补充模块,负责接收来自Prometheus组件的阈值告警信息,并将其状态推送到指定的告警组件,包括但不限于邮件webhook告警等,而grafana作为一个展示界面,可以非常灵活的展示各个指标的相关参数数据,包括但不限于各种趋势图、饼图等。

在这里插入图片描述

下面我将给大家展示这3个组件搭建部署方法,以及使用方法。

Prometheus安装部署

Prometheus官方有对应的docker镜像,通过docker镜像进行部署,不仅部署起来方便,还会使系统整体上更加整洁,便于后期的维护。直接拉去对应的镜像,并将其封装打包用docker-compose进行维护即可。具体操作如下:

  1. 官网获取最新Prometheus相关版本,访问Prometheus官网,点击跳转到docker界面获取下载链接
    在这里插入图片描述


    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    进入界面,得到当前最新版本镜像,如下图:

    在这里插入图片描述


    在这里插入图片描述

  2. 服务器直接拉去该镜像即可

docker pull prom/prometheus:v2.47.2

在这里插入图片描述
在这里插入图片描述


  1. 创建Prometheus应用目录和相关配置文件

在安装目录下创建prometheus目录,并且在目录中创建启动文件docker-compose.yml和配置文件prometheus.yml,另外创建prometheus_data目录用于外挂到启动容器,以便Prometheus数据本地落盘.

    mkdir prometheus
    cd prometheus
    touch docker-compose.yml prometheus.yml
    mkdir -m 777 prometheus_data

在这里插入图片描述


docker-compose.yml文件内容如下:

version: '2.4'
services:
  prometheus:
    image: prom/prometheus:v2.47.2
    container_name: prometheus
    hostname: prometheus
    restart: always
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus_data:/prometheus
    ports:
      - "9090:9090"
    cpus: 4

prometheus.yml文件内容如下:

global:
  scrape_interval:     1m
  evaluation_interval: 1m
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      #- 255.255.255.255:9093

rule_files:
  - "rules/*.yml"

scrape_configs:
#监控Prometheus自身
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  1. 启动应用并验证
docker-compose up -d

浏览器访问服务器9090端口若页面可以正常加载,表明安装成功
在这里插入图片描述


  1. 停止应用并封装
docker-compose down
docker save prom/prometheus:v2.47.2 | gzip > prometheus.image.tgz

在这里插入图片描述
封装完成后,直接将整个Prometheus目录拷贝到生产环境启动即可。

启动命令如下:
shell docker load -i prometheus.image.tgz docker-compose up -d

alertmanager安装部署

同样的方法,从docker界面点击可以看到alertmanager最新的版本镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接拉取最新镜像即可实现

docker pull prom/alertmanager:v0.26.0

在这里插入图片描述

创建alertmanager.yml文件,内容设置告警模式为webhook并指定告警url,内容如下:

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'webhook'
receivers:
  - name: 'webhook'
    webhook_configs:
      - url: 'http://<告警url>'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

修改docker-compose.yml文件,添加alertmanager应用启动信息,具体如下:

version: '2.4'
services:
  prometheus:
    image: prom/prometheus:v2.47.2
    container_name: prometheus
    hostname: prometheus
    restart: always
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus_data:/prometheus
    ports:
      - "9090:9090"
    cpus: 4

  alertmanager:
    image: prom/alertmanager:v0.26.0
    container_name: prom_alertmanager
    hostname: alertmanager
    restart: always
    depends_on:
      - prometheus
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
      - ./alertmanager:/alertmanager

启动应用

docker-compose down && docker-compose up -d

在这里插入图片描述

浏览器访问alertmanager应用首页
在这里插入图片描述

grafana安装部署

grafana组件作为可视化工具,提供了丰富的可视化界面,同时还有丰富的开源社区,可以下载到很多优质的可视化panel,极大的方便了系统运维人员。

为方便后期运维,grafana的安装方法同样采用docker进行安装,具体步骤如下:

  1. 获取最新镜像并拉取,访问docker官方仓库,搜索grafana,复制最新镜像并从服务器上拉取
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

拉取镜像 ```shell docker pull grafana/grafana:10.2.0 ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/d26dbb3016f548948aa3f0bbb1fdcfeb.png#pic_center)
  1. 创建应用目录并配置应用启动文件
mkdir grafana
cd grafana
mkdir data
touch docker-compose.yml

在这里插入图片描述

docker-compose.yml文件内容如下:

version: '3'
services:
  app:
    image: "grafana/grafana:10.2.0"
    user: "root"
    network_mode: "host"
    restart: always
    volumes:
      - ./data:/var/lib/grafana
  1. 启动应用并访问首页
docker-compose up -d

在这里插入图片描述


在这里插入图片描述

grafana默认账号密码: admin/admin,登录后可以选择跳过不修改密码。

  1. 将Prometheus数据源导入grafana

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 导入相关监控模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

至此,服务器组件监控的基础环境搭建完成。

服务器监控

服务器监控需要安装部署node-exporter组件,可以直接本地部署,也可以通过容器进行部署,推荐使用容器进行部署。

  1. 从官网上下载node-exporter应用的镜像包,直接通过docker-compose进行启动。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 创建应用并配置docker-compose.yml启动文件
    在这里插入图片描述

  3. 拉取镜像并启动应用

拉取镜像

docker-compose pull

拉取镜像前,需要quay.io添加到docker服务器的配置文件的insecure-registries参数中,否则会拉取失败
在这里插入图片描述
在这里插入图片描述

启动应用

docker-compose up -d

在这里插入图片描述

  1. 配置Prometheus采集策略,修改prometheus.yml文件,将对应node的api端口添加到配置文件中并重启应用

通过docker inspect <容器id>可以查看容器监听端口
在这里插入图片描述
在这里插入图片描述

prometheus.yml配置文件中添加配置:

#监控虚拟机主机状态
  - job_name: 'node'
    static_configs:
    - targets: ['<服务器ip>:9100']

在这里插入图片描述

  1. 重启Prometheus
docker-compose down && docker-compose up -d

在这里插入图片描述

  1. Prometheus查看采集数据

在这里插入图片描述


至此,表明数据已经在正常采集

  1. 将对应告警策略rules添加到Prometheus,使得当服务器出现故障时,Prometheus自动触发相关告警

添加prometheus_rules目录用于存放所有rules文件

mkdir prometheus_rules

添加prometheus_rules/nodes.yml文件,文件内容如下:

groups:
  - name: 服务器自监控
    rules:
      - alert: 服务器状态
        expr: up{job='node'} == 0
        for: 60s
        labels:
          severity: error
        annotations:
          summary: '【服务器故障】导致无法正常访问时,服务器可能已经出现宕机,需要立即处理!!!'
          description: '当前节点:{{ $labels.instance }} ' 

      - alert: 服务器CPU使用率
        expr: round((1 - avg(rate(node_cpu_seconds_total{mode='idle'}[2m])) by (instance))*100, 0.01) > 85
        for: 300s
        labels:
          severity: error
        annotations:
          summary: '【服务器】CPU使用率大于85%,需要立即关注!!!' 
          description: '当前节点:{{ $labels.instance }},当前值{{ $value }}% '


      - alert: 服务器内存使用率
        expr: round(((node_memory_MemTotal_bytes{job="node"} - node_memory_MemAvailable_bytes{job="node"} )/node_memory_MemTotal_bytes{job="node"})*100, 0.01) > 85
        for: 300s
        labels:
          severity: error
        annotations:
          summary: '【服务器】内存使用率大于85%,需要立即关注!!!' 
          description: '当前节点:{{ $labels.instance }},当前值{{ $value }}% '

      - alert: 服务器磁盘使用率
        expr: round(((node_filesystem_size_bytes{mountpoint="/opt"} - node_filesystem_free_bytes{mountpoint="/opt"}) / node_filesystem_size_bytes{mountpoint="/opt"}) * 100, 0.01) > 85
        for: 60s 
        labels:
          severity: error
        annotations:
          summary: '【服务器】数据盘使用率大于85%,需要立即关注!!!' 
          description: '当前节点:{{ $labels.instance }},数据盘挂载: {{ $labels.mountpoint }};当前值{{ $value }}% '

      - alert: 服务器进程数
        expr: node_procs_running > 800
        for: 60s 
        labels:
          severity: error
        annotations:
          summary: '【服务器】当前进程数大于800,需要立即关注!!!' 
          description: '当前节点:{{ $labels.instance }};当前值{{ $value }} '

      - alert: 服务器文件句柄数
        expr: round(node_filefd_allocated / node_filefd_maximum * 100, 0.01) > 10
        for: 60s 
        labels:
          severity: error
        annotations:
          summary: '【服务器】句柄数使用率超过10%,请及时关注!!!' 
          description: '当前节点:{{ $labels.instance }};当前值{{ $value }}% '

修改docker-compose.yml启动文件,将prometheus_rules挂载到容器中
在这里插入图片描述

  1. 重启Prometheus
docker-compose down && docker-compose up -d

在这里插入图片描述

  1. Prometheus页面查看rules规则
    在这里插入图片描述


    可以看到部分异常指标已经被监控并且告警出来,通过webhook应用(一般定制实现,本应用有flask实现,非官方组件,由个人开发,仅供测试使用)后台的log发现告警信息已经推送至对应的webhook应用。
    在这里插入图片描述


    在这里插入图片描述

  2. 登录grafana官网,下载node对应监控dashboard文件并配置相关数据源

搜索dashboard
在这里插入图片描述

下载导入dashboard
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此,服务器组件监控到此结束,更多玩法可以自行到官方查阅文档

其他组件监控

其他组件的监控可以与服务器监控类型可以到prometheus官网下载并配置对应exporter组件,将其配置到Prometheus的采集列表中(修改prometheus.yml文件),配置Prometheus告警阈值rules(添加prometheus_rules文件)后方可实现对相关组件的监控。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】NodeJS核心知识点整理

1.Node.js入门案例 1.1.什么是Node.js JS是脚本语言&#xff0c;脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS&#xff0c;浏览器充当了解析器的角色。而对于需要独立运行的JS&#xff0c;NodeJS就是一个解析器。 每一种解析器都是一个运行环境&#xff0c;不但…

C/C++数据结构之深入了解线性表:顺序表、单链表、循环链表和双向链表

线性表是一种基本的数据结构&#xff0c;它在计算机科学中起着至关重要的作用。线性表用于存储一系列具有相同数据类型的元素&#xff0c;这些元素之间存在顺序关系。在C/C中&#xff0c;我们可以使用各种方式来实现线性表&#xff0c;其中包括顺序表、单链表、循环链表和双向链…

基于白鲸优化算法BWO优化的VMD-KELM光伏发电短期功率预测MATLAB代码(含详细算法介绍)

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VMD适用于处理非线性和非平稳信号&#xff0c;例如振动信号、生物信号、地震信号、图像信号等。它在信号处理、振动分析、图像处理等领域有广泛的应用&#xff0c;特别是在提取信号中的隐含信息和去除噪声方面…

无头浏览器自动化:Puppeteer 帮你释放效能 | 开源日报 No.64

facebook/react Stars: 209.5k License: MIT React是一个用于构建用户界面的JavaScript库。它具有以下优势和特点&#xff1a; 声明式&#xff1a;React使得创建交互式UI变得轻松。您可以为应用程序中的每个状态设计简单视图&#xff0c;当数据发生更改时&#xff0c;React会…

Postman日常操作

一.Postman介绍 1.1第一个简单的demo 路特斯&#xff08;英国汽车品牌&#xff09;_百度百科 (baidu.com) 1.2 cookie 用postman测试需要登录权限的接口时&#xff0c;会被拦截&#xff0c;解决办法就是每次请求接口前&#xff0c;先执行登录&#xff0c;然后记住cookie或者to…

ChineseChess5 2023.10.28

中国象棋残局&#xff1a;黑双卒单车压境解棋

iphone备份后怎么转到新手机,iphone备份在哪里查看

iphone备份会备份哪些东西&#xff1f;iphone可根据需要备份设备数据、应用数据、苹果系统等。根据不同的备份数据&#xff0c;可备份的数据类型不同&#xff0c;有些工具可整机备份&#xff0c;有些工具可单项数据备份。本文会详细讲解苹果手机备份可以备份哪些东西。 一、ip…

婚礼的魅力

昨日有幸被邀请去当伴郎&#xff0c;虽然是替补&#xff0c;即别人鸽了&#xff0c;过去救急&#xff0c;但总归是去起作用。 婚礼的魅力&#xff0c;感受到了&#xff0c;满满的仪式感&#xff0c;紧凑的流程&#xff0c;还有不断的拍照&#xff0c;做视频&#xff0c;留下美好…

接口测试到底怎么做,5分钟时间看完这篇文章彻底搞清楚

01、通用的项目架构 02、什么是接口 接口&#xff1a;服务端程序对外提供的一种统一的访问方式&#xff0c;通常采用HTTP协议&#xff0c;通过不同的url&#xff0c;不同的请求类型&#xff08;GET、POST&#xff09;&#xff0c;不同的参数&#xff0c;来执行不同的业务逻辑。…

2.Vue — 模板语法、数据绑定、el与data的写法、数据代理

文章目录 一、模板语法1.1 插值语法1.2指令语法 二、数据绑定语法2.1 单向数据绑定2.2 双向数据绑定 三、el与data的两种写法3.1 el3.2 data 四、数据代理4.1 Object.defineProperty4.2 Vue数据代理4.2.1 展示数据代理4.2.2 Vue数据代理 一、模板语法 root容器里面的代码被称为…

Ajax学习笔记第二天

喜欢的东西太贵了&#xff0c;我一咬牙&#xff0c;狠下心决定不喜欢了&#xff01; 【一.GET请求】 【1.1 URL即信息】 我们知道php的相关运算都是在服务器端进行的&#xff0c;此时我们要考虑一个问题&#xff0c;如何将要计算的数字带给服务器&#xff1f;我们可以通过UR…

如何能在项目具体编码实现之前能尽可能早的发现问题并解决问题

在项目的具体编码实现之前尽可能早地发现并解决问题&#xff0c;可以大大节省时间和资源&#xff0c;提高项目的成功率。以下是一些策略和方法&#xff1a; 1. 明确需求和预期&#xff1a; 确保所有的项目需求都是清晰和明确的。需求模糊不清是项目失败的常见原因之一。与利益…

java - IDEA IDE - 设置字符串断点

文章目录 java - IDEA IDE - 设置字符串断点概述笔记END java - IDEA IDE - 设置字符串断点 概述 IDE环境为IDEA2022.3 在看一段序列化的代码, 想找出报错抛异常那个点, 理解一下代码实现. 因为序列化代码实现在第三方jar包中, 改不了(只读的). 根本数不清第几次才会开始报…

vue3基础流程

目录 1. 安装和创建项目 2. 项目结构 3. 主要文件解析 3.1 main.js 3.2 App.vue 4. 组件和Props 5. 事件处理 6. 生命周期钩子 7. Vue 3的Composition API 8. 总结和结论 响应式系统&#xff1a; 组件化&#xff1a; 易于学习&#xff1a; 灵活性&#xff1a; 社…

Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45

导读Canonical 近日正式发布了 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;操作系统&#xff0c;其中包含一些最新的 GNU/Linux 技术、改进的硬件支持以及许多其他变化。 Ubuntu 23.10 采用了最新的 Linux 6.5 内核系列&#xff0c;并为 Ubuntu 桌面和服务器增强了 z…

代码随想录Day31 贪心06 T738 单调递增的数字 T968监控二叉树

LeetCode T738 单调递增的数字 题目链接:738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 我们以332举例,题目要我们获得的是小于等于332的最大递增数字,我们知道这个数字要递增只能取299了,332 -- 329 --299 我们从后向前遍历,只要前一位大于后一位,我…

嵌入式-数码管控制

一、数码管显示数字&#xff0c;P2_4, P2_3,P2_2,这三个组合起来代表1-8的二进制表示代表1-8个led。P0代表要显示的数字的16进制表示。 这个图就是表示led灯, 比如要显示数据6&#xff0c;那就是0111 1101&#xff0c;那么16进制就是0x7D,所以p00x7D 二、数码管&#xff0c;动…

C/C++数据结构之深入了解树与二叉树:概念、存储结构和遍历

树是一种常见的数据结构&#xff0c;它在计算机科学和数学中都有广泛的应用。树结构的最简单形式是二叉树&#xff0c;本文将深入探讨树和二叉树的概念、存储结构以及二叉树的遍历&#xff0c;并提供一些实际的代码示例来帮助理解这些概念。 树与二叉树的概念 树 (Tree) 树是…

[双指针] Leetcode 283.移动零和1089.复习零

[双指针] Leetcode 283.移动零和1089.复习零 移动零 283. 移动零 1.题意分析 (1) 给你一个数组&#xff0c;将数组中的所有0移动到数组的末尾 (2) 保证非0元素在数组中相对位置不变 (3) 在原数组中操作 2.解题思路 由于题目要求我们移动数组内容&#xff08;也就是交换两…

【JAVA学习笔记】49 - String类,StringBuffer类,StringBuilder类(重要)

String类 一、String入门 1) String对象用于保存字符串&#xff0c;也就是一组字符序列 2)字符串常量对象是用双引号括起的字符序列。例如: "你好"、 "12.97"、 "boy"等 3)字符串的字符使用Unicode字符编码&#xff0c;一个字符&#xff08;不…