深入解析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.rhkb.cn/news/349847.html

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

相关文章

byzer 笔记总结

1.总览&#xff08;简单了解&#xff09; 1.1 数据挖掘的定义 基于大数据技术&#xff0c;针对有价值是业务场景&#xff0c;对数据中台沉淀的大量数据进行探索&#xff0c;分析。寻找数据与数据之间潜藏的关系&#xff0c;转化为自动化的算法模型&#xff0c;从而获取有价值的…

el-table 多选回显,分页回显

实现el-table多选分页回显功能&#xff0c;左侧是分页的数据源&#xff0c;右侧是选择后的人员数据&#xff0c;切换下一页&#xff0c;选中的数据会在左侧表格回显。 实现&#xff1a; <template><el-dialog :title"title" :visible.sync"show"…

如何将ai集成到项目中,方法二

上一篇文章&#xff1a;如何将ai集成到radsystems项目中&#xff0c;在项目中引入ai-CSDN博客 上一篇文章内容主要针对于未实现权限分离的项目&#xff0c;这篇文章主要来说一下权限分离的项目怎么做&#xff0c;以及注意的细节。 一、编写前端router.js 二、编写前端askai.vu…

Android启动流程

目标&#xff1a; 1.zygote怎么创建进程&#xff1f; fork进程&#xff1a;fork复制一份进程&#xff0c;对应的返回值有两个&#xff0c;pid0&#xff0c;子进程&#xff1b;pid!0父进程 写时拷贝&#xff1a; fork的子进程以后&#xff0c;子进程和父进程公用一份内存空间…

使用ShinyCell展示你的单细胞数据

在我参与发表我的第一篇植物单细胞文章中&#xff0c;我用Shiny开发了一个简单的单细胞可视化网站&#xff0c;目前已经运行了5年了&#xff0c;有上万的访问&#xff0c;唯一的不足就是太简陋。我一直想着能不能找个一个更好的工具进行展示&#xff0c;最近发现了一个工具&…

每日5题Day24 - LeetCode 116 - 120

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; /* // Definition for a Node. class Node {public int val;public Node left;…

【数据质量人人有责】数据质量是什么?

引言&#xff1a;数据是当代企业的核心资源之一&#xff0c;对于支持业务决策、优化运营和增强竞争力至关重要。然而&#xff0c;仅仅拥有数据并不意味着能够充分发挥其潜在价值。只有先确保数据质量&#xff0c;才能保证后续数据分析和挖掘的正确的结果对管理和业务有价值&…

LabVIEW 与组态软件在自动化系统中的应用比较与选择

LabVIEW 确实在非标单机设备、测试和测量系统中有着广泛的应用&#xff0c;特别是在科研、教育、实验室和小型自动化设备中表现突出。然而&#xff0c;LabVIEW 也具备一定的扩展能力&#xff0c;可以用于更复杂和大型的自动化系统。以下是对 LabVIEW 与组态软件在不同应用场景中…

Mysql中使用where 1=1有什么问题吗

昨天偶然看见一篇文章&#xff0c;提到说如果在mysql查询语句中&#xff0c;使用where 11会有性能问题&#xff1f;&#xff1f; 这着实把我吸引了&#xff0c;因为我项目中就有不少同事&#xff0c;包括我自己也有这样写的。为了不给其他人挖坑&#xff0c;赶紧学习一下&…

关于JavaScript技术的基础内容汇总

目录 JavaScript 基础知识1. JavaScript 基本语法2. 变量和常量3. 数据类型4. 运算符5. 控制结构6. 函数7. 对象8. 数组9. 事件处理10. DOM 操作 JavaScript 基础知识 学习 JavaScript&#xff08;简称 JS&#xff09;是前端开发的重要组成部分&#xff0c;它是一种动态的、弱…

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

【Linux】常见指令的使用

文章目录 which指令stat 指令wc指令echo指令tree 指令whoami指令clear指令alias指令ls指令pwd指令cd 指令touch指令mkdir指令&#xff08;重要&#xff09;rmdir指令 && rm 指令&#xff08;重要&#xff09;man指令&#xff08;重要&#xff09;cp指令&#xff08;重要…

Redis原理篇——分布式锁

Redis原理篇——分布式锁 分布式锁是什么&#xff1f;分布式锁有哪些特性&#xff1f;分布式锁常用实现方式Redis 实现分布式锁一、简单的 Redis 锁二、带过期时间的 Redis 锁三、加上 Owner 的 Redis 锁四、Lua 脚本确保原子性 分布式锁是什么&#xff1f; 分布式锁是在分布式…

数据中台:生产制造产业链的“智慧大脑”!

在当今激烈竞争的生产制造领域&#xff0c;数据中台正扮演着至关重要的角色&#xff0c;它就像是产业链的“智慧大脑”&#xff0c;引领着产业的发展方向&#xff01;数据中台在生产制造产业链、生态链中起到以下关键作用&#xff1a; 1. 数据整合与共享&#xff1a;将产业链各…

R可视化:R语言基础图形合集

R语言基础图形合集 欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 基础图形可视化 数据分析的图形可视化是了解数据分布、波动和相关性等属性必…

物业客服“逆袭”记:从被质疑到被点赞,只因用了这款小程序

作为物业服务企业来说&#xff0c;物业客服人员是物业公司的核心部门。客服人员不仅仅要进行各部门之间的工作协调沟通&#xff0c;而且也是物业与业主沟通的主要桥梁。但是&#xff0c;往往客服人员经常被传统的报修方式所困扰&#xff0c;导致业主对物业客服人员存在质疑与谩…

Linux:多线程的操作

多线程操作 进程与线程线程的创建 create_pthread创建线程池给线程传入对象的指针 线程等待 pthread_join退出线程 pthread_exit线程等待参数 retval 与 线程退出参数 retval 线程中断 pthread_cancel获取线程编号 pthread_self线程分离 pthread_detach 进程与线程 进程是资源…

OpenCV读取和显示和保存图像

# 导入 OpenCV import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 #显示图像后&#xff0c;允许用户随意调整窗口大小 cv.namedWindow(image, cv.WINDOW_NORMAL) # 显示图像 cv.imshow(image, image)# 将图像保存到文件 success cv…

Linux之网络编程

Linux之网络编程 TCP协议 TCP(Transmission ControlProtocol) : 传输控制协议&#xff0c;是一个 面向连接的、可靠的、基于字节流的传输层的协议。TCP 协议建立的是一种点到点的&#xff0c;一对一的可靠连接协议 特点&#xff1a; 数据无丢失数据无失序数据无错误数据无重…

Zynq7000 系列FPGA模块化仪器

• 基于 XilinxXC7Z020 / 010 / 007S • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 &#xff0c;基于 IP 核的软件库 FPGA 控制器 Zynq7000 系列模块是基于 Xilinx XC7Z020/010/007S 全可编程片上系统 (SoC) 的…