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

打印 上一主题 下一主题

主题 909|帖子 909|积分 2727

目录
引言
一、运维监控平台的计划思路
(一)计划思路
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.安装服务

可以从官网地址中下载数据包
  1. [root@prometheus pm]#ls
  2. prometheus-2.35.0.linux-amd64.tar.gz
  3. [root@prometheus pm]#tar xf prometheus-2.35.0.linux-amd64.tar.gz
  4. [root@prometheus pm]#ls
  5. prometheus-2.35.0.linux-amd64  prometheus-2.35.0.linux-amd64.tar.gz
  6. [root@prometheus pm]#mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus
  7. [root@prometheus pm]#cd /usr/local/prometheus/
  8. [root@prometheus prometheus]#ls
  9. console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
复制代码
2.查看相关设置文件

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

  1. #添加系统启动文件
  2. [root@prometheus prometheus]#cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
  3. [Unit]
  4. Description=Prometheus Server
  5. Documentation=https://prometheus.io
  6. After=network.target
  7. [Service]
  8. Type=simple
  9. ExecStart=/usr/local/prometheus/prometheus \
  10. --config.file=/usr/local/prometheus/prometheus.yml \
  11. --storage.tsdb.path=/usr/local/prometheus/data/ \
  12. --storage.tsdb.retention=15d \
  13. --web.enable-lifecycle
  14.   
  15. ExecReload=/bin/kill -HUP $MAINPID
  16. Restart=on-failure
  17. [Install]
  18. WantedBy=multi-user.target
  19. EOF
  20. [root@prometheus prometheus]#systemctl enable --now prometheus.service   
  21. #立即启动并设置开机自启
  22. Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
  23. [root@prometheus prometheus]#ss -natp |grep 9090
  24. LISTEN   0    128     :::9090       :::*       users:(("prometheus",pid=16994,fd=7))
  25. ESTAB    0    0      ::1:51310    ::1:9090     users:(("prometheus",pid=16994,fd=10)
  26. 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 到系统目录中,并解压
  1. [root@node data]#ls
  2. node_exporter-1.3.1.linux-amd64.tar.gz
  3. [root@node data]#tar xf node_exporter-1.3.1.linux-amd64.tar.gz
  4. [root@node data]#ls
  5. node_exporter-1.3.1.linux-amd64  node_exporter-1.3.1.linux-amd64.tar.gz
  6. [root@node data]#ls node_exporter-1.3.1.linux-amd64
  7. LICENSE  node_exporter  NOTICE
  8. [root@node data]#mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/sbin/
  9. [root@node data]#ll /usr/local/sbin/
  10. 总用量 17804
  11. -rwxr-xr-x 1 3434 3434 18228926 12月  5 2021 node_exporter
复制代码
2.启动服务

添加系统启动文件,并启动服务
  1. [root@node data]#cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
  2. [Unit]
  3. Description=node_exporter
  4. Documentation=https://prometheus.io/
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/local/sbin/node_exporter \ #服务启动路径,也就是上一步操作中移动的命令执行文件
  9. --collector.ntp \
  10. --collector.mountstats \
  11. --collector.systemd \
  12. --collector.tcpstat
  13. ExecReload=/bin/kill -HUP $MAINPID
  14. Restart=on-failure
  15. [Install]
  16. WantedBy=multi-user.target
  17. EOF
  18. [root@node data]#systemctl enable --now node_exporter.service
  19. [root@node data]#systemctl status node_exporter.service
  20. ● node_exporter.service - node_exporter
  21.    Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
  22.    Active: active (running) since 四 2024-06-13 17:58:21 CST; 2s ago
  23.      Docs: https://prometheus.io/
  24. Main PID: 7888 (node_exporter)
  25.    CGroup: /system.slice/node_exporter.service
复制代码
3.浏览器访问验证

查看本机是否可以或许收集到数据,本机能采集到数据,Prometheus才会通过接口采集数据
浏览器访问:http://node_exporter_IP/metrics ,可以看到 Node Exporter 采集到的指标数据
  1. [root@node data]#ss -natp |grep node_exporter  
  2. LISTEN   0    128     :::9100   :::*   users:(("node_exporter",pid=7888,fd=3))
  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 监控中
  1. [root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
  2. ......
  3. 30   - job_name: "nodes"            #抓取配置的标识符
  4. 31     metrics_path: '/metrics'     #指定了Prometheus在目标主机上查找度量指标的HTTP路径
  5. 32     static_configs:              #配置列表,static指静态配置的,即不会随时间动态变化
  6. 33     - targets:                   #指定Prometheus要抓取度量指标的目标主机和端口,可以为多个
  7. 34       - 192.168.83.70:9100       #目标主机的 IP 地址和端口号
  8. 35       labels:                    #添加自定义标签。这些标签在查询和分析数据时非常有用
  9. 36         service: node            #这里定义了一个名为 service 的标签,其值为 node
  10. ---------------------------------------------------------------------------------------
  11. #总的来说,这个配置片段定义了一个名为 "nodes" 的 Prometheus job,
  12. #它告诉 Prometheus 如何从 IP 地址为 192.168.83.70、端口为 9100 的主机上抓取度量指标,
  13. #并为这些度量指标添加一个 service 标签,其值为 node
复制代码
重新加载设置文件
修改完设置文件后,使用以下两种指令恣意一种重新加载文件
   curl -X POST http://Prometheus-server-IP:9090/-/reload
  systemctl reload prometheus
  1. [root@prometheus prometheus]#curl -X POST http://192.168.83.60:9090/-/reload
  2. #重新加载完毕之后,浏览器查看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服务器的系统目录中,并解压
  1. [root@mysql data]#ls
  2. mysqld_exporter-0.14.0.linux-amd64.tar.gz
  3. [root@mysql data]#tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
  4. [root@mysql data]#ls
  5. mysqld_exporter-0.14.0.linux-amd64  mysqld_exporter-0.14.0.linux-amd64.tar.gz
  6. [root@mysql data]#ls mysqld_exporter-0.14.0.linux-amd64
  7. LICENSE  mysqld_exporter  NOTICE
  8. [root@mysql data]#mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/sbin/
  9. [root@mysql data]#ll /usr/local/sbin/
  10. total 14808
  11. -rwxr-xr-x 1 3434 3434 15163162 Mar  5  2022 mysqld_exporter
复制代码
2.添加系统启动文件

  1. [root@mysql data]#cat > /usr/lib/systemd/system/mysqld_exporter.service << 'EOF'
  2. [Unit]
  3. Description=mysqld_exporter
  4. Documentation=https://prometheus.io/
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/local/sbin/mysqld_exporter --config.my-cnf=/etc/my.cnf
  9. ExecReload=/bin/kill -HUP $MAINPID
  10. Restart=on-failure
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
复制代码
3.修改MySQL设置文件

  1. [root@mysql data]#cat /etc/my.cnf
  2. [client]
  3. ......
  4. host=localhost
  5. user=exporter
  6. password=123123
  7. #在[client]模块中,添加mysql-exporter访问的用户名与密码信息
  8. ......
复制代码
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.启动服务

  1. [root@mysql data]#systemctl restart mysqld
  2. #重启MySQL
  3. [root@mysql data]#systemctl start mysqld_exporter
  4. [root@mysql data]#systemctl enable mysqld_exporter
  5. [root@mysql data]#ss -natp |grep mysqld_exporter
  6. LISTEN     0  128   [::]:9104     [::]:*   users:(("mysqld_exporter",pid=85985,fd=3))
复制代码

6.加入到prometheus监控

  1. [root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
  2. ......
  3. 38   - job_name: "mysqld"
  4. 39     metrics_path: '/metrics'
  5. 40     static_configs:
  6. 41       - targets:
  7. 42         - 192.168.83.20:9104
  8. 43         labels:
  9. 44           service: mysqld
  10. #添加MySQL的targets主机信息
  11. [root@prometheus prometheus]#systemctl reload prometheus
  12. #重新加载配置文件
复制代码
浏览器查看 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插件

  1. [root@nginx data]#ls
  2. nginx-module-vts-0.1.18.tar.gz
  3. [root@nginx data]#tar xf nginx-module-vts-0.1.18.tar.gz
  4. [root@nginx data]#ls
  5. nginx-module-vts-0.1.18  nginx-module-vts-0.1.18.tar.gz
  6. [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模块
  1. [root@nginx data]]#vim /usr/local/nginx/conf/nginx.conf
  2. 17 http {
  3. ......
  4. 20     vhost_traffic_status_zone;
  5. 21     vhost_traffic_status_filter_by_host on;
  6. ......
  7. 35
  8. 36     server {
  9. 37         vhost_traffic_status off;
  10. 38         listen 80;
  11. 39         server_name localhost;       #此server_name会被vhost_traffic_status追踪
  12. 40         allow 127.0.0.1;
  13. 41         allow 192.168.83.60;         #允许Prometheus服务器访问
  14. ......
  15. 50         location /nginx_status {
  16. 51             stub_status on;          #显示Nginx的基本状态信息
  17. 52             access_log off;          #关闭日志
  18. 53         }
  19. 54
  20. 55         location /status {
  21. 56             vhost_traffic_status_display;  #显示vhosttraffic_status的统计信息
  22. 57             vhost_traffic_status_display_format html;  #使用HTML格式显示
  23. 58         }
  24. ......
  25. 90     }
  26. ......
  27. 128 }
  28. [root@nginx data]]#systemctl  enable --now nginx
  29. ----------------------------------------------------------------------------------------
  30. vhost_traffic_status_zone;
  31. '这一行定义了一个名为 vhost_traffic_status 的共享内存区域,用于存储统计信息。'
  32. vhost_traffic_status_filter_by_host on;
  33. '这一行启用了按主机名过滤的功能。当启用此功能时,vhost_traffic_status 模块将只显示与 server_name 指令匹配的主机的统计信息。'
  34. '如果您的 Nginx 配置中有多个 server 块,并且您只想查看特定主机名的统计信息,这将非常有用。'
  35. 'Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上'
复制代码
访问查看信息,可以看到 Nginx Vhost Traffic Status 的页面信息

4.安装Exporters组件

4.1 安装组件

  1. [root@nginx data]#ls nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  2. nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  3. [root@nginx data]#tar xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  4. [root@nginx data]#mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/sbin/
  5. [root@nginx data]#ll /usr/local/sbin/
  6. 总用量 9752
  7. lrwxrwxrwx 1 root root      27 6月  13 22:58 nginx -> /usr/local/nginx/sbin/nginx
  8. -rwxr-xr-x 1 2000 2000 9982855 3月  28 2018 nginx-vts-exporter
复制代码
4.2 启动服务

  1. [root@nginx data]#cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
  2. [Unit]
  3. Description=nginx-exporter
  4. Documentation=https://prometheus.io/
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/local/sbin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/json
  9. ExecReload=/bin/kill -HUP $MAINPID
  10. Restart=on-failure
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
  14. [root@nginx data]#systemctl enable --now nginx-exporter
  15. Created symlink from /etc/systemd/system/multi-user.target.wants/nginx-exporter.service to /usr/lib/systemd/system/nginx-exporter.service.
  16. [root@nginx data]#ss -natp |grep nginx-vts-exp
  17. LISTEN  0   128    [::]:9913      [::]:*   users:(("nginx-vts-expor",pid=66900,fd=3))
复制代码


5.加入到prometheus监控

  1. [root@prometheus prometheus]#vim /usr/local/prometheus/prometheus.yml
  2. ......
  3. 46   - job_name: "nginx"
  4. 47     metrics_path: '/metrics'
  5. 48     static_configs:
  6. 49       - targets:
  7. 50         - 192.168.83.80:9913
  8. 51         labels:
  9. 52           service: nginx
  10. [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 添加实行文件

  1. [root@prometheus pm]#ls
  2. consul_0.9.2_linux_amd64.zip
  3. [root@prometheus pm]#unzip consul_0.9.2_linux_amd64.zip
  4. Archive:  consul_0.9.2_linux_amd64.zip
  5.   inflating: consul                  
  6. [root@prometheus pm]#ls
  7. consul  consul_0.9.2_linux_amd64.zip
  8. [root@prometheus pm]#mv consul /usr/local/bin
复制代码
1.2 创建目录
创建 Consul 服务的数据目录和设置目录
  1. [root@prometheus pm]#mkdir /var/lib/consul-data   #数据目录
  2. [root@prometheus pm]#mkdir /etc/consul/           #配置目录
  3. [root@prometheus pm]#consul agent \
  4. -server \
  5. -bootstrap \
  6. -ui \
  7. -data-dir=/var/lib/consul-data \
  8. -config-dir=/etc/consul/ \
  9. -bind=192.168.83.60 \
  10. -client=0.0.0.0 \
  11. -node=consul-server01 &> /var/log/consul.log &
  12. [root@prometheus pm]#consul members
  13. Node             Address             Status  Type    Build  Protocol  DC
  14. consul-server01  192.168.83.60:8301  alive   server  0.9.2  2         dc1
  15. #查看 consul 集群成员
复制代码
2.在Consul上注册Services

在设置目录中添加文件
  1. [root@prometheus pm]#vim /etc/consul/nodes.json
  2. [root@prometheus pm]#cat /etc/consul/nodes.json
  3. {
  4.   "services": [
  5.     {
  6.       "id": "node_exporter-node",
  7.       "name": "node",
  8.       "address": "192.168.83.70",
  9.       "port": 9100,
  10.       "tags": ["nodes"],
  11.       "checks": [{
  12.         "http": "http://192.168.83.70:9100/metrics",
  13.         "interval": "5s"
  14.       }]
  15.     }]
  16. }
  17. [root@prometheus pm]#consul reload
  18. Configuration reload triggered
  19. #让consul重新加载配置信息
  20. [root@prometheus pm]#ss -natp |grep consul
  21. LISTEN   0    128    192.168.83.60:8300      *:*    users:(("consul",pid=21117,fd=3))
  22. LISTEN   0    128    192.168.83.60:8301      *:*    users:(("consul",pid=21117,fd=10))
  23. LISTEN   0    128    192.168.83.60:8302      *:*    users:(("consul",pid=21117,fd=7))
  24. ESTAB    0    0      192.168.83.60:8300  192.168.83.60:46551   users:(("consul",pid=21117,fd=14))
  25. ESTAB    0    0      192.168.83.60:46551 192.168.83.60:8300    users:(("consul",pid=21117,fd=13))
  26. LISTEN   0    128     :::8500                :::*    users:(("consul",pid=21117,fd=18))
  27. LISTEN   0    128     :::8600                :::*    users:(("consul",pid=21117,fd=17))
复制代码
3.修改Prometheus设置文件

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

(二)基于file_cd的服务发现

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

  1. [root@prometheus ~]#mkdir /usr/local/prometheus/targets
  2. #创建用于服务发现的目录
  3. [root@prometheus ~]#vim /usr/local/prometheus/targets/mysqld-exporter.yaml
  4. [root@prometheus ~]#cat /usr/local/prometheus/targets/mysqld-exporter.yaml
  5. - targets:
  6.   - 192.168.83.20:9104
  7.   labels:
  8.     app: mysqld-exporter
  9.     job: mysqld
复制代码
2.修改prometheus设置文件

修改 prometheus 设置文件,发现 target 的设置,定义在设置文件的 job 之中
  1. [root@prometheus ~]#vim /usr/local/prometheus/prometheus.yml
  2. ......
  3.     38          - job_name: mysqld
  4.     39            file_sd_configs:          #指定使用文件服务发现
  5.     40            - files:                  #指定要加载的文件列表
  6.     41              - targets/mysqld*.yaml  #文件加载支持通配符
  7.     42              refresh_interval: "2m"
  8. [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/
  1. [root@prometheus grafana]#ls
  2. grafana-7.4.0-1.x86_64.rpm
复制代码
2.安装服务

使用yum安装,自动解决依赖关系
  1. [root@prometheus grafana]#yum install -y grafana-7.4.0-1.x86_64.rpm
  2. [root@prometheus grafana]#systemctl enable --now grafana-server
  3. [root@prometheus grafana]#ss -natp |grep grafana
  4. ESTAB   0   0   192.168.83.60:56218   185.199.109.133:443  users:(("grafana-server",pid=22703,fd=10))
  5. ESTAB   0   0   192.168.83.60:35366   34.120.177.193:443   users:(("grafana-server",pid=22703,fd=9)
  6. 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,即可导入监控面板
  






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表