深入解析Prometheus:强大的开源监控与告警系统

目录

引言

一、运维监控平台的设计思路

(一)设计思路

1.数据收集模块

2.数据提取模块

3.监控告警模块

(二)监控平台层级

二、Prometheus简介

(一)基本介绍

(二)核心特征

(三)组件说明

(四)Prometheus工作过程

1.数据收集

2.数据存储计算

3.应用展示及告警

三、搭建Prometheus

(一)Prometheust Server端安装

1.安装服务

2.查看相关配置文件

3.启动服务

4.查看监控

​编辑四、部署Exporters 

(一)部署Node Exporter

1.安装Exporters组件

2.启动服务

3.浏览器访问验证

4.常见的指标参数

5.加入到prometheus监控

(二)监控MySQL

1.安装Exporters组件

2.添加系统启动文件

3.修改MySQL配置文件

4.授权exporter用户

5.启动服务

6.加入到prometheus监控

(三)监控Nginx

1.安装nginx插件

2.编译安装nginx

3.修改配置文件

4.安装Exporters组件

4.1 安装组件

4.2 启动服务

​编辑

5.加入到prometheus监控

五、部署Prometheus服务发现 

(一)基于Consul的服务发现

1.部署Consul服务

2.在Consul上注册Services

3.修改Prometheus配置文件

(二)基于file_cd的服务发现

1.创建发现文件

2.修改prometheus配置文件

六、部署Grafana进行展示

(一)下载和安装

1.下载rpm包

2.安装服务

(二)配置数据源

(三)导入grafana监控面板


引言

在云计算和大数据时代,系统监控和告警成为了确保业务稳定运行不可或缺的一环。Prometheus,作为开源的监控与告警工具,以其强大的功能和灵活性,在众多监控解决方案中脱颖而出。本文将对Prometheus进行深入解析,探讨其工作原理、核心特性以及实际应用场景。

一、运维监控平台的设计思路

运维监控平台是运维人员进行工作时,必不可少的一部分,对于开发人员也同样重要,它会帮助运维、开发人员,显示系统中的错误,以便快速处理。

(一)设计思路

它的设计理念大概分为三个模块

1.数据收集模块

数据收集模块,主要用来收集系统中的数据信息,如硬件资源、数据资源、应用资源、网络资源等等,它会将这些资源信息通过HTTP接口、物理接口等方式,收集到自己的应用服务当中

2.数据提取模块

数据提取模块,它会将收集到的数据,对信息进行压缩、聚合等方式的处理,对关键信息进行提取、过滤,根据提取到的信息,判断资源是否正常

3.监控告警模块

监控告警模块,它会通过布尔值(如ture与false、0与1、yes与no等),判断是否需要告警,并根据自定义的告警方式发送告警信息

(二)监控平台层级

第一层 数据收集层  多渠道监控数据(网络、硬件、应用、数据、物理环境)

第二层 数据展示层  数据会生成曲线图标(对时序数据库是动态展示)

第三层 数据提取层  定时采集数据到监控模块当中

第四层 告警规则配置层 告警规则设置 告警阀值设置(布尔值表达式,筛选异常状态)

第五层  告警事件生成层 实时记录告警事件 并且形成分析图表(可视化,分析)

第六层 用户展示层  用户登录到平台:统一 管理·集中化监控…维护,各个监控数据(数据收集层里面的监控环境)

二、Prometheus简介

(一)基本介绍

Prometheus是一个开源的系统监控和告警工具包,自2012年诞生以来,它已成为云原生监控领域的佼佼者。Prometheus的设计初衷是为了解决传统监控系统的不足,特别是在容器化和微服务架构的环境下。它通过多维度的数据模型和灵活的查询语言(PromQL),提供了对复杂环境进行全面监控的能力

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的 HTTP 接口就可以接入监控,不需要任何 SDK 或者其他的集成过程。其核心组件 Prometheus server 会定期从静态配置的监控目标或基于服务发现自动配置的目标中拉取数据。当新拉取的数据超过配置的内存缓存区时,数据将被持久化到存储设备中。

(二)核心特征

多维数据模型:Prometheus 采用时序数据库作为存储,可以灵活的存储多维度的数据。

灵活的查询语言 Prometheus 使用了功能强大的 PromQL 查询语言,可以实时查询时序数据库相关数据。
拉取式采集:Prometheus 通过 HTTP 协议周期性抓取被监控组件状态,而不是通过端口接收推送数据。
服务发现:Prometheus 支持各种服务发现机制,可以自动发现监控目标,如果需要监控的服务比较少,也可以使用静态配置。
多种可视化组件:如 Grafana、 PromDash 等,可以用来展示监控数据,在本项目中我们使用 Grafana 做可视化展示。
告警管理:通过 Alertmanager 负责实现报警功能,既可以使用邮件,也能通过 Webhook 自定义告警处理方式。

(三)组件说明

Prometheus以解耦的方式进行监控。每一个组件就是一个模块,例如数据收集模块、告警模块、存储模块等等,每个模块都有独立的工作内容

组件名称作用
MetricServer

是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,

如kubectl、hpa、scheduler等。

PrometheusOperator是一个系统监测和警报工具箱,用来存储监控数据。
NodeExporter

用于收集各 node 的关键度量指标状态数据,如平均负载、CPU、内存、磁盘、

网络等等多个维度的指标数据。

KubeStateMetrics

收集kubernetes集群内资源对象数据,制定告警规则。包括指定类型的对象总数、

资源限额、容器状态以及Pod资源标签系列等。

Prometheus server

采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据

,通过 http 协议 传输。并存储时间序列数据。

Prometheus server 由三个部分组成:Retrieval,Storage,PromQL
Retrieval:负责在活跃的 target 主机上抓取监控指标数据。
Storage:存储,主要是把采集到的数据存储到磁盘中。默认为 15 天。
PromQL:是 Prometheus 提供的查询语言模块。

Grafana可视化数据统计和监控平台
Alertmanager

独立的告警模块,从 Prometheus server端接收到alerts后,会进行去重、分组,

并路由到相应的接收方,发出报警。常见的接收方式有:电子邮件,微信,钉钉等

Pushgateway

各个目标主机可上报数据到 Pushgateway,然后Prometheus server统一从

Pushgateway 拉取数据。

Service Discovery

服务发现,用于动态发现待监控的 Target,

Prometheus 支持多种服务发现机制:文件、DNS、Consul、Kubernetes 等等

//TSDB 作为 Prometheus 的存储引擎(即Prometheus server中的Storage)完美契合了监控数据的应用场景
●存储的数据量级十分庞大
●大部分时间都是写入操作
●写入操作几乎是顺序添加,大多数时候数据都以时间排序
●很少更新数据,大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库
●删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很少单独删除某个时间或者分开的随机时间的数据
●基本数据大,一般超过内存大小。一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用
●读操作是十分典型的升序或者降序的顺序读
●高并发的读操作十分常见

(四)Prometheus工作过程

1.数据收集

基于服务发现(Service Discovery)机制或静态配置获取要监视的目标(Target),并通过每个目标上的指标 exporter 来采集(Scrape)指标数据

① Prometheus server 根据配置文件,定期从已配置好的Exporters 中拉取metrics。这些 Exporters 可以监控各种不同的系统和服务,如操作系统、数据库、Web 服务器等,并将关键的性能指标暴露给 Prometheus。

② Exporters 本质上是一个HTTP服务,它们将监控数据的metrics转换为Prometheus可以理解的格式,通常是PromQL(Prometheus Query Language)可以查询的格式。

 Prometheus server周期性的拉取数据,对于一些生命周期短暂的数据,它会主动上报数据到 Pushgateway,然后 Prometheus server 统一从Pushgateway 拉取数据

2.数据存储计算

④ Prometheus server的Retrieval通过HTTP server(即Exporters),在活跃的target主机上抓取监控指标数据,不论是直接指定的主机(Prometheus targets),还是通过服务发现的目标主机(discovery targets

⑤ Prometheus server的Retrieval组件,在抓取到数据后,会将数据存储到Stroage(Prometheus使用TSDB)当中,并存储到节点的磁盘当中,这些数据按照时间序列进行组织,便于后续的分析和查询

3.应用展示及告警

收集到数据后判断信息,一旦警报条件(alert.rules)满足,Prometheus 会记录新的时间序列数据点,这些数据点反映了警报事件的发生,并且可以被用于后续的告警和历史数据分析,通过Alertmanager去发送告警信息

⑦ 除了记录警报事件,Prometheus 还可以配置为向 Grafana推送警报信息。Grafana 是一个开源的度量分析和可视化套件,它可以从 Prometheus 中获取数据,并根据预先配置的文件对接收到的警报进行处理

三、搭建Prometheus

Prometheus 官网地址:https://prometheus.io

Prometheus github 地址:https://github.com/prometheus

(一)Prometheust Server端安装

1.安装服务

可以从官网地址中下载数据包

[root@prometheus pm]#ls
prometheus-2.35.0.linux-amd64.tar.gz
[root@prometheus pm]#tar xf prometheus-2.35.0.linux-amd64.tar.gz 
[root@prometheus pm]#ls
prometheus-2.35.0.linux-amd64  prometheus-2.35.0.linux-amd64.tar.gz
[root@prometheus pm]#mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus
[root@prometheus pm]#cd /usr/local/prometheus/
[root@prometheus prometheus]#ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

2.查看相关配置文件

[root@prometheus prometheus]#cat /usr/local/prometheus/prometheus.yml | egrep -v "^$|^#"
global:                     '用于prometheus的全局配置,比如采集间隔,抓取超时时间等'scrape_interval: 15s      '采集目标主机监控数据的时间间隔,默认为1m'evaluation_interval: 15s  '触发告警生成alert的时间间隔,默认是1m'# scrape_timeout is set to the global default (10s). '数据采集超时时间,默认10s'
alerting:                   '用于alertmanager实例的配置,支持静态配置和动态服务发现的机制'alertmanagers:            '定义了如何与 Alertmanager 通信,以便在告警触发时发送通知'- static_configs:       '静态配置 Alertmanager 的地址'- targets:          'Alertmanager的地址列表'# - alertmanager:9093
rule_files:                 '用于加载告警规则相关的文件路径的配置,可以使用文件名通配机制'# - "first_rules.yml"# - "second_rules.yml"
scrape_configs:             '用于采集时序数据源的配置,定义了Prometheus如何抓取目标的数据'# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"  '抓取作业的名称,每个被监控实例的集合用job_name命名'
'支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs)'# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]
'静态目标配置,固定从某个target拉取数据'
'在这里,它配置为从 localhost:9090抓取数据,这通常是Prometheus自身的地址,用于自监控'

3.启动服务

#添加系统启动文件
[root@prometheus prometheus]#cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycleExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
[root@prometheus prometheus]#systemctl enable --now prometheus.service   
#立即启动并设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
[root@prometheus prometheus]#ss -natp |grep 9090
LISTEN   0    128     :::9090       :::*       users:(("prometheus",pid=16994,fd=7))
ESTAB    0    0      ::1:51310    ::1:9090     users:(("prometheus",pid=16994,fd=10)
ESTAB    0    0      ::1:9090     ::1:51310    users:(("prometheus",pid=16994,fd=11)

4.查看监控

浏览器访问:http://Prometheus-server-IP:9090 ,访问到 Prometheus 的 Web UI 界面

点击页面的 Status -> Targets,看到Target状态都为UP,说明Prometheus能正常采集到数据

http://Prometheus-server-IP:9090/metrics ,可以看到 Prometheus 采集到自己的指标数据,

其中 Help 字段用于解释当前指标的含义,Type 字段用于说明数据的类型
 

四、部署Exporters 

注释:所有的部署Exporters包,都可以在官方网站中下载

(一)部署Node Exporter

Node Exporter用于监控系统级指标,它会监控整个系统的资源信,并通过HTTP协议,将自己的数据信息供Prometheus获取

主机名IP地址安装服务主机类型
prometheus192.168.83.60prometheusprometheus-server
node192.168.83.70node_exporterprometheus-targets

1.安装Exporters组件

在target主机上进行操作

上传node_exporter-1.3.1.linux-amd64.tar.gz 到系统目录中,并解压

[root@node data]#ls
node_exporter-1.3.1.linux-amd64.tar.gz
[root@node data]#tar xf node_exporter-1.3.1.linux-amd64.tar.gz 
[root@node data]#ls
node_exporter-1.3.1.linux-amd64  node_exporter-1.3.1.linux-amd64.tar.gz
[root@node data]#ls node_exporter-1.3.1.linux-amd64
LICENSE  node_exporter  NOTICE
[root@node data]#mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/sbin/
[root@node data]#ll /usr/local/sbin/
总用量 17804
-rwxr-xr-x 1 3434 3434 18228926 12月  5 2021 node_exporter

2.启动服务

添加系统启动文件,并启动服务

[root@node data]#cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
ExecStart=/usr/local/sbin/node_exporter \ #服务启动路径,也就是上一步操作中移动的命令执行文件
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
[root@node data]#systemctl enable --now node_exporter.service 
[root@node data]#systemctl status node_exporter.service 
● node_exporter.service - node_exporterLoaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled)Active: active (running) since 四 2024-06-13 17:58:21 CST; 2s agoDocs: https://prometheus.io/Main PID: 7888 (node_exporter)CGroup: /system.slice/node_exporter.service

3.浏览器访问验证

查看本机是否能够收集到数据,本机能采集到数据,Prometheus才会通过接口采集数据

浏览器访问:http://node_exporter_IP/metrics ,可以看到 Node Exporter 采集到的指标数据

[root@node data]#ss -natp |grep node_exporter  
LISTEN   0    128     :::9100   :::*   users:(("node_exporter",pid=7888,fd=3))
#查看node_exporter收集数据的接口

4.常见的指标参数

node_cpu_seconds_total

描述:这是 CPU 使用时间的累积计数器,以秒为单位。

维度:它通常具有多个标签,如 cpu(CPU 核心的编号)、mode(如 "user"、"system"、"idle" 等)。

用途:计算 CPU 使用率。

node_memory_MemTotal_bytes

描述:主机的总物理内存量(以字节为单位)。

维度:通常没有额外的标签。

用途:计算内存使用率。

node_filesystem_size_bytes{mount_point=PATH}

描述:特定挂载点(由 mount_point 标签指定)的文件系统大小(以字节为单位)。

维度:mount_point(文件系统挂载点)和其他可能的标签。

用途:监视文件系统的容量和增长。

node_system_unit_state{name=}

描述:这可能与 systemd 服务单元的状态有关,但具体细节可能因 Prometheus 导出器和/或相关插件而异。

维度:name(systemd 服务单元的名称)和其他可能的标签。

用途:监视 systemd 服务单元的状态。

node_vmstat_pswpin

描述:从磁盘交换到物理内存(RAM)的页面数量。

维度:通常没有额外的标签。

用途:监视交换活动。

node_vmstat_pswpout

描述:从物理内存(RAM)交换到磁盘的页面数量。

维度:通常没有额外的标签。

用途:监视交换活动。

5.加入到prometheus监控

修改 prometheus 配置文件,加入到 prometheus 监控中

[root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
......30   - job_name: "nodes"            #抓取配置的标识符31     metrics_path: '/metrics'     #指定了Prometheus在目标主机上查找度量指标的HTTP路径32     static_configs:              #配置列表,static指静态配置的,即不会随时间动态变化33     - targets:                   #指定Prometheus要抓取度量指标的目标主机和端口,可以为多个34       - 192.168.83.70:9100       #目标主机的 IP 地址和端口号35       labels:                    #添加自定义标签。这些标签在查询和分析数据时非常有用36         service: node            #这里定义了一个名为 service 的标签,其值为 node
---------------------------------------------------------------------------------------
#总的来说,这个配置片段定义了一个名为 "nodes" 的 Prometheus job,
#它告诉 Prometheus 如何从 IP 地址为 192.168.83.70、端口为 9100 的主机上抓取度量指标,
#并为这些度量指标添加一个 service 标签,其值为 node

重新加载配置文件

修改完配置文件后,使用以下两种指令任意一种重新加载文件

curl -X POST http://Prometheus-server-IP:9090/-/reload

systemctl reload prometheus

[root@prometheus prometheus]#curl -X POST http://192.168.83.60:9090/-/reload
#重新加载完毕之后,浏览器查看Prometheus页面的 Status -> Targets

(二)监控MySQL

主机名IP地址安装服务主机类型
prometheus192.168.83.60prometheusprometheus-server
mysql192.168.83.20

mysql-5.7.20

mysql_exporter

prometheus-targets

1.安装Exporters组件

上传 mysqld_exporter-0.14.0.linux-amd64.tar.gz 到mysql服务器的系统目录中,并解压

[root@mysql data]#ls
mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@mysql data]#tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz 
[root@mysql data]#ls
mysqld_exporter-0.14.0.linux-amd64  mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@mysql data]#ls mysqld_exporter-0.14.0.linux-amd64
LICENSE  mysqld_exporter  NOTICE
[root@mysql data]#mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/sbin/
[root@mysql data]#ll /usr/local/sbin/
total 14808
-rwxr-xr-x 1 3434 3434 15163162 Mar  5  2022 mysqld_exporter

2.添加系统启动文件

[root@mysql data]#cat > /usr/lib/systemd/system/mysqld_exporter.service << 'EOF'
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
ExecStart=/usr/local/sbin/mysqld_exporter --config.my-cnf=/etc/my.cnfExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF

3.修改MySQL配置文件

[root@mysql data]#cat /etc/my.cnf
[client]
......
host=localhost
user=exporter
password=123123
#在[client]模块中,添加mysql-exporter访问的用户名与密码信息
......

4.授权exporter用户

[root@mysql ~]#mysql -uroot -p123456

mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY '123123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

------------------------------------------------------------------------------------------------------------------------

PROCESS:允许用户查询关于MySQL服务器内部操作的信息

REPLICATION CLIENT:允许用户查询主/从复制状态,包括从服务器和主服务器的状态

SELECT:允许用户在所有数据库和所有表上进行 SELECT 操作

5.启动服务

[root@mysql data]#systemctl restart mysqld
#重启MySQL
[root@mysql data]#systemctl start mysqld_exporter
[root@mysql data]#systemctl enable mysqld_exporter
[root@mysql data]#ss -natp |grep mysqld_exporter
LISTEN     0  128   [::]:9104     [::]:*   users:(("mysqld_exporter",pid=85985,fd=3))

6.加入到prometheus监控

[root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
......38   - job_name: "mysqld"39     metrics_path: '/metrics'40     static_configs:41       - targets:42         - 192.168.83.20:910443         labels:44           service: mysqld
#添加MySQL的targets主机信息
[root@prometheus prometheus]#systemctl reload prometheus
#重新加载配置文件

浏览器查看 Prometheus 页面的 Status -> Targets

(三)监控Nginx

主机名IP地址安装服务主机类型
prometheus192.168.83.60prometheusprometheus-server
nginx192.168.83.80

nginx-1.18.0

nginx-module-vts/tags

nginx_exporter

prometheus-targets

下载 nginx-exporter 地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
下载 nginx 地址:http://nginx.org/download/
下载 nginx 插件地址:https://github.com/vozlt/nginx-module-vts/tags

1.安装nginx插件

[root@nginx data]#ls
nginx-module-vts-0.1.18.tar.gz
[root@nginx data]#tar xf nginx-module-vts-0.1.18.tar.gz 
[root@nginx data]#ls
nginx-module-vts-0.1.18  nginx-module-vts-0.1.18.tar.gz
[root@nginx data]#mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts

-------------------------------------------------------------------------------
nginx-module-vts-0.1.18插件,即Nginx虚拟主机流量状态模块(nginx-module-vts),
是一个用于监控Nginx服务器性能指标和流量统计的第三方模块
性能监控
提供了对Nginx服务器性能的实时监控功能,允许管理员或开发者实时查看Nginx服务器的运行状态。
通过HTTP接口,可以获取关于Nginx服务器的详细信息,如连接数、请求处理速度等。
流量统计
监控和统计Nginx服务器的流量情况,包括请求数、响应数、响应耗时等。
丰富的指标
除了基本的连接数和请求数外,还提供如响应时间分布、访问用户国家分布等更细粒度的指标。
这些指标有助于更全面地了解Nginx服务器的性能和流量情况。

2.编译安装nginx

cd /data

useradd -M -s /sbin/nologin nginx
tar xf  nginx-1.18.0.tar.gz
cd  /data/nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--add-module=/usr/local/nginx-module-vts \    #指定nginx-module-vts模块
--with-stream_realip_module
make -j 4 &&make  install 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
cat >  /usr/lib/systemd/system/nginx.service  <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chown -R nginx.nginx  /usr/local/nginx
systemctl  daemon-reload

3.修改配置文件

修改nginx的配置文件,启用vts模块

[root@nginx data]]#vim /usr/local/nginx/conf/nginx.conf17 http {
......20     vhost_traffic_status_zone;21     vhost_traffic_status_filter_by_host on;
......35 36     server {37         vhost_traffic_status off;38         listen 80;39         server_name localhost;       #此server_name会被vhost_traffic_status追踪 40         allow 127.0.0.1;41         allow 192.168.83.60;         #允许Prometheus服务器访问
......50         location /nginx_status {51             stub_status on;          #显示Nginx的基本状态信息52             access_log off;          #关闭日志53         }54 55         location /status {56             vhost_traffic_status_display;  #显示vhosttraffic_status的统计信息57             vhost_traffic_status_display_format html;  #使用HTML格式显示58         }
......90     }
......128 }
[root@nginx data]]#systemctl  enable --now nginx----------------------------------------------------------------------------------------
vhost_traffic_status_zone;
'这一行定义了一个名为 vhost_traffic_status 的共享内存区域,用于存储统计信息。'vhost_traffic_status_filter_by_host on;
'这一行启用了按主机名过滤的功能。当启用此功能时,vhost_traffic_status 模块将只显示与 server_name 指令匹配的主机的统计信息。'
'如果您的 Nginx 配置中有多个 server 块,并且您只想查看特定主机名的统计信息,这将非常有用。'
'Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上'

访问查看信息,可以看到 Nginx Vhost Traffic Status 的页面信息

4.安装Exporters组件

4.1 安装组件
[root@nginx data]#ls nginx-vts-exporter-0.10.3.linux-amd64.tar.gz 
nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
[root@nginx data]#tar xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz 
[root@nginx data]#mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/sbin/
[root@nginx data]#ll /usr/local/sbin/
总用量 9752
lrwxrwxrwx 1 root root      27 6月  13 22:58 nginx -> /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 2000 2000 9982855 3月  28 2018 nginx-vts-exporter
4.2 启动服务
[root@nginx data]#cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
[Unit]
Description=nginx-exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
ExecStart=/usr/local/sbin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/jsonExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
[root@nginx data]#systemctl enable --now nginx-exporter
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx-exporter.service to /usr/lib/systemd/system/nginx-exporter.service.
[root@nginx data]#ss -natp |grep nginx-vts-exp
LISTEN  0   128    [::]:9913      [::]:*   users:(("nginx-vts-expor",pid=66900,fd=3))

5.加入到prometheus监控

[root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
......46   - job_name: "nginx"47     metrics_path: '/metrics'48     static_configs:49       - targets:50         - 192.168.83.80:991351         labels:52           service: nginx
[root@prometheus prometheus]#systemctl reload prometheus.service

浏览器查看 Prometheus 页面的 Status -> Targets

五、部署Prometheus服务发现 

Prometheus服务发现是一种机制,它允许Prometheus自动检测和动态更新其监控目标列表,而无需手动修改配置文件。这对于微服务架构尤其重要,因为服务实例可能会频繁地启动和停止。Prometheus支持多种服务发现机制,包括静态配置、File SD、Consul SD、Kubernetes SD等

[root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml

[root@prometheus prometheus]#systemctl reload prometheus.service

(一)基于Consul的服务发现

Consul 是一款基于 golang 开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。

下载地址:https://www.consul.io/downloads/

1.部署Consul服务

prometheus服务器上安装cousul服务

1.1 添加执行文件

[root@prometheus pm]#ls
consul_0.9.2_linux_amd64.zip
[root@prometheus pm]#unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zipinflating: consul                  
[root@prometheus pm]#ls
consul  consul_0.9.2_linux_amd64.zip
[root@prometheus pm]#mv consul /usr/local/bin

1.2 创建目录

创建 Consul 服务的数据目录和配置目录

[root@prometheus pm]#mkdir /var/lib/consul-data   #数据目录
[root@prometheus pm]#mkdir /etc/consul/           #配置目录
[root@prometheus pm]#consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.83.60 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
[root@prometheus pm]#consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.83.60:8301  alive   server  0.9.2  2         dc1
#查看 consul 集群成员

2.在Consul上注册Services

在配置目录中添加文件

[root@prometheus pm]#vim /etc/consul/nodes.json
[root@prometheus pm]#cat /etc/consul/nodes.json
{"services": [{"id": "node_exporter-node","name": "node","address": "192.168.83.70","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.83.70:9100/metrics","interval": "5s"}]}]
}
[root@prometheus pm]#consul reload
Configuration reload triggered
#让consul重新加载配置信息
[root@prometheus pm]#ss -natp |grep consul
LISTEN   0    128    192.168.83.60:8300      *:*    users:(("consul",pid=21117,fd=3))
LISTEN   0    128    192.168.83.60:8301      *:*    users:(("consul",pid=21117,fd=10))
LISTEN   0    128    192.168.83.60:8302      *:*    users:(("consul",pid=21117,fd=7))
ESTAB    0    0      192.168.83.60:8300  192.168.83.60:46551   users:(("consul",pid=21117,fd=14))
ESTAB    0    0      192.168.83.60:46551 192.168.83.60:8300    users:(("consul",pid=21117,fd=13))
LISTEN   0    128     :::8500                :::*    users:(("consul",pid=21117,fd=18))
LISTEN   0    128     :::8600                :::*    users:(("consul",pid=21117,fd=17))

3.修改Prometheus配置文件

[root@prometheus pm]#vim /usr/local/prometheus/prometheus.yml
......- job_name: "nodes"                   #consul_sd_configs:                  #指定使用 consul 服务发现- server: 192.168.83.60:8500        #指定 consul 服务的端点列表tags:                             
#指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签- nodesrefresh_interval: 2m              #每隔2分钟重新加载一次文件,默认为 5m
[root@prometheus pm]#systemctl restart prometheus.service

(二)基于file_cd的服务发现

基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAML 和 JSON 格式,它含有定义的 Target 列表,以及可选的标签信息

1.创建发现文件

[root@prometheus ~]#mkdir /usr/local/prometheus/targets
#创建用于服务发现的目录
[root@prometheus ~]#vim /usr/local/prometheus/targets/mysqld-exporter.yaml 
[root@prometheus ~]#cat /usr/local/prometheus/targets/mysqld-exporter.yaml 
- targets:- 192.168.83.20:9104labels:app: mysqld-exporterjob: mysqld

2.修改prometheus配置文件

修改 prometheus 配置文件,发现 target 的配置,定义在配置文件的 job 之中

[root@prometheus ~]#vim /usr/local/prometheus/prometheus.yml
......38	  - job_name: mysqld39	    file_sd_configs:          #指定使用文件服务发现40	    - files:                  #指定要加载的文件列表41	      - targets/mysqld*.yaml  #文件加载支持通配符42	      refresh_interval: "2m"
[root@prometheus ~]#systemctl reload prometheus

浏览器查看 Prometheus 页面的 Status -> Targets

六、部署Grafana进行展示

Grafana是一个开源的数据可视化工具,主要用于大规模指标数据的可视化展现

(一)下载和安装

1.下载rpm包

下载地址:https://grafana.com/grafana/download
                  https://mirrors.bfsu.edu.cn/grafana/yum/rpm/

[root@prometheus grafana]#ls
grafana-7.4.0-1.x86_64.rpm

2.安装服务

使用yum安装,自动解决依赖关系

[root@prometheus grafana]#yum install -y grafana-7.4.0-1.x86_64.rpm
[root@prometheus grafana]#systemctl enable --now grafana-server
[root@prometheus grafana]#ss -natp |grep grafana
ESTAB   0   0   192.168.83.60:56218   185.199.109.133:443  users:(("grafana-server",pid=22703,fd=10))
ESTAB   0   0   192.168.83.60:35366   34.120.177.193:443   users:(("grafana-server",pid=22703,fd=9)
LISTEN  0   128      :::3000             :::*              users:(("grafana-server",pid=22703,fd=11))

浏览器访问:http://192.168.83.60:3000 ,默认账号和密码为 admin/admin

(二)配置数据源

点击 Configuration -> Data Sources -> Add data source -> 选择 Prometheus
HTTP -> URL 输入 http://192.168.83.60:9090
点击 Save & Test

点击 上方菜单 Dashboards,Import 所有默认模板
Dashboards -> Manage ,选择 Prometheus 2.0 Stats 或 Prometheus Stats 即可看到 Prometheus job 实例的监控图像

(三)导入grafana监控面板

浏览器访问:https://grafana.com/grafana/dashboards ,在官方页面中搜索 node exporter ,选择适合的面板,点击 Copy ID 或者 Download JSON

选择合适的版本

在 grafana 页面中,+ Create -> Import ,输入面板 ID 号或者上传 JSON 文件,点击 Load,即可导入监控面板

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

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

相关文章

vue+elementUI实现在表格中添加输入框并校验的功能

背景&#xff1a; vue2elmui 需求&#xff1a; 需要在一个table中添加若干个输入框&#xff0c;并且在提交时需要添加校验 思路&#xff1a; 当需要校验的时候可以考虑添加form表单来触发校验&#xff0c;因此需要在table外面套一层form表单&#xff0c;表单的属性就是ref…

救命!接手了一个老项目,见到了从业10年以来最烂的代码!

后台回复“书籍”&#xff0c;免费领取《程序员书籍资料一份》 后台回复“5000”&#xff0c;免费领取面试技术学习资料一份 在程序员这个行业从业快10年了&#xff0c;每过几个月回头看看自己写的代码&#xff0c;都会觉得写的也太烂了&#xff0c;不敢想象是自己之前写的。…

2024黄河流域比赛的复现

目录 WEB [GKCTF 2021]easynode unser 知识点 WEB 根据此题先复现[GKCTF 2021]easynode这个题&#xff0c;这两个题类似 [GKCTF 2021]easynode 1.打开页面发现是登录页面&#xff0c;找到源文件里面的代码&#xff0c;分析如何进行登录&#xff0c;发现经过safeQuery()函…

深度学习 - CNN

第一部分&#xff1a;基础知识 1. 什么是卷积神经网络&#xff08;CNN&#xff09; 定义和基本概念 卷积神经网络&#xff08;CNN&#xff09;是一种专门用于处理具有网格结构数据&#xff08;如图像&#xff09;的深度学习模型。它们在图像识别和计算机视觉领域表现尤为突出…

SX2106B 2A同步降压型DC/DC转换器芯片IC

一般描述 SX2106B是一款同步降压DC/DC转换器&#xff0c;提供宽广的4.5V至24V输入电压范围和2A连续负载电流能力。 SX2106B故障保护包括逐周期电流限制、UVLO、输出过电压保护和热关机。可调软启动功能&#xff0c;防止启动时的浪涌电流。该器件采用电流模式控…

R语言数据分析案例28-对数据集可视化和T检验

一、分析主题&#xff1a; 本分析旨在对数据集进行可视化和 T 检验&#xff0c;以探索数据集中的变量之间的关系和差异。通过可视化数据&#xff0c;我们可以直观地了解数据的分布和趋势&#xff0c;而 T 检验则可以帮助我们确定这些差异是否具有统计学意义。 二、具体分析 …

【字符函数】

接下来介绍部分字符函数测试 2. 字符转换函数 1.字符分类函数 1.1iscntrl 注&#xff1a;任何控制字符 检查是否有控制字符 符合为真 int main() {int i 0;char str[] "first line \n second line \n";//判断是否遇到控制字符while (!iscntrl(str[i])){p…

【Java】多态、final关键字、抽象类、抽象方法

多态(Polymorphism) 【1】多态跟属性无关&#xff0c;多态指的是方法的多态&#xff0c;而不是属性的多态。 【2】案例代入&#xff1a; public class Animal {//父类&#xff1a;动物&#xff1a; public void shout(){ System.out.println("我是小动物&am…

Qt 非圆角图片裁剪为圆角图片

将Qt非圆角图片裁剪为圆角图片,步骤如下&#xff1a; 1、按照原始图片尺寸定义一张透明的新图形 2、使用画家工具在新图形上绘制一个圆角矩形线路 3、绘制图片 4、使用圆角矩形切割图片边角 封装成函数如下&#xff1a; QPixmap Widget::getRoundedPixmap(const QPixmap srcPix…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前&#xff0c;我们至少需要有node npm是什么&#xff1f; npm是一个强大的包管理工具&#xff0c;它…

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客 一、概述 最近在搞多相机标定等的相关问题&#xff0c;对于很大的场景&#xff0c;单个相机的视野是不够的&#xff0c;就必须要统一到一个坐标系下&#xff0c;因此我也用了4个相机&#…

人工智能ChatGPT的多种应用:提示词工程

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达的越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&#xff0c;如果想要 …

推荐系统三十六式学习笔记:原理篇.矩阵分解10|那些在Netflix Prize中大放异彩的推荐算法

目录 缘起矩阵分解为什么要矩阵分解1 基础的SVD算法2 增加偏置信息3 增加历史行为4 考虑时间因素 总结 我们先前聊过推荐系统中的经典问题&#xff0c;其中有一类就是评分预测。平心而论&#xff0c;评分预测问题只是很典型&#xff0c;其实并不大众。毕竟在实际的应用中&#…

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红&#xff0c;这可是专为情侣设计的游戏&#xff0c;让你们在轻松愉快的氛围中&#xff0c;增进了解&#xff0c;加深感情。 谈恋爱&#xff0c;不就是两个人在一起&#xff0c;做些有趣的事情吗&#xf…

Opus从入门到精通(七)Opus编码基础之认识声音

Opus从入门到精通(七)Opus编码基础之认识声音 前面我们分析完Opus的编解码api使用,封装原理等,接下来我们准备分析Opus编码原理.Opus编码是一个复杂的工作,我们需要做一些基本铺垫,包括认识声音,压缩编码基础. 认识音频有助于我们了解音频特征,不仅对语音有助于我们理解编码技…

2021年9月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(判断题)

2021年9月Python编程等级考试三级真题解析 判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 26、readline()执行结果为字符串&#xff0c;readlines()执行结果为列表 答案&#xff1a;对 考点分析&#xff1a;考查文件读操作&#xff0c;readli…

【leetcode--同构字符串】

要求&#xff1a;判断两个字符串的形式是不是一致&#xff0c;即是不是AABC或者ABBBCC这种。 trick&#xff1a;使用set&#xff08;&#xff09;结合zip&#xff08;&#xff09;。 set&#xff08;&#xff09;用法&#xff1a;用于创建一个不包含重复元素的集合 zip&#…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会&#xff0c;环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者&#xff0c;其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级&#xff0c;帮助读者了解不同等级的特点和评判标准&#xff0c;进而引导企业提高…

大模型扫盲系列——初识大模型

本文将从大模型的原理、训练过程、prompt和相关应用介绍等方面进行分析&#xff0c;帮助读者初步了解大模型。 近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果。为了提高模型的性能&#xff0c;研究者们不断尝试增加模型…

MySQL损坏,使用data恢复数据

MySQL损坏&#xff0c;重装MySQL使用data文件恢复数据库 1.清空相关注册表(清空安装残留)2.下载合适MySQL版本(与损坏数据库版本相同)3.数据恢复4.Windows server MySQL备份bat5.设置Windows定时执行 # 初始化安装 mysqld -install# 查看数据初始化密码 mysqld --initialize --…