Prometheus监控系统

目录

一、Prometheus简介

1.Prometheus概念

①Prometheus概念

②监控通知流程

③监控系统的数据产生流程

④zabbix和prometheus 区别

⑤TSDB 作为 Prometheus 的存储引擎完美契合了监控数据的应用场景

2.Prometheus的基础组件

①如何采集数据exporter组件

②告警规则Alertmanager 组件

③存放临时数据Pushgateway 组件

3.Prometheus特点

①多维数据模型

②内置外置共存

③promQL

④拉取方式采集

⑤支持短期数据存储(中转站)

⑥手动、自动配置

⑦Grafana可视化展示

4.Prometheus生态组件

①多维数据模型

②内置外置共存

③promQL

④拉取方式采集

⑤支持短期数据存储(中转站)

⑥手动、自动配置

⑦Grafana可视化展示

4.Prometheus生态组件

①Prometheus server

②Client Library

③Exporters暴露器

④Service Discovery服务发现

⑤Alertmanager告警模块

⑥Pushgateway中转站

⑦Grafana可视化

5.Prometheus的工作模式

6.Prometheus的工作流程

7.Prometheus的局限性

二、传统方式的部署Prometheus

1.Prometheust Server 端安装和相关配置

①安装

②配置系统启动文件,启动 Prometheust

③启动

2.部署 Exporters

①部署 Node Exporter 监控系统级指标(192.168.91.104)

②prometheus监控 MySQL 配置示例(192.168.91.106)

③prometheus监控 Nginx 配置示例(192.168.91.105)

三、部署GRAfana进行展示

四、Prometheus服务发现

1.基于文件的服务发现

2.基于consul注册中心的服务发现

3.基于kubernetes API的服务发现


一、Prometheus简介

1.Prometheus概念

①Prometheus概念

(1)Prometheus(普罗米修斯)是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。**监控&报警&时间序列数据库****的组合
(2)它的核心组件:Prometheus server

(3)会定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据,新拉取到的数据会持久化到存储设备当中。

②监控通知流程

③监控系统的数据产生流程

④zabbix和prometheus 区别

(1)数据模型和存储方式:

Zabbix(6.0已经开始实施时间序列数据库但使用少、安装较快,推送到服务端)使用传统的关系型数据库来存储监控数据。它将采集的数据存储在数据库中,并提供了一个基于SQL的查询语言。(MySQL数据库停止更新,停止在8.0版本)
Prometheus(容器中使用多、是http接口拉取方式)使用自定义的时间序列数据库(TSDB)来存储监控数据。它使用一种称为"拉取"的方式,定期从被监控的目标上获取数据,并存储在本地数据库中。
(2)监控方式:

Zabbix采用主动监控的方式,它通过代理或直接与被监控主机进行通信,主动收集并监控指标数据。
Prometheus采用被动监控的方式,它依赖于目标主机主动提供指标数据,而不需要在每个被监控目标上安装代理。多用于云原生,云产品
(3)数据采集和指标语言:

Zabbix支持多种数据采集方法,包括SNMP、JMX、IPMI等,也可以通过自定义脚本采集数据。它使用自己的查询语言来处理和分析数据。
Prometheus通过HTTP端点暴露指标数据,并使用PromQL作为查询语言。它还提供了一组灵活而强大的函数来处理和聚合指标数据。
(4)可视化和报警:

Zabbix提供了一个基于Web的用户界面,用于可视化监控数据、设置报警规则和生成报表等功能。
Prometheus本身不提供可视化界面,但可以与其他工具(如Grafana)集成来实现可视化和报警功能。

总:Zabbix更适合传统的主动监控场景,对于大规模和分布式系统,它的数据存储和查询能力较强。而Prometheus更适合云原生环境和容器化应用,具有高度可扩展性和灵活性,并且在指标查询和分析方面更加强大。

⑤TSDB 作为 Prometheus 的存储引擎完美契合了监控数据的应用场景

(1)存储的数据量级十分庞大

(2)大部分时间都是写入操作——HTTP接口拉取方式

(3)写入操作几乎是顺序添加,大多数时候数据都以时间排序

(4)很少更新数据,大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库——根据时间采集,默认是15秒,配置文件可以修改

(5)删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很少单独删除某个时间或者分开的随机时间的数据——删除为区块删除时间一段一段

(6)基本数据大,一般超过内存人小,一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用。——可压缩

(7)读操作是十分典型的升序或者降序的顺序读

(8)高并发的读操作十分常见——对数据库可以快速查询

2.Prometheus的基础组件

①如何采集数据exporter组件

(1)每个被监控的主机都可以通过专用的exporter组件

(2)程序提供输出监控数据的接 口,会在目标处收集监控数据,并暴露出
HTTP 接口供 Prometheus server(拉取数据、存储数据)

(3)Prometheus 通过基于 HTTP 的 pull 的方式来周期性的采集数据(scrape组件)

②告警规则Alertmanager 组件

如果存在告警规则,则抓取到数据之后会根据规则进行计算,满足告警条件则会生成告警,并发送到Alertmanager 完成告警的汇总和分发。

③存放临时数据Pushgateway 组件

当被监控的目标有主动推送数据的需求时,可以以 Pushgateway 组件进行接收并临时存储数据,然后等待 Prometheus server 完成拉取数据并采集

任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示,监控目标可以通过配置信息以静态形式指定,也可以Prometheus 通过服务发现的机制进行动态管理。

Prometheus能够直接把 API Server 作为服务发现系统使用,进而动态发现和监控集群中的所有可被监控的对象。

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

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

3.Prometheus特点

①多维数据模型

由度量名称和键值对标识的时间序列数据

时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据称为一个样本;服务器指标数据、应用程序性能监控数据、网络数据等都是时序数据

②内置外置共存

内置时间序列 (Time Series)数据库Prometheus ;外置的远端存储通常会用: InfluxDB、openTSDB 等

③promQL

promQL是一种灵活的查询语言,可以利用多维数据完成复杂查询

④拉取方式采集

基于 HTTP 的 pull (拉取) 方式采集时间序列数据

⑤支持短期数据存储(中转站)

同时支持 PushGateway 组件收集数据,等待 Prometheus server 完成拉取数据并采集

⑥手动、自动配置

通过静态配置或服务发现发现目标

⑦Grafana可视化展示

支持作为数据源接入 Grafana

4.Prometheus生态组件

①多维数据模型

由度量名称和键值对标识的时间序列数据

时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据称为一个样本;服务器指标数据、应用程序性能监控数据、网络数据等都是时序数据

②内置外置共存

内置时间序列 (Time Series)数据库Prometheus ;外置的远端存储通常会用: InfluxDB、openTSDB 等

③promQL

promQL是一种灵活的查询语言,可以利用多维数据完成复杂查询

④拉取方式采集

基于 HTTP 的 pull (拉取) 方式采集时间序列数据

⑤支持短期数据存储(中转站)

同时支持 PushGateway 组件收集数据,等待 Prometheus server 完成拉取数据并采集

⑥手动、自动配置

通过静态配置或服务发现发现目标

⑦Grafana可视化展示

支持作为数据源接入 Grafana

4.Prometheus生态组件

Prometheus 负责时序型指标数据的采集及存储,但数据的分析、聚合及直观展示以及告警等功能并非由 Prometheus Server 所负责

Prometheus 生态圈中包含了多个组件,其中部分组件可选:

①Prometheus server

服务核心组件,采用pul1 方式采集监控数据,通过 http协议传输;存储时间序列数据;基于“告警规则”生成告警通知。

Prometheus server 由三个部分组成: Retrieval,Storage, PromQL

Retrieval:采集数据
Storage:存储数据,主要是把采集到的数据存储到磁盘中。默认为 15 天。
PromQL:查询数据

②Client Library

客户端库是给exporters来使用,目的在于为那些期望原生提供 Instrumentation功能的应用程序提供便捷的开发途径,用于基于应用程序内建的测量系统。

③Exporters暴露器

指标暴露器,负责收集不支持内建 Instrumentation 的应用程序或服务的性能指标数据,并通过HTTP 接口供 Prometheus Server 获取。

Exporter 负责从目标应用程序上采集和聚合原始格式的数据,并转换或聚合为 Prometheus 格式的指标向外暴露。

常用的 Exporters:

  • Node-Exporter:用于收集服务器节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,**需要部署到所有运算节点。**不安装会搜索不到监控服务。
  • 指标详细介绍:https://github.com/prometheus/node_exporter
  • mysqld-exporter/nginx-exporter:下载相应服务才能监控到
  • Kube-State-Metrics:为 Prometheus 采集 K8S 资源数据的 exporter,通过监听 APIServer 收集 kubernetes 集群内资源对象的状态指标数据,例如 pod、deployment、service 等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。
  • 需要注意的是 kube-state-metrics 只是简单的提供一个 metrics 数据,并不会存储这些指标数据,所以可以使用 Prometheus 来抓取这些数据然后存储, 主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等;调度了多少个 replicas ?现在可用的有几个?多少个 Pod 是 running/stopped/terminated 状态?Pod 重启了多少次?有多少 job 在运行中。
  • cAdvisor:用来监控容器内部使用资源的信息,比如 CPU、内存、网络I/O、磁盘I/O 。
  • blackbox-exporter:监控业务容器存活性。

④Service Discovery服务发现

服务发现,用于动态发现待监控的 Target,Prometheus 支持多种服务发现机制:文件、DNS、Consul、Kubernetes 等等。 服务发现可通过第三方提供的接口,Prometheus 查询到需要监控的 Target 列表,然后轮询这些 Target 获取监控数据。该组件目前由 Prometheus Server 内建支持

⑤Alertmanager告警模块

是一个独立的告警模块,从 Prometheus server 端接收到 “告警通知” 后,会进行去重、分组,并路由到相应的接收方,发出报警, 常见的接收方式有:电子邮件、钉钉、企业微信等。
Prometheus Server 仅负责生成告警指示,具体的告警行为由另一个独立的应用程序 AlertManager 负责;告警指示由 Prometheus Server 基于用户提供的告警规则周期性计算生成,Alertmanager 接收到 Prometheus Server 发来的告警指示后,基于用户定义的告警路由向告警接收人发送告警信息。

⑥Pushgateway中转站

类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据, 那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。
可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据。

⑦Grafana可视化

是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。

5.Prometheus的工作模式

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

●Prometheus Server 内置了一个基于文件的时间序列存储来持久存储指标数据,用户可使用 PromQL 接口来检索数据,也能够按需将告警需求发往 Alertmanager 完成告警内容发送;

●一些短期运行的作业的生命周期过短,难以有效地将必要的指标数据供给到 Server 端,它们一般会采用推送(Push)方式输出指标数据, Prometheus 借助于 Pushgateway 接收这些推送的数据,进而由 Server 端进行抓取

6.Prometheus的工作流程

(1)Prometheus 以 Prometheus Server 为核心,用于收集和存储时间序列数据。Prometheus Server 从监控目标中通过 pull 方式拉取指标数据,或通过 pushgateway 把采集的数据拉取到 Prometheus server 中。
(2)Prometheus server 把采集到的监控指标数据通过 TSDB 存储到本地 HDD/SSD 中。
(3)Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的告警通知发送到 Alertmanager。
(4)Alertmanager 通过配置报警接收方,发送报警到邮件、钉钉或者企业微信等。
(5)Prometheus 自带的 Web UI 界面提供 PromQL 查询语言,可查询监控数据。
(6)Grafana 可接入 Prometheus 数据源,把监控数据以图形化形式展示出。

7.Prometheus的局限性

●Prometheus 是一款指标监控系统,不适合存储事件及日志等;它更多地展示的是趋势性的监控,而非精准数据;

●Prometheus 认为只有最近的监控数据才有查询的需要,其本地存储的设计初衷只是保存短期(例如一个月)数据,因而不支持针对大量的历史数据进行存储;
若需要存储长期的历史数据,建议基于远端存储机制将数据保存于 InfluxDB 或 OpenTSDB 等系统中;

●Prometheus 的集群机制成熟度不高,可基于 Thanos 实现 Prometheus 集群的高可用及联邦集群。

二、传统方式的部署Prometheus

实验环境:

地址节点
192.168.91.103Prometheust Server
192.168.91.104Node Exporter
192.168.91.105Nginx
192.168.91.106MySQL

架构数据流向:

1.Prometheust Server 端安装和相关配置

①安装

上传 prometheus-2.35.0.linux-amd64.tar.gz 到 /opt 目录中,并解压
systemctl stop firewalld
setenforce 0cd /opt/
tar xf prometheus-2.35.0.linux-amd64.tar.gz
mv prometheus-2.35.0.linux-amd64 /usr/local/prometheuscat /usr/local/prometheus/prometheus.yml | grep -v "^#"
global:					#用于prometheus的全局配置,比如采集间隔,抓取超时时间等scrape_interval: 15s			#采集目标主机监控数据的时间间隔,默认为1mevaluation_interval: 15s 		#触发告警生成alert的时间间隔,默认是1m# scrape_timeout is set to the global default (10s).scrape_timeout: 10s			#数据采集超时时间,默认10salerting:				#用于alertmanager实例的配置,支持静态配置和动态服务发现的机制alertmanagers:- static_configs:- targets:# - alertmanager:9093rule_files:				#用于加载告警规则相关的文件路径的配置,可以使用文件名通配机制# - "first_rules.yml"# - "second_rules.yml"scrape_configs:			#用于采集时序数据源的配置# 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'metrics_path: '/metrics'    #指标数据采集路径,默认为 /metrics# scheme defaults to 'http'. static_configs:				#静态目标配置,固定从某个target拉取数据- targets: ["localhost:9090"]

②配置系统启动文件,启动 Prometheust

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

③启动

systemctl start prometheus
systemctl enable prometheusnetstat -natp | grep :9090浏览器访问:http://192.168.91.103:9090 ,访问到 Prometheus 的 Web UI 界面点击页面的 Status -> Targets,如看到 Target 状态都为 UP,说明 Prometheus 能正常采集到数据http://192.168.91.103:9090/metrics ,可以看到 Prometheus 采集到自己的指标数据,其中 Help 字段用于解释当前指标的含义,Type 字段用于说明数据的类型

2.部署 Exporters

①部署 Node Exporter 监控系统级指标(192.168.91.104)

(1)上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中,并解压
cd /opt/
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
(2)配置启动文件
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/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
(3)启动 
systemctl start node_exporter
systemctl enable node_exporternetstat -natp | grep :9100浏览器访问:http://192.168.91.104:9100/metrics ,可以看到 Node Exporter 采集到的指标数据常用的各指标:
●node_cpu_seconds_total
●node_memory_MemTotal_bytes
●node_filesystem_size_bytes{mount_point=PATH}
●node_system_unit_state{name=}
●node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数
●node_vmstat_pswpout:系统每秒钟从内存写到磁盘的字节数更多指标介绍:https://github.com/prometheus/node_exporter

server端操作

(4)server端修改 prometheus 配置文件,加入到 prometheus 监控中
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容- job_name: nodesmetrics_path: "/metrics"static_configs:- targets:- 192.168.198.103:9100- 192.168.198.104:9100- 192.168.198.105:9100labels:service: kubernetes

(5)重新载入配置
curl -X POST http://192.168.91.103:9090/-/reload    或    systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

例如:192.168.91.103这台部署
上传 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目录中,并解压
cd /opt/
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin配置启动文件
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/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF启动 
systemctl start node_exporter
systemctl enable node_exporternetstat -natp | grep :9100

②prometheus监控 MySQL 配置示例(192.168.91.106)

#在 MySQL 服务器上操作,需要提前有mysql服务
(1)上传 mysqld_exporter-0.14.0.linux-amd64.tar.gz 到 /opt 目录中,并解压
cd /opt/
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/
(2)配置启动文件
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/bin/mysqld_exporter --config.my-cnf=/etc/my.cnfExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
(3)修改 MySQL 配置文件
vim /etc/my.cnf
[client]
......
host=localhost
user=exporter
password=abc123
(4)授权 exporter 用户
mysql -uroot -pabc123GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';

(5)重启服务 
systemctl restart mysqld
systemctl start mysqld_exporter
systemctl enable mysqld_exporternetstat -natp | grep :9104

Prometheus 服务器上操作

#在 Prometheus 服务器上操作
(1)修改 prometheus 配置文件,加入到 prometheus 监控中
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容- job_name: mysqldmetrics_path: "/metrics"static_configs:- targets:- 192.168.198.106:9104labels:service: mysqld

(2)重新载入配置
curl -X POST http://192.168.91.103:9090/-/reload    或    systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

③prometheus监控 Nginx 配置示例(192.168.91.105)

#在 Nginx 服务器上操作
下载 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 插件
cd /opt
tar xf nginx-module-vts-0.1.18.tar.gz
mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts
(2)安装 Nginx
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ makeuseradd -M -s /sbin/nologin nginxcd /opt
tar xf nginx-1.18.0.tar.gzcd nginx-1.18.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/usr/local/nginx-module-vtsmake & make install
(3)修改 nginx 配置文件,启动 nginx
vim /usr/local/nginx/conf/nginx.conf
http {vhost_traffic_status_zone;					#添加vhost_traffic_status_filter_by_host on;		#添加,开启此功能,在 Nginx 配置有多个 server_name 的情况下,会根据不同的 server_name 进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上......server {......}server {vhost_traffic_status off;		#在不想统计流量的 server 区域,可禁用 vhost_traffic_statuslisten 8080;allow 127.0.0.1;allow 192.168.91.103;			#设置为 prometheus 的 ip 地址location /nginx-status {stub_status on;access_log off;}location /status {vhost_traffic_status_display;vhost_traffic_status_display_format html;}}
}#假如 nginx 没有规范配置 server_name 或者无需进行监控的 server 上,那么建议在此 vhost 上禁用统计监控功能。否则会出现 127.0.0.1、hostname 等的域名监控信息。ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -tcat > /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 -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOFsystemctl start nginx
systemctl enable nginx浏览器访问:http://192.168.91.105:8080/status ,可以看到 Nginx Vhost Traffic Status 的页面信息
收集选项、内存、访问量直接加一个模块即可

(4)解压 nginx-exporter,启动 nginx-exporter
cd /opt/
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/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/bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/jsonExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOFsystemctl start nginx-exporter
systemctl enable nginx-exporternetstat -natp | grep :9913

Prometheus 服务器上操作

#在 Prometheus 服务器上操作
(1)修改 prometheus 配置文件,加入到 prometheus 监控中
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容- job_name: nginxmetrics_path: "/metrics"static_configs:- targets:- 192.168.198.105:9913labels:service: nginx

(2)重新载入配置
curl -X POST http://192.168.198.103:9090/-/reload    或    systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

三、部署GRAfana进行展示

本文在server端部署

(1)下载和安装
下载地址:https://grafana.com/grafana/downloadhttps://mirrors.bfsu.edu.cn/grafana/yum/rpm/yum install -y grafana-7.4.0-1.x86_64.rpm  systemctl start grafana-server
systemctl enable grafana-servernetstat -natp | grep :3000浏览器访问:http://192.168.198.103:3000 ,默认账号和密码为 admin/admin

(2)配置数据源
Configuration -> Data Sources -> Add data source -> 选择 Prometheus
HTTP -> URL 输入 http://192.168.198.103:9090
点击 Save & Test点击 上方菜单 Dashboards,Import 所有默认模板
Dashboards -> Manage ,选择 Prometheus 2.0 Stats 或 Prometheus Stats 即可看到 Prometheus job 实例的监控图像

(3)导入 grafana 监控面板
浏览器访问:https://grafana.com/grafana/dashboards ,在页面中搜索 node exporter ,选择适合的面板,点击 Copy ID 或者 Download JSON在 grafana 页面中,+ Create -> Import ,输入面板 ID 号或者上传 JSON 文件,点击 Load,即可导入监控面板

四、Prometheus服务发现

1.基于文件的服务发现

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

(1)创建用于服务发现的文件,在文件中配置所需的 target 
cd /usr/local/prometheus
mkdir targetsvim targets/node-exporter.yaml
- targets:- 192.168.91.105:9100- 192.168.91.106:9100labels:app: node-exporterjob: nodevim targets/mysqld-exporter.yaml
- targets:- 192.168.91.105:9104- 192.168.91.106:9104labels:app: mysqld-exporterjob: mysqld#修改 prometheus 配置文件,发现 target 的配置,定义在配置文件的 job 之中
vim /usr/local/prometheus/prometheus.yml
......
scrape_configs:- job_name: nodesfile_sd_configs:                  #指定使用文件服务发现- files:                          #指定要加载的文件列表- targets/node*.yaml            #文件加载支持通配符refresh_interval: 2m            #每隔 2 分钟重新加载一次文件中定义的 Targets,默认为 5m- job_name: mysqldfile_sd_configs:- files:- targets/mysqld*.yamlrefresh_interval: 2msystemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

2.基于consul注册中心的服务发现

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

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

(1)部署 Consul 服务
cd /opt/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/#创建 Consul 服务的数据目录和配置目录
mkdir /var/lib/consul-data
mkdir /etc/consul/#使用 server 模式启动 Consul 服务
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.198.11 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &#查看 consul 集群成员
consul members
netstat -antulp|grep consul
(2)在 Consul 上注册 Services
#在配置目录中添加文件
vim /etc/consul/nodes.json
{"services": [{"id": "node_exporter-node01","name": "node01","address": "192.168.91.103","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.91.103:9100/metrics","interval": "5s"}]},{"id": "node_exporter-node02","name": "node02","address": "192.168.91.104","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.91.104:9100/metrics","interval": "5s"}]}]
}#让 consul 重新加载配置信息
consul reload		浏览器访问:http://192.168.91.103:8500
(3)修改 prometheus 配置文件
vim /usr/local/prometheus/prometheus.yml
......- job_name: nodesconsul_sd_configs:                  #指定使用 consul 服务发现- server: 192.168.91.103:8500        #指定 consul 服务的端点列表tags:                             #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签- nodesrefresh_interval: 2msystemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets
#让 consul 注销 Service,consul界面就没有node02节点
consul services deregister -id="node_exporter-node02"
#重新注册,即可重新出现
consul services register /etc/consul/nodes.json

3.基于kubernetes API的服务发现

官网:https://prometheus.io/docs/prometheus/2.41/configuration/configuration/
基于 Kubernetes API 的服务发现机制,支持将API Server 中 Node、Service、Endpoint、Pod 和 Ingress 等资源类型下相应的各资源对象视作 target, 并持续监视相关资源的变动

●Node、Service、Endpoint、Pod 和 Ingress 资源分别由各自的发现机制进行定义

●负责发现每种类型资源对象的组件,在 Prometheus 中称为一个 role

●支持在集群上基于 DaemonSet 控制器部署 node-exporter 后发现各 Node 节点,也可以通过 kubelet 来作为 Prometheus 发现各 Node 节点的入口

#基于 Kubernetes 发现机制的部分配置参数
# The API server addresses. If left empty, Prometheus is assumed to run inside of the cluster and will discover API servers automatically
and use the pod's
# CA certificate and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/.
[ api_server: <host> ]# The Kubernetes role of entities that should be discovered. One of endpoints, service, pod, node, or ingress.
role: <string># Optional authentication information used to authenticate to the API server.
# Note that 'basic_auth', 'bearer_token'和'bearer_token_file' 等认证方式互斥;
[ bearer_token: <secret> ]
[ bearer_token_file: <filename> ]# TLS configuration.
tls_config:
# CA certificate to validate API server certificate with.
[ ca_file: <filename> ]# Certificate and key files for client cert authentication to the server.
[ cert_file: <filename> ]
[ key_file: <filename> ]# ServerName extension to indicate the name of the server.
[ server_name: <string> ]# Optional namespace discovery. If omitted, all namespaces are used.
namespaces:
names:
[ - <string> ]

(1)Prometheus:监控系统时间 序列数据库

(2)Prometheus生态组件:

Prometheus serve:http pull 方式的数据采集,TSDB 数据库存储,alter告警信息生成

client libray: 客户端,使应用服务原生支持Prometheus 监控数据采集

expoter:指标暴露器,用于收集原生不支持Prometheus监控的系统和应用的数据暴露给Prometheus

alertmanager:接受Prometheus server推送的告警信息,负责发告警路由发送给接收人

pushgateway:接受些短期任务的推送的监控数据,并且临时存储,再由Prometheus server 统一拉取

grafana:外置的监控数据展示平台,使用Promgl查询Prometheus数据源

serivce deiscovery:动态服务发现机制,支持consul k8s DNS等方式

(3)expoter方式

node-expoter
nginx/mysgl/redis-export
kube-statemerics
CAdvisor blackbox-expoter

(4)Prometheus远程存储

influxDB、openTSDB实现存储长期的历史数据
Prometheus:高可用/联邦集群
thanos:k8s上通过边车模式与Prometheus部署同一个pod里面来共享存储,实现Prometheus集群的高可用

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

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

相关文章

PgSQL技术内幕 - psql与服务端连接与交互机制

PgSQL技术内幕 - 客户端psql与服务端连接与交互机制 简单来说&#xff0c;PgSQL的psql客户端向服务端发起连接请求&#xff0c;服务端接收到请求后&#xff0c;fork出一个子进程&#xff0c;之后由该子进程和客户端进行交互&#xff0c;处理客户端的SQL等&#xff0c;并将结果返…

Python第二语言(八、Python包)

目录 1. 什么是Python包 2. 创包步骤 2.1 new包 2.2 查看创建的包 2.3 拖动文件到包下 3. 导入包 4. 安装第三方包 4.1 什么是第三方包 4.2 安装第三方包-pip 4.3 pip网络优化 1. 什么是Python包 包下有__init__.py就是包&#xff0c;无__init__.py就是文件夹。于Ja…

Linux常用基本命令-操作

目录 一、shell 1、什么是shell 二、Linux基本的命令分类 1、内部命令和外部命令 2、查看内部命令 2.1、help命令 2.2、enable 命令 2.3、type命令 2.4、whereis命令 2.5、which 命令 2.6、hash缓存 ​编辑 三、Linux常用命令 1、Linux命令格式 2、编辑Linux命…

FRP 内网穿透 | 实现远程访问与安全管理

唠唠闲话 内网穿透简介 在互联网上&#xff0c;两个不同主机进行通信需要知道对方的 IP 地址。由于世界人口和设备众多&#xff0c;IPv4 资源相对紧缺&#xff0c;因此绝大部分情况下是通过路由器或交换机转换公网 IP 后才上网。 位于路由器或交换机后的设备通常是内网设备&…

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先&#xff0c;我们拉一份最新的源代码&#xff08;笔者是2024.6.6日拉取的&#xff09;&#xff1a; fetch --nohistory chromium 源码预处理 如果运行build&#xff0c;会生成许多生成的代码&#xff0c;因此我们不运行build。 然后&#xff0c;把干扰后续分析…

docker拉取镜像失败超时的解决方法,docker配置国内镜像源

更换国内源 创建或修改 /etc/docker/daemon.json 文件 安装docker后一般只有 /etc/docker 这个目录 下面并没有 daemon.json 文件 我们直接创建 &#xff1a; vim /etc/docker/daemon.json {"registry-mirrors" : ["https://registry.docker-cn.com"…

【redis】redis事务

目录 Redis事务四个命令redis事务特性redis事务执行原理 Redis 事务的使用基本使用watch 监控watch 实现原理补充 Redis事务 Redis事务是一种将多个命令打包成一个单独操作的机制&#xff0c;它保证了在执行这些命令期间&#xff0c;其他命令无法插入。 四个命令 Redis事务通…

基于Java+SpringBoot制作一个软考助手答题小程序

基于Java+SpringBoot制作一个软考小助手考试答题小程序。其中系统前端功能包括注册登录、公告通知、考试答题、视频课程、考试记录、题库、题目评论、错题统计、我的收藏和用户信息管理模块;系统后台功能包括用户管理、题库管理、答题管理、学习视频管理以及系统管理模块。 摘…

VRRP基础配置(华为)

#交换设备 VRRP基础配置 VRRP (Virtual Router Redundancy Protocol) 全称是虚拟路由规元余协议&#xff0c;它是一种容错协议。该协议通过把几台路由设备联合组成一台虚拟的路由设备&#xff0c;该虚拟路由器在本地局域网拥有唯一的一个虚拟 ID 和虚拟 IP 地址。实际上&…

线程池前置知识

并发和并行 并发是指在单核CPU上&#xff0c;多个线程占用不同的CPU时间片。线程在物理上还是串行执行的&#xff0c;但是由于每个线程占用的CPU时间片非常短&#xff08;比如10ms&#xff09;&#xff0c;看起来就像是多个线程都在共同执行一样&#xff0c;这样的场景称作并发…

Spring对事务的支持

一、事务 事务防止进行操作时&#xff0c;数据库里面的数据丢失。 二、Spring事务注解方式 注解方式&#xff1a;在配置文件中配置事务管理器&#xff0c;利用注解&#xff0c;管理事务。 实例 银行转账&#xff1a;一个账户向另一个账户转账。 1&#xff09;先在数据库my…

UE4/UE5像素流送云推流|程序不稳定、弱网画面糊怎么办?

看到不少反馈说像素流送技术在实际的应用中&#xff0c;存在一些问题&#xff0c;比如程序崩溃、画面模糊等。本文将探讨这些问题&#xff0c;并介绍点量云流软件提供了哪些有效的解决方案。 常见的像素流送技术问题 画面质量问题&#xff1a; 当快速操作UE模型或初次启动像素…

LVS – NAT 模式集群构建

目录 1 环境准备 1.1 准备四台服务器 1.2 IP与网关均按照下图配置 1.3 网卡配置 1.4 real server 安装 web服务 1.5 安装ipvsadm 管理工具 2 使用ipvsadm管理LVS 2.1 创建集群指定使用的算法 2.2 添加真实服务器指定工作原理 2.3 查看是否正确创建集群 2.4 开启FORWARD路由转发…

专项测试——web测试

1、web测试的总体策略 2、web测试的范围 功能性能界面安全性兼容性DB文档 2.1 功能测试 功能测试主要从链接、表单、cookie、设计语言、数据库、文件上传等方面进行。 2.1.1 链接 2.1.2 表单 2.1.3 cookie cookie是什么&#xff1f; 服务器发送到用户浏览器并保存在用户本…

Lecture2——最优化问题建模

一&#xff0c;建模 1&#xff0c;重要性 实际上&#xff0c;我们并没有得到一个数学公式——通常问题是由某个领域的专家口头描述的。能够将问题转换成数学公式非常重要。建模并不是一件容易的事&#xff1a;有时&#xff0c;我们不仅想找到一个公式&#xff0c;还想找到一个…

Windows搭建nacos集群

Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 下载地址&#xff1a;Tags alibaba/nacos GitHub 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8888 解压文件夹 目录说明&am…

Vue3中的常见组件通信之`$refs`、`$parent`

Vue3中的常见组件通信之$refs、$parent 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-mod…

webp2jpg网页在线图片格式转换源码

源码介绍 webp2jpg-免费在线图片格式转化器, 可将jpeg、jpg、png、gif、 webp、svg、ico、bmp文件转化为jpeg、png、webp、webp动画、gif文件。 无需上传文件&#xff0c;本地即可完成转换! 源码特点&#xff1a; 无需上传&#xff0c;使用浏览器自身进行转换批量转换输出we…

set与map的详细封装步骤

目录 一.set与map在STL中的源码 二.修改红黑树 1.插入与查找时的比较方式 2.插入时的返回值 3.补充成员函数 三.封装set与map 1.迭代器的实现 2.函数接口 3.map中的operator[] 四.完整代码 set.h map.h RBTree.h 一.set与map在STL中的源码 想要简单实现set与map 需…

【x264】变换量化模块的简单分析

【x264】变换量化模块的简单分析 1. 变换量化1.1 变换&#xff08;transform&#xff09;1.2 量化&#xff08;quant&#xff09; 2. 编码入口&#xff08;x264_macroblock_encode&#xff09;2.1 内部编码&#xff08;macroblock_encode_internal&#xff09;2.1.1 SKIP模式2.…