Linux之Prometheus

news2024/9/23 21:19:58

认识普罗米修斯

1、prometheus介绍

        Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合, 由go语言开发。
适合监控容器平台, 因为kubernetes(俗称k8s)的流行带动了prometheus的发展。

        PS:文档使用prometheus监控物理服务器。

 prometheus的官方网站: https://prometheus.io/

2、时序数据库介绍

数据库分类:

  • 关系型:mysql,oracle,sql server,sybase,db2,access等
  • 非关系型(nosql):
  1. key-value:memcache redis etcd
  2. 文档型:mongodb elasticsearch
  3. 列式:hbase
  4. 时序:prometheus
  5. 图形数据库:Neo4j

时间序列数据(TimeSeries Data)按照时间顺序记录系统、设备状态变化的数据被称为时序数据。

3、时序数据主要的特点

    • 数据带有时间属性,且数据量随着时间递增;
    • 大都为插入操作较多且无更新的需求,插入数据多,每秒钟插入数据可到达千万甚至是上亿条分析过去时序数据可以做成多纬度报表,揭示其趋势性、规律性、异常性;
    • 分析时序数据趋势可以做大数据分析,机器学习,实现预测和预警;
    • 能够按照条件筛选数据, 也可以按照时间范围统计,聚合,展示数据。

4、常见应用场景

  • 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距离等等。每时每刻都要将数据记录下来做分析;
  • 某一个地区的各车辆的行驶轨迹数据;
  • 传统证券行业实时交易数据;
  • 实时运维监控数据等。

prometheus主要特性

1、Prometheus的主要特性有

1. 多维度数据模型

2. 灵活的查询语言

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

4. HTTP方式,通过pull模型拉去时间序列数据 

5. 也可以通过中间网关支持push模型

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

7. 支持多种多样的图表和界面展示

 2、pormetheus原理架构图

prometheus监控

 1、实验环境准备

需要准备三台主机,修改其主机名,互绑IP

server,agent1,grafana


[root@server ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.50	server.example.com	server
192.168.100.10	agent.example.com	agent
192.168.100.50	grafana.example.com	grafana
 
[root@server ~]# scp /etc/hosts root@192.168.100.10:/etc/hosts
[root@server ~]# scp /etc/hosts root@192.168.100.30:/etc/hosts

2、安装prometheus

下载地址:https://prometheus.io/download/ (请使用共享的软件版本,以免出现不兼容问题)

[root@server ~]# tar xf prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local/ 
[root@server ~]# mv /usr/local/prometheus-2.5.0.linux-amd64/ /usr/local/prometheus

3、配置文件说明

[root@server ~]# egrep -n : /usr/local/prometheus/prometheus.yml | awk -F'#' '{print $1}'
2:global:                              # 全局配置段
3:  scrape_interval:     15s           # 每15s抓取(采集)数据一次
4:  evaluation_interval: 15s           # 每15秒计算一次规则
8:alerting:                            # Alertmanager报警相关
9:  alertmanagers:
10:  - static_configs:
11:    - targets:
12:
15:rule_files:                          # 规则文件列表
19: 
21:scrape_configs:                      # 抓取的配置文件(也就是监控的实例) 23:  - job_name: 'prometheus'                            # 监控的实例名称
28:    static_configs: 
29:    - targets: ['localhost:9090']    # 监控的实例IP与端口,在这里为监控服务器本身

4、直接使用默认配置文件启动, 建议&后台符号,验证9090端口

[root@server ~]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

[root@server ~]# netstat -ntlup |grep :9090 
tcp6    0   0 :::9090          :::*             LISTEN      64950/prometheus

prometheus界面

通过浏览器访问http://服务器IP:9090就可以访问到prometheus的主界面

点Status --》点Targets --》可以看到只监控了本机 (默认只监控了本机一台) 

通过http://服务器IP:9090/metrics可以查看到监控的数据

说明:这里的metrics你可以类比成zabbix里的监控项

在web主界面可以通过关键字查询metrics, 并显示图形

        虽然prometheus服务器通过9090端口能监控一些metrics,但像cpu负载等这些linux常见的监控项却没有,需要node_exporter组件;node_exporter组件可以安装在本机或远程linux主机上。

监控远程linux主机

在远程linux主机(被监控端agent1)上安装node_exporter组件 

下载地址: https://prometheus.io/download/ (请使用共享的软件版本,以免出现不兼容问题) 

安装node_exporter组件 

[root@agent ~]# ls
anaconda-ks.cfg  node_exporter-1.8.2.linux-amd64.tar.gz
[root@agent ~]# tar -zxvf node_exporter-1.8.2.linux-amd64.tar.gz -C /usr/local/
 
[root@agent ~]# cd /usr/local/
[root@agent local]# ls
bin  etc  games  include  lib  lib64  libexec  node_exporter-1.8.2.linux-amd64  sbin  share  src
[root@agent local]# mv node_exporter-1.8.2.linux-amd64/ node_exporter

启动node_exporter, 并验证端口

[root@agent local]# nohup /usr/local/node_exporter/node_exporter &

nohup命令: 如果把启动node_exporter的终端给关闭,那么进程也可能会随之关闭。nohup命令可以挂
起在后台,除非杀掉相关进程,否则不会随终端关闭而关闭进程。

查看端口9100是否启动

[root@agent local]# ss -anlt
State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process          
LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*                              
LISTEN          0                4096                                   *:9100                                *:*                              
LISTEN          0                128                                 [::]:22                               [::]:*                              
[root@agent local]#

浏览器访问http://被监控端IP:9100/metrics就可以查看到node_exporter在被监控端收集的 metrics

回到prometheus服务器的配置文件里添加被监控机器的配置段 

[root@server ~]# cd /usr/local/prometheus/
[root@server prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
[root@server prometheus]# vim prometheus.yml 
 
  - job_name: "agent"
    static_configs:
      - targets: ["192.168.100.10:9100"]
 
[root@server prometheus]# egrep -n : /usr/local/prometheus/prometheus.yml | awk -F'#' '{print $1}'
2:global:
3:  scrape_interval: 15s 
4:  evaluation_interval: 15s 
8:alerting:
9:  alertmanagers:
10:    - static_configs:
11:        - targets:
12:          
15:rule_files:
19:
21:scrape_configs:
23:  - job_name: "prometheus"
28:    static_configs:
29:      - targets: ["localhost:9090"]
30:  - job_name: "agent"                 # 最后加上这三行,取一个job名称来代表被监控的机器
31:    static_configs:
32:      - targets: ["192.168.100.10:9100"]       # 这里改成被监控机器的IP,后面端口接9100

  改完配置文件后,重启服务

说明: 没有服务脚本,直接kill杀掉进程,再重启即可。(或者kill -HUP PID) 

[root@server ~]# pkill prometheus
 
[root@server ~]# ss -anlt
State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process          
LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*                              
LISTEN          0                128                                 [::]:22                               [::]:*           
# 确认端口没有进程占用

回到web管理界面 --》点Status --》点Targets --》可以看到多了一台监控目标

 

        前面实现了prometheus监控本机9090, 但是还有很多metrics无法监控,比如cpu负载信息等。这个时候我们在prometheus服务器上也安装node_exporter,并监控。安装方法与前面一样。

[root@server ~]# egrep -n : /usr/local/prometheus/prometheus.yml | awk -F'#' '{print $1}'
2:global:
3:  scrape_interval: 15s 
4:  evaluation_interval: 15s 
8:alerting:
9:  alertmanagers:
10:    - static_configs:
11:        - targets:
12:          
15:rule_files:
19:
21:scrape_configs:
23:  - job_name: "prometheus"
28:    static_configs:
29:      - targets: ["localhost:9090"]
30:  - job_name: "agent"
31:    static_configs:
32:      - targets: ["192.168.100.10:9100"]
33:  - job_name: "server"                       // 其他不变,添加这三行
34:    static_configs:
35:      - targets: ["192.168.100.50:9100"]
 
启动后查看端口
[root@server ~]# ss -anlt
State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process          
LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*                              
LISTEN          0                4096                                   *:9090                                *:*                              
LISTEN          0                4096                                   *:9100                                *:*                              
LISTEN          0                128                                 [::]:22   
 
启动成功

启动prometheus,先要杀死进程

[root@server ~]# pkill prometheus 
[root@server ~]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

启动后查看端口
[root@server ~]# ss -anlt
State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process          
LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*                              
LISTEN          0                4096                                   *:9090                                *:*                              
LISTEN          0                4096                                   *:9100                                *:*                              
LISTEN          0                128                                 [::]:22                               [::]:*                              
[root@server ~]# 
启动成功

监控远程mysql 

在被管理机agent上安装mysqld_exporter组件

下载地址: https://prometheus.io/download/ (请使用共享的软件版本,以免出现不兼容问题)

[root@agent ~]# ls
anaconda-ks.cfg  mysqld_exporter-0.15.1.linux-amd64.tar.gz  node_exporter-1.8.2.linux-amd64.tar.gz  nohup.out
[root@agent ~]# 
[root@agent ~]# tar -zxvf mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /usr/local/  //解压
mysqld_exporter-0.15.1.linux-amd64/
mysqld_exporter-0.15.1.linux-amd64/LICENSE
mysqld_exporter-0.15.1.linux-amd64/mysqld_exporter
mysqld_exporter-0.15.1.linux-amd64/NOTICE
[root@agent ~]# mv /usr/local/mysqld_exporter-0.15.1.linux-amd64/ /usr/local/mysqld_exporter
[root@agent ~]# 

 在agent上安装mariadb并启动,用于被监控

[root@agent ~]# yum install mariadb-server -y
[root@agent ~]# systemctl restart mariadb
[root@agent ~]# systemctl enable mariadb

授权

说明: 授权ip为localhost,因为不是prometheus服务器来直接找mariadb获取数据,而是prometheus 服务器找mysqld_exporter,mysqld_exporter再找mariadb。所以这个localhost是指的mysql_exporter 的IP

MariaDB [(none)]> grant all ON *.* to 'mysql_monitor'@'localhost' identified by 'linux';
Query OK, 0 rows affected (0.001 sec)
 
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
 
MariaDB [(none)]> 

 创建连接mariadb配置文件

[root@agent ~]# vim /usr/local/mysqld_exporter/.my.cnf
[root@agent ~]# cat /usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=linux

启动mysqld_exporter并验证9104端口

[root@agent ~]# nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &
[2] 2758
[root@agent ~]# nohup: ignoring input and appending output to 'nohup.out'
 
[root@agent ~]# ss -anlt
State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process          
LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*                              
LISTEN          0                4096                                   *:9100                                *:*                              
LISTEN          0                4096                                   *:9104                                *:*                              
LISTEN          0                128                                 [::]:22                               [::]:*                              
LISTEN          0                80                                     *:3306                                *:*                              

 回到prometheus服务器的配置文件里添加被监控的mariadb的配置段

[root@server ~]# vim /usr/local/prometheus/prometheus.yml 
/// 最后一行加上这个内容
  - job_name: "agent-mariadb"
    static_configs:
      - targets: ["192.168.100.10:9104"]   /被监控的主机的IP,后面接端口9104

 重启服务

[root@server ~]# pkill prometheus
[root@server ~]# ss -anlt | grep 9090
[root@server ~]# /usr/local/prometheus/prometheus --
config.file="/usr/local/prometheus/prometheus.yml" &
[root@server ~]# ss -anlt |grep 9090
tcp6 0 0 :::9090 :::* LISTEN 76661/prometheus

回到web管理界面 --》点Status --》点Targets --》可以看到监控mariadb了

可以查看mariadb连接数 

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

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

相关文章

数组程序基础知识

为了处理方便,把具有相同类型的变量按有序的形式组织起来。这些同类数据元素的集合称之为数组。数组可分为数值数组、字符数组、指针数组、结构数组等。 01--一维数组 在使用数组前需要先定义: 类型说明符 数组名[常量表达式]; 类型说明符…

因 Mysql root 密码过于简单导致 Mysql 连接失败的解决方法

问题: Access denied for user ‘root’‘192.168.xx.xx’ (using password: YES) 用户“root”“192.168.xx.xx”的访问被拒绝(使用密码:YES) 解决方法: 1、使用root用户登录mysql,通过下面的命令给ro…

数据管理能力成熟度评估模型DCMM

一、引言 DCMM(Data Management Capability Maturity Assessment Model,数据管理能力成熟度评估模型)是我国首个数据管理领域国家标准(GB/T 36073-2018),由中国国家标准化管理委员会于2018年3月15日发布&am…

FreeRTOS基础入门——FreeRTOS信号量及二值信号量(十三)

个人名片: 🎓作者简介:嵌入式领域优质创作者🌐个人主页:妄北y 📞个人QQ:2061314755 💌个人邮箱:[mailto:2061314755qq.com] 📱个人微信:Vir2025WB…

智联云采 SRM2.0 autologin 身份认证绕过漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

【王树森】RNN模型与NLP应用(4/9):LSTM模型(个人向笔记)

前言 LSTM是对Simple RNN的改进,可以避免梯度消失的问题,能够有更长的记忆力。 LSTM 1. LSTM:Conveyor Belt 过去的信息 C t − 1 C_{t-1} Ct−1​ 通过一个传输带直接输送到下一个状态 C t C_t Ct​,不会发生太大的变化,由此…

激活函数 Sigmod 及其导数

文章目录 1. Sigmod 函数2. 取值3. 图像4. 导数 1. Sigmod 函数 Sigmod 函数是神经网络中最常用的激活函数之一,其形式如下: sigmod ( x ) f ( x ) 1 1 e − x . \text{sigmod}(x) f(x) \frac{1}{1 e^{-x}}. sigmod(x)f(x)1e−x1​. 2. 取值 分…

大模型理论基础

大模型理论基础与学习路径 1.大模型的理论基础,包括深度学习、预训练语言模型和大语言模型。 2.学习大模型开发的路径,包括理论学习、实践操作和项目应用。 3.如何通过理论学习提升上限,为深入学习大模型奠定基础。 GPT模型家族技术发展 1.GP…

数据结构——堆排序

目录 引言 堆排序 1.算法思想 2.算法步骤 3.代码实现 3.1 构建堆 (1)小堆 (2)大堆 3.2 交换与调整 3.3 重复上述过程 4.复杂度分析 5.完整代码 5.1算法实现代码 5.2 示例 6.堆排序的优势 结束语 引言 本篇博客,我们将利用堆结构实现的高效排序算法…

版本控制的核心:Git中的哈希与默克尔树解析

Git是最常用的代码版本控制工具。它帮助我们跟踪代码的更改、管理代码版本,同时保证代码库的完整性和安全性。我们知道 Git 中有一些基本的操作,比如commit、merge、rebase等,但这些操作的底层机制是如何实现的呢?哈希函数和默克尔…

深度学习|模型推理:端到端任务处理

文章目录 引言端到端的能力任务与模型简介手写数字识别数据准备训练集与测试集模型介绍 推理过程前向传播权重参数推理与评估 结语 引言 通过前文「深度学习|感知机:神经网络之始」中 XOR Gate 的示例,我们知道叠加层可以增强感知机的表达能…

单向链表排序及双向链表

单向链表的优缺点 优点:存储空间没有上限,插入删除效率高 缺点:修改和查找效率低,只能单向的向后遍历后续节点,不能向前遍历前驱节点 单向链表快慢指针法查找: 链表的排序 双向链表 由于单向链表只能通…

Linux 性能调优:策略与实践

引言 随着云计算和虚拟化技术的发展,Linux 已经成为企业和个人用户的首选操作系统。Linux 性能调优不仅有助于提高系统资源利用率,还能确保应用程序的高效运行。本文将探讨 Linux 性能调优的基本原则、常用工具和方法,以及实际案例分析。 一…

go中的并发处理

. Goroutines 概念: Goroutines 是 Go 的核心并发机制。它们是由 Go 运行时管理的轻量级线程,具有比操作系统线程更少的开销。每个 goroutine 只需少量的内存(大约 2KB),并且由 Go 运行时负责调度和管理,哪怕是java发…

哈希表与统计——594、350、554、609、454(2简3中)

594. 最长和谐子序列(简单) 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列&a…

华大HC32F460移植FreeRTOS

参考: 关于MCU M4内核移植FreeRTOS的笔记 主要参考这位大佬的,照做就行了,用的也是IAR HC32F460 freeRTOS移植 这位是用Keil的 MCU:华大HC32F460 库版本:hc32f460_ddl_Rev2.2.0 IDE: IAR FreeRTOS版本&…

【多线程】概述

进程与线程 概述 一个正在运行过程中的程序,就是一个进程,也称一个任务。进程是一个重要的软件资源,是由操作系统内核管理和组织的。 并行:微观上同一个时刻,两个核心上的进程,就是同时进行的。 并发&…

遗传算法Github初学

遗传算法的理论是根据达尔文进化论而设计出来的算法:人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因 遗传算法(genetic algorithm——GA)是计算数学中…

【JavaScript】LeetCode:11-15

文章目录 11 最长连续序列12 移动零13 盛最多水的容器14 三数之和15 接雨水 11 最长连续序列 数组排序、去重遍历数组中的元素,当元素连续时,长度加1,当不连续时,长度设置为1。 /*** param {number[]} nums* return {number}*/ v…

AI科学家:自动化科研的未来之路

随着人工智能(AI)技术的不断进步,AI已经在众多领域中展现了强大的潜力,尤其是在科研方面的应用正在引起广泛关注。最近,Sakana AI与牛津大学和不列颠哥伦比亚大学联合推出了一款被称为“AI科学家”的自动化科研工具&am…