离线环境下的 Prometheus 生态部署攻略

news2024/11/23 23:04:12

一、前言

在当今高度数字化的世界中,监控系统的稳定性和可靠性对于确保业务连续性和性能优化至关重要。特别是在网络隔离或无互联网接入的局域网环境下,离线部署监控解决方案成为了一种必要且挑战性的任务。本文将深入探讨如何在离线环境中成功部署 Prometheus、Alertmanager、Node Exporter 和 Grafana 这一强大的监控生态系统。

通过详细解析每个组件的功能和特性,笔者将介绍从资源准备、安装配置到系统集成的全过程,确保学习的小伙伴能够在无网环境下构建一个高效、可靠的监控体系。无论您是运维工程师、系统管理员还是DevOps团队成员,本文都将为大伙提供宝贵的知识和实战经验,希望本文能让大家能在监控领域的探索之路上更进一步。

二、监控组件简单介绍

在构建监控系统时,Prometheus、Alertmanager、Node Exporter 和 Grafana 是四个核心组件。它们各自扮演着不同的角色,共同构成了一个强大的监控和警报生态系统。以下是对每个组件的详细介绍:

(1)Prometheus

Prometheus 是由 SoundCloud 公司于2012年开发的一款开源监控和警报工具包。当时,SoundCloud 面临着日益增长的监控需求,传统的监控解决方案无法满足其对多维数据模型和灵活查询的需求。因此,他们决定开发一个全新的监控系统,这就是 Prometheus 的雏形。

Prometheus 的设计灵感来源于 Google 的 Borgmon 监控系统,它采用了时间序列数据模型和强大的查询语言,使得用户可以轻松地对大规模分布式系统进行监控和分析。2015年,Prometheus 正式成为继 Kubernetes 之后第二个从 Cloud Native Computing Foundation (CNCF) 毕业的项目,这标志着它在云原生领域的广泛认可和应用。

Prometheus 作为一个开源的监控和警报工具包,以其多维数据模型、强大的查询语言和灵活的警报管理功能,在云原生和微服务架构中得到了广泛应用。通过与 Alertmanager、Node Exporter 和 Grafana 等组件的集成,Prometheus 提供了一个完整且高效的监控解决方案,帮助用户实时监控系统性能、优化资源利用并确保业务连续性。

主要功能:

  • 数据采集和存储

Prometheus 通过 HTTP 拉取(pull)方式从配置的目标端点收集指标数据。这些目标可以是应用程序、服务器、数据库或其他任何能够暴露指标的系统组件。Prometheus 将采集到的数据存储在本地的时间序列数据库中,这种设计使得数据采集和存储非常高效和可靠。

  • 多维数据模型

Prometheus 采用多维数据模型,每个时间序列数据由指标名称和一组键值对(标签)唯一标识。这种模型提供了极大的灵活性,使得用户可以轻松地对数据进行过滤、聚合和查询。

  • 强大的查询语言(PromQL)

Prometheus 提供了一种强大的查询语言——PromQL(Prometheus Query Language),用户可以使用 PromQL 对时间序列数据进行实时分析和聚合。PromQL 支持各种复杂的查询操作,如范围查询、聚合、预测和警报规则配置。

  • 警报管理

Prometheus 内置了警报管理功能,用户可以配置警报规则,当满足特定条件时,Prometheus 会生成警报并发送给 Alertmanager。Alertmanager 负责对警报进行去重、分组和路由,并将警报发送到合适的接收器,如电子邮件、Slack、PagerDuty 等。

  • 可视化和仪表盘

虽然 Prometheus 本身提供了基本的可视化界面,但更常用的是与 Grafana 集成,利用 Grafana 强大的可视化功能创建丰富的仪表盘和图表。Grafana 支持多种数据源,包括 Prometheus,用户可以轻松地创建自定义的仪表盘,展示关键指标和性能数据。

  • 生态系统支持

Prometheus 拥有一个活跃的社区和丰富的生态系统,提供了大量的 exporter 和客户端库,支持几乎所有主流编程语言和系统组件。这使得 Prometheus 可以轻松地集成到现有的技术栈中,实现全面的监控覆盖。

(2)Alertmanager

Alertmanager 是 Prometheus 监控生态系统中的一个核心组件,专门负责处理和分发警报。它最初是作为 Prometheus 项目的一部分开发的,旨在解决 Prometheus 监控系统中的警报管理问题。随着 Prometheus 的广泛应用和社区的发展,Alertmanager 逐渐成为一个独立且功能强大的警报管理工具。

Alertmanager 的设计目标是提供一个灵活、可靠且易于扩展的警报管理系统。它支持多种警报接收器,如电子邮件、Slack、PagerDuty 等,并且可以通过配置实现警报的去重、分组和路由,从而减少警报噪音,提高警报处理的效率和准确性。

Alertmanager 作为 Prometheus 生态系统中的一个关键组件,以其灵活的警报处理机制、强大的路由功能和高可用性设计,在实际工作中发挥着重要作用。通过与 Prometheus、Node Exporter 和 Grafana 等组件的集成,Alertmanager 帮助用户构建一个完整且高效的监控和警报系统,确保关键警报能够及时得到处理,提高系统的稳定性和可靠性。

主要功能:

  • 警报接收和处理

Alertmanager 从 Prometheus 接收警报,并对这些警报进行处理。它可以根据预定义的规则对警报进行去重和分组,将多个相似的警报合并成一个通知,从而减少警报噪音,提高警报处理的效率。

  • 警报路由

Alertmanager 支持灵活的警报路由机制,可以根据警报的标签和注解将警报路由到不同的接收器。例如,可以将关键警报发送到即时通讯工具(如 Slack),将非关键警报发送到电子邮件,从而确保关键警报能够及时得到处理。

  • 静默和抑制

Alertmanager 提供了静默(silence)和抑制(inhibition)机制,帮助用户更好地管理警报。静默机制允许用户在特定时间段内忽略某些警报,而抑制机制则可以在某个警报触发时,抑制与之相关的其他警报,避免重复发送警报。

  • 高可用性

Alertmanager 支持集群模式,可以实现高可用性和负载均衡。通过配置多个 Alertmanager 实例,可以确保在某个实例故障时,警报处理不会中断,从而提高整个监控系统的可靠性和稳定性。

  • 集成和扩展

Alertmanager 可以与多种警报接收器集成,如电子邮件、Slack、PagerDuty、Webhook 等。此外,Alertmanager 还支持通过 Webhook 扩展,用户可以自定义 Webhook 接收器,实现与第三方系统的集成,从而满足各种复杂的警报处理需求。

(3)Node Exporter

Node Exporter 也是 Prometheus 监控生态系统中的一个重要组件,专门用于收集和暴露硬件和操作系统级别的指标。它最初是由 Prometheus 社区开发的,旨在为 Prometheus 提供一种标准化的方式来收集和暴露系统级别的监控数据。

Node Exporter 的设计目标是轻量级、高效且易于部署。它运行在目标机器上,通过 HTTP 接口暴露系统级别的指标,如 CPU 使用率、内存使用率、磁盘 I/O 和网络流量等。这些指标可以被 Prometheus 服务器通过拉取(pull)方式收集和存储。

主要功能:

  • 系统指标收集:收集和暴露系统级别的指标。

  • 兼容性:Node Exporter 支持多种操作系统和硬件平台,包括 Linux、Windows、FreeBSD 等。

  • 灵活配置:可以通过命令行参数和配置文件进行灵活配置。用户可以根据实际需求选择收集哪些指标,以及如何暴露这些指标。

(4)Grafana

Grafana 是一个开源的分析和监控平台,最初由 Torkel Ödegaard 在2014年创建。Grafana 的诞生源于对现有监控和可视化工具的不满,Ödegaard 希望创建一个更灵活、更强大的工具,能够满足复杂的数据可视化和监控需求。

Grafana 的设计目标是提供一个易于使用、高度可定制且支持多种数据源的监控和分析平台。它支持多种数据库和数据源,包括 Prometheus、InfluxDB、Elasticsearch、Graphite 等,用户可以通过创建仪表盘(dashboard)来展示和分析数据。

主要功能:

  • 数据可视化

Grafana 提供了丰富的图表和图形,用户可以通过创建仪表盘来展示和分析数据。Grafana 支持多种图表类型,如折线图、柱状图、饼图、热图、仪表盘等,用户可以根据需求选择合适的图表类型,创建自定义的仪表盘。

  • 多数据源支持

Grafana 支持多种数据源,包括 Prometheus、InfluxDB、Elasticsearch、Graphite 等。用户可以在同一个仪表盘上集成来自不同数据源的数据,实现全面的数据可视化和分析。

  • 实时数据展示

Grafana 可以实时展示数据,用户可以通过配置刷新间隔,确保仪表盘上的数据始终保持最新。这对于监控系统性能、业务指标和关键绩效指标(KPI)非常重要。

  • 警报和通知

Grafana 支持在仪表盘上配置和管理警报。用户可以设置警报规则,当某些指标超过预设阈值时,Grafana 会生成警报并发送通知。Grafana 支持多种通知渠道,如电子邮件、Slack、PagerDuty 等。

  • 用户和权限管理

Grafana 提供了完善的用户和权限管理功能,用户可以创建多个用户和角色,并为每个角色分配不同的权限。这使得 Grafana 可以安全地集成到企业环境中,满足不同用户和团队的需求。

  • 插件和扩展

Grafana 拥有一个活跃的社区和丰富的插件生态系统,用户可以通过安装插件扩展 Grafana 的功能。例如,可以安装 Prometheus 插件,实现与 Prometheus 的集成;安装 Elasticsearch 插件,实现与 Elasticsearch 的集成。

这四个组件共同构成了一个完整的监控和警报系统:

  • Prometheus 负责数据采集和存储。

  • Alertmanager 负责警报管理。

  • Node Exporter 负责收集系统级别的指标。

  • Grafana 负责数据可视化和仪表盘展示。

通过合理配置和集成这些组件,我们可以构建一个强大且灵活的监控系统,满足不同场景下的监控需求。

三、离线环境下的资源准备

既然是离线环境,首先咱们需要将prometheus及其对应的组件安装包下载下来,上传到服务器上进行安装。下面是对应的下载地址信息,可根据自己服务器信息下载对应版本的安装包资源:

prometheus官方下载地址可以下载prometheus以及其相关组件Alertmanager和一些exporter的安装包,包括但不限于node_exporter、mysqld_exporter、memcached_exporter等等。如果下载prometheus较慢这里大家也可以在国内的清华大学开源软件镜像站下载。但是Alertmanager和node_exporter可能还得在prometheus官网下载,暂时没发现其他国内源可下载。

Grafana官方下载地址可下载grafana的安装包,进入后直接找到合适的安装包进行下载即可。

但是一般官网下载速度都比较慢,因此笔者这里推荐两个国内源进行下载:

  1. Grafana阿里云镜像源

  2. Grafana清华大学源

当然,为了方便使用对应的资源笔者已经下载完毕并放在个人资源中了,大家也可以直接去下载需要的安装包即可。

然后将相关组件信息上传至服务器上后便可以进行正式的部署流程了:

root@master01:~# mkdir -p /opt/monitor/
root@master01:/opt/monitor# ls -l
总计 269376
-rw-r--r-- 1 root root  30866868  8月 28 11:01 alertmanager-0.27.0.linux-amd64.tar.gz
-rw-r--r-- 1 root root 135768146  8月 27 22:03 grafana-enterprise-11.2.0.linux-amd64.tar.gz
-rw-r--r-- 1 root root  10676343  8月 28 11:01 node_exporter-1.8.2.linux-amd64.tar.gz
-rw-r--r-- 1 root root  98500608  8月  9 20:02 prometheus-2.54.0.linux-amd64.tar.gz

四、安装并配置prometheus

解压prometheus的离线安装包:

root@master01:/opt/monitor# tar -xvf prometheus-2.54.1.linux-amd64.tar.gz 
prometheus-2.54.1.linux-amd64/
prometheus-2.54.1.linux-amd64/NOTICE
prometheus-2.54.1.linux-amd64/LICENSE
prometheus-2.54.1.linux-amd64/prometheus.yml
prometheus-2.54.1.linux-amd64/prometheus
prometheus-2.54.1.linux-amd64/consoles/
prometheus-2.54.1.linux-amd64/consoles/prometheus-overview.html
prometheus-2.54.1.linux-amd64/consoles/node-overview.html
prometheus-2.54.1.linux-amd64/consoles/index.html.example
prometheus-2.54.1.linux-amd64/consoles/node.html
prometheus-2.54.1.linux-amd64/consoles/node-disk.html
prometheus-2.54.1.linux-amd64/consoles/prometheus.html
prometheus-2.54.1.linux-amd64/consoles/node-cpu.html
prometheus-2.54.1.linux-amd64/promtool
prometheus-2.54.1.linux-amd64/console_libraries/
prometheus-2.54.1.linux-amd64/console_libraries/menu.lib
prometheus-2.54.1.linux-amd64/console_libraries/prom.lib
root@master01:/opt/monitor# mv prometheus-2.54.1.linux-amd64 ./prometheus
root@master01:/opt/monitor# ls -l prometheus
总计 265568
drwxr-xr-x 2 1001 docker      4096  8月 27 19:11 console_libraries
drwxr-xr-x 2 1001 docker      4096  8月 27 19:11 consoles
-rw-r--r-- 1 1001 docker     11357  8月 27 19:11 LICENSE
-rw-r--r-- 1 1001 docker      3773  8月 27 19:11 NOTICE
-rwxr-xr-x 1 1001 docker 140096826  8月 27 18:58 prometheus
-rw-r--r-- 1 1001 docker       934  8月 27 19:11 prometheus.yml
-rwxr-xr-x 1 1001 docker 131802216  8月 27 18:58 promtool

配置prometheus服务并加入系统服务管理,其中指定prometheus的文件存放地与配置文件信息,另外有需要的话更改一下默认访问端口,这里我将默认的9090改为了30080:

root@master01:/opt/monitor/prometheus# vi /etc/systemd/system/prometheus.service 
root@master01:/opt/monitor/prometheus# cat /etc/systemd/system/prometheus.service 
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview
After=network-online.target
[Service]
Type=simple
Restart=on-failure
ExecStart=/opt/monitor/prometheus/prometheus \
--config.file=/opt/monitor/prometheus/prometheus.yml \
--web.listen-address=:30080 \
--storage.tsdb.path=/opt/monitor/prometheus/data \
--storage.tsdb.retention.time=60d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

然后启动服务,查看是否可以启动成功:

root@master01:/opt/monitor/prometheus# systemctl daemon-reload
root@master01:/opt/monitor/prometheus# systemctl enable --now prometheus.service
root@master01:/opt/monitor/prometheus# systemctl status prometheus.service
● prometheus.service - Prometheus Server
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-08-28 15:13:48 CST; 2s ago
       Docs: https://prometheus.io/docs/introduction/overview
   Main PID: 342236 (prometheus)
      Tasks: 9 (limit: 4546)
     Memory: 16.4M
        CPU: 73ms
     CGroup: /system.slice/prometheus.service
             └─342236 /opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml --web.listen-address=:30080 --storage.tsdb.path=/opt/monitor/prometheu>

8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.226Z caller=head.go:721 level=info component=tsdb msg="Replaying WAL, this may take a while"
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.226Z caller=head.go:793 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.226Z caller=head.go:830 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=34.525µs>
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1181 level=info fs_type=EXT4_SUPER_MAGIC
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1184 level=info msg="TSDB started"
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1367 level=info msg="Loading configuration file" filename=/opt/monitor/prometheus/prometheus>
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1404 level=info msg="updated GOGC" old=100 new=75
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1415 level=info msg="Completed loading of configuration file" filename=/opt/monitor/promethe>
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=main.go:1145 level=info msg="Server is ready to receive web requests."
8月 28 15:13:48 master01 prometheus[342236]: ts=2024-08-28T07:13:48.229Z caller=manager.go:164 level=info component="rule manager" msg="Starting rule manager..."

最后就可以通过ip+端口号访问prometheus的web页面了。

五、安装并配置alertmanager

解压alertmanager的离线安装包:

root@master01:/opt/monitor# tar -xvf alertmanager-0.27.0.linux-amd64.tar.gz 
alertmanager-0.27.0.linux-amd64/
alertmanager-0.27.0.linux-amd64/alertmanager
alertmanager-0.27.0.linux-amd64/alertmanager.yml
alertmanager-0.27.0.linux-amd64/NOTICE
alertmanager-0.27.0.linux-amd64/amtool
alertmanager-0.27.0.linux-amd64/LICENSE
root@master01:/opt/monitor# mv alertmanager-0.27.0.linux-amd64 alertmanager

 配置alertmanager并其加入系统服务,与prometheus上面的配置方式大致相同:

root@master01:/opt/monitor/alertmanager# vi /etc/systemd/system/alertmanager.service
root@master01:/opt/monitor/alertmanager# pwd
/opt/monitor/alertmanager
root@master01:/opt/monitor/alertmanager# cat /etc/systemd/system/alertmanager.service 
[Unit]
​
Description=alertmanager server daemon
​
After=network.target
​
[Service]
​
ExecStart=/opt/monitor/alertmanager/alertmanager --config.file=/opt/monitor/alertmanager/alertmanager.yml --storage.path=/opt/monitor/alertmanager/data
​
Restart=always
User=root
​
[Install]
​
WantedBy=multi-user.target

然后启动服务,查看是否可以启动成功:

root@master01:/opt/monitor/alertmanager# systemctl enable --now alertmanager.service
Created symlink /etc/systemd/system/multi-user.target.wants/alertmanager.service → /etc/systemd/system/alertmanager.service.
root@master01:/opt/monitor/alertmanager# systemctl status alertmanager
● alertmanager.service - alertmanager server daemon
     Loaded: loaded (/etc/systemd/system/alertmanager.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-08-28 15:45:09 CST; 11s ago
   Main PID: 375779 (alertmanager)
      Tasks: 9 (limit: 4546)
     Memory: 14.3M
        CPU: 120ms
     CGroup: /system.slice/alertmanager.service
             └─375779 /opt/monitor/alertmanager/alertmanager --config.file=/opt/monitor/alertmanager/alertmanager.yml --storage.path=/opt/monitor/alertmanager/data

8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.782Z caller=main.go:181 level=info msg="Starting Alertmanager" version="(version=0.27.0, branch=HEAD, revision>
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.782Z caller=main.go:182 level=info build_context="(go=go1.21.7, platform=linux/amd64, user=root@22cd11f671e9, >
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.813Z caller=cluster.go:186 level=info component=cluster msg="setting advertise address explicitly" addr=192.16>
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.815Z caller=cluster.go:683 level=info component=cluster msg="Waiting for gossip to settle..." interval=2s
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.859Z caller=coordinator.go:113 level=info component=configuration msg="Loading configuration file" file=/opt/m>
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.859Z caller=coordinator.go:126 level=info component=configuration msg="Completed loading of configuration file>
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.861Z caller=tls_config.go:313 level=info msg="Listening on" address=[::]:9093
8月 28 15:45:09 master01 alertmanager[375779]: ts=2024-08-28T07:45:09.861Z caller=tls_config.go:316 level=info msg="TLS is disabled." http2=false address=[::]:9093
8月 28 15:45:11 master01 alertmanager[375779]: ts=2024-08-28T07:45:11.816Z caller=cluster.go:708 level=info component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapse>
8月 28 15:45:19 master01 alertmanager[375779]: ts=2024-08-28T07:45:19.818Z caller=cluster.go:700 level=info component=cluster msg="gossip settled; proceeding" elapsed=10.003257556s

待启动完成后需要将alertmanager加入prometheus。重新修改prometheus的配置文件:

root@master01:/opt/monitor/alertmanager# vi ../prometheus/prometheus.yml 
root@master01:/opt/monitor/alertmanager# cat ../prometheus/prometheus.yml 
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - localhost:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:30080"]

解除原本已注释掉的alertmanager配置,更改为自己的alertmanager服务地址,然后添加触发配置文件,这里名为“first.yml”:

root@master01:/opt/monitor/alertmanager# vi ../prometheus/first_rules.yml
root@master01:/opt/monitor/alertmanager# cat ../prometheus/first_rules.yml 
groups:
  - name: my first rules
    rules:
      - alert: 内存使用率过高
        expr: 100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 80
        for: 3m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} 内存使用率过高, 请尽快处理!"
          description: "{{ $labels.instance }} 内存使用率超过80%, 当前使用率{{ $value }}%."

      - alert: 服务器宕机
        expr: up == 0
        for: 1s
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} 服务器宕机, 请尽快处理!"
          description: "{{ $labels.instance }} 服务器延时超过3分钟, 当前状态{{ $value }}."

      - alert: CPU高负荷
        expr: 100 - (avg by (instance, job)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 1m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} CPU使用率过高, 请尽快处理!"
          description: "{{ $labels.instance }} CPU使用大于90%, 当前使用率{{ $value }}%."

      - alert: 磁盘IO性能
        expr: avg(irate(node_disk_io_time_seconds_total[1m])) by (instance, job) * 100 > 90
        for: 1m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} 流入磁盘IO使用率过高, 请尽快处理!"
          description: "{{ $labels.instance }} 流入磁盘IO大于90%, 当前使用率{{ $value }}%."

      - alert: 网络流入
        expr: ((sum(rate(node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance, job)) / 100) > 102400
        for: 5m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} 流入网络带宽过高,请尽快处理!"
          description: "{{ $labels.instance }} 流入网络带宽持续5分钟高于100M. RX带宽使用量{{ $value }}."

      - alert: 网络流出
        expr: ((sum(rate(node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance, job)) / 100) > 102400
        for: 5m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.instance }} 流出网络带宽过高, 请尽快处理!"
          description: "{{ $labels.instance }} 流出网络带宽持续5分钟高于100M. RX带宽使用量{{ $value }}."

      - alert: TCP连接数
        expr: node_netstat_Tcp_CurrEstab > 10000
        for: 2m
        labels:
          severity: 严重告警
        annotations:
          summary: "TCP_ESTABLISHED过高!"
          description: "{{ $labels.instance }} TCP_ESTABLISHED大于100%, 当前使用率{{ $value }}%."

      - alert: 磁盘容量
        expr: 100 - (node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 90
        for: 1m
        labels:
          severity: 严重告警
        annotations:
          summary: "{{ $labels.mountpoint }} 磁盘分区使用率过高,请尽快处理!"
          description: "{{ $labels.instance }} 磁盘分区使用大于90%,当前使用率{{ $value }}%."

yml配置信息说明:

groups:

  • name: 组合的告警组名称。

rules:

  • alert: 报警名称。

  • expr: PromQL 表达式,用于定义触发报警的条件。

  • for: 定义触发报警条件后,持续满足条件的时间。

  • labels: 额外的标签,可以附加到报警上)。

  • annotations: 报警的元信息,用于说明报警的内容,例如 summarydescription

之后可以用prometheus上的工具检查一下配置是否正确:

root@master01:/opt/monitor/prometheus# ./promtool check config prometheus.yml 
Checking prometheus.yml
  SUCCESS: 1 rule files found
 SUCCESS: prometheus.yml is valid prometheus config file syntax

Checking first_rules.yml
  SUCCESS: 8 rules found

重启prometheus后可在prometheus上看到定义的规则信息:

六、集成并配置node_exporter

流程与上述一致:

root@master01:/opt/monitor# tar -xvf node_exporter-1.8.2.linux-amd64.tar.gz 
node_exporter-1.8.2.linux-amd64/
node_exporter-1.8.2.linux-amd64/NOTICE
node_exporter-1.8.2.linux-amd64/node_exporter
node_exporter-1.8.2.linux-amd64/LICENSE
root@master01:/opt/monitor# mv node_exporter-1.8.2.linux-amd64 ./node_exporter
root@master01:/opt/monitor# cd node_exporter/
root@master01:/opt/monitor/node_exporter# ls
LICENSE  node_exporter  NOTICE
root@master01:/opt/monitor/node_exporter# pwd
/opt/monitor/node_exporter
root@master01:/opt/monitor# vi /etc/systemd/system/node_exporter.service
root@master01:/opt/monitor/node_exporter# cat /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
ExecStart=/opt/monitor/node_exporter/node_exporter --collector.textfile.directory=/opt/monitor/node_exporter
Restart=on-failure
[Install]

WantedBy=multi-user.target
root@master01:/opt/monitor/node_exporter# systemctl daemon-reload
root@master01:/opt/monitor/node_exporter# systemctl enable --now node_exporter.service
Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /etc/systemd/system/node_exporter.service.
root@master01:/opt/monitor/node_exporter# systemctl status node_exporter.service
● node_exporter.service - node_exporter
     Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: >
     Active: active (running) since Wed 2024-08-28 17:05:08 CST; 2min 26s ago
       Docs: https://prometheus.io/
   Main PID: 461549 (node_exporter)
      Tasks: 6 (limit: 4546)
     Memory: 2.8M
        CPU: 13ms
     CGroup: /system.slice/node_exporter.service
             └─461549 /opt/monitor/node_exporter/node_exporter --collector.textfile.dire>

8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>
8月 28 17:05:08 master01 node_exporter[461549]: ts=2024-08-28T09:05:08.472Z caller=node_>

 待正常启动后,将node_exporter到prometheus:

root@master01:/opt/monitor/node_exporter# cat ../prometheus/prometheus.yml 
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - localhost:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:30080"]

  - job_name: "node-exporter"

    static_configs:
      - targets: ["192.168.1.200:9100"]
        labels:
          instance: node_exporter
root@master01:/opt/monitor/node_exporter# vi ../prometheus/prometheus.yml 
#重载服务
root@master01:/opt/monitor/node_exporter# curl -X POST http://localhost:30080/-/reload

然后便可以访问ip:端口/targets页面检查 node 目标的状态是否为 UP。 如果为UP代表其可以正常检测目标服务器上的系统信息。

七、安装并配置Grafana仪表盘

流程一致,不再重复赘述,直接走流程:

root@master01:/opt/monitor# tar -xvf grafana-enterprise-11.2.0.linux-amd64.tar.gz 
root@master01:/opt/monitor# mv grafana-v11.2.0 ./grafana
root@master01:/opt/monitor# vi /etc/systemd/system/grafana-server.service
root@master01:/opt/monitor/grafana# cat /etc/systemd/system/grafana-server.service
[Unit]

Description=Grafana

After=network.target

[Service]

Type=notify

ExecStart=/opt/monitor/grafana/bin/grafana-server --config=/opt/monitor/grafana/conf/defaults.ini --homepath /opt/monitor/grafana

Restart=on-failure

[Install]

WantedBy=multi-user.target
root@master01:/opt/monitor# systemctl daemon-reload
root@master01:/opt/monitor# systemctl start grafana-server && systemctl enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /etc/systemd/system/grafana-server.service.
root@master01:/opt/monitor# systemctl status grafana-server 
● grafana-server.service - Grafana
     Loaded: loaded (/etc/systemd/system/grafana-server.service; enabled; vendor preset:>
     Active: active (running) since Wed 2024-08-28 16:23:04 CST; 10s ago
   Main PID: 416388 (grafana)
      Tasks: 19 (limit: 4546)
     Memory: 120.5M
        CPU: 3.809s
     CGroup: /system.slice/grafana-server.service
             └─416388 grafana server --config=/opt/monitor/grafana/conf/defaults.ini --h>

8月 28 16:23:04 master01 grafana-server[416388]: logger=grafanaStorageLogger t=2024-08-2>
8月 28 16:23:04 master01 grafana-server[416388]: logger=http.server t=2024-08-28T16:23:0>
8月 28 16:23:04 master01 grafana-server[416388]: logger=provisioning.dashboard t=2024-08>
8月 28 16:23:04 master01 grafana-server[416388]: logger=provisioning.dashboard t=2024-08>
8月 28 16:23:04 master01 grafana-server[416388]: logger=grafana.update.checker t=2024-08>

grafana默认的访问端口是3000,默认账号密码是admin/admin,这个信息可以在config/defaults.ini里进行查看或者修改。第一次登录会让我们修改密码,然后就能进入主界面了。如果需要将页面信息设置为中文,可以在右上角头像那进入Profile进行语言设置:

在仪表盘这块可以添加由prometheus作为数据源监控的可视化数据源。

由于安装了node_exporter,所以咱们可以在探索-Metrics上寻找一些可以使用到的数据图,这些都是监控系统收集到的Node Exporter 和 Go 应用的内置监控数据。

如果没有符合的,也可以通过下面的流程去运行指定的promQL查询语句查询信息,然后得到展示的可视化图片:

比如我们查询一下系统的内存使用情况和磁盘占用情况然后展示出来:

八、总结

这块内容主要还是prometheus+grafana可视化组件的安装及基础使用介绍,像alertmanager的告警使用,其实介绍的并不多,只有一个基础的安装和简单配置。等后面有空在专门补充一章告警通知这块的内容,敬请期待~欢迎一同交流学习~  

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

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

相关文章

深圳保障房、商品房、小产权房子类型对比

摘要&#xff1a; 整理了我认知以内的深圳房子类型&#xff0c;有安居房&#xff0c;可售人才房&#xff0c;共有产权房、配售型保障房、商品房、统建楼、农民房的区别。如果数据存疑&#xff0c;可以多方对比论证&#xff0c;我也主要靠百度。 我发现我很多同事是非深户&#…

秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie

文章目录 引言正文200-岛屿数量个人实现 994、腐烂的橘子个人实现参考实现 207、课程表个人实现参考实现 208、实现Trie前缀树个人实现参考实现 总结 引言 正文 200-岛屿数量 题目链接 个人实现 我靠&#xff0c;这道题居然是腾讯一面的类似题&#xff0c;那道题是计算最…

《分析模式》2024中译本-前言-01(加红色标注)

写在前面 今天开始&#xff0c;我们逐渐发布一些《分析模式》2024中译本的译文。 红色字体标出的文字&#xff0c;表示我认为之前的译本可能会让读者产生误解的地方。 感兴趣的读者&#xff0c;可以对照之前译本以及原文&#xff0c;捉摸一下为什么要标红。 主要原因当然是…

基于SpringBoot+Vue+MySQL的小区物业管理系统

系统背景 在当今信息化高速发展的时代&#xff0c;小区物业管理正经历着从传统模式向智能化、高效化转型的深刻变革。这一转变的核心驱动力&#xff0c;正是小区物业管理系统的全面智能化升级。该系统不仅极大地提升了物业管理的效率与精确度&#xff0c;还深刻重塑了物业与业主…

数分基础(03-1)客户特征分析

文章目录 客户特征分析1. 数据集2. 思路与步骤2.1 特征工程2.2 识别方法2.3 可视化 3. 分析准备3.1 读取数据集3.2 识别不同客户群体3.2.1 使用K-Means聚类进行初步细分3.2.2 关于聚类方法&#xff08;1&#xff09;特征缩放1&#xff09;平衡特征对模型的影响力&#xff0c;避…

通过ICMP判断网络故障

一、ICMP协议 Internet控制消息协议ICMP(Internet Control Message Protocol)是IP协议的辅助协议。 ICMP协议用来在网络设备间传递各种差错和控制信息&#xff0c;对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。 TypeCode描述备注00Echo Replyping…

C++从入门到起飞之——list使用 全方位剖析!

​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、迭代器 2、push_back与emplace_back 3、list成员函数sort与库sort比较 4、merge 5、uniqu…

2024117读书笔记|《李煜词(果麦经典)》——一壶酒,一竿身,快活如侬有几人?一片芳心千万绪,人间没个安排处

2024117读书笔记|《李煜词&#xff08;果麦经典&#xff09;》——一壶酒&#xff0c;一竿身&#xff0c;快活如侬有几人&#xff1f;一片芳心千万绪&#xff0c;人间没个安排处 《李煜词&#xff08;果麦经典&#xff09;》李煜的词很美&#xff0c;插图也不错&#xff0c;很值…

基于粒子群优化算法的六自由度机械臂三维空间避障规划

摘要&#xff1a;本研究旨在解决机械臂在复杂环境中避障路径规划的问题。本文提出了一种利用粒子群优化算法&#xff08;PSO&#xff09;进行机械臂避障规划的方法&#xff0c;通过建立机械臂的运动模型&#xff0c;将避障问题转化为优化问题。PSO算法通过模拟群体中个体的社会…

ggml 简介

ggml是一个用 C 和 C 编写、专注于 Transformer 架构模型推理的机器学习库。该项目完全开源&#xff0c;处于活跃的开发阶段&#xff0c;开发社区也在不断壮大。ggml 和 PyTorch、TensorFlow 等机器学习库比较相似&#xff0c;但由于目前处于开发的早期阶段&#xff0c;一些底层…

8月28c++

c手动封装顺序表 #include <iostream>using namespace std; using datatype int;//类型重命名struct SeqList { private:datatype *data;//顺序表数组int size0;//数组大小int len0;//顺序表实际长度 public:void init(int s);//初始化函数bool empty();//判空函数bool …

python有主函数吗

python和C/Java不一样&#xff0c;没有主函数一说&#xff0c;也就是说python语句执行不是从所谓的主函数main开始的。 当运行单个python文件时&#xff0c;如运行a.py&#xff0c;这个时候a的一个属性__name__是__main__。 当调用某个python文件时&#xff0c;如b.py调用a.p…

HDD介绍

HDD是“Hard Disk Drive”的缩写&#xff0c;意为“硬盘驱动器”&#xff0c;是计算机中用于存储数据和程序的主要设备之一。 硬盘有机械硬盘(Hard Disk Drive&#xff0c;HDD)和固态硬盘(SSD)之分。机械硬盘即是传统普通硬盘&#xff0c;主要由&#xff1a;盘片&#xff0c;磁…

2024年华侨生联考英语真题全析:难度变化与备考策略

导读 在前面我们和大家一起分享了2024年华侨生联考各科真题的难度情况。今天我们就来和大家具体的看一下2024年港澳台华侨生联考英语真题试卷具体分析哈。 听力部分 今年的听力和去年的听力总体难度差别不大&#xff0c;一段听力材料对应一道听力题目&#xff08;简称一对一…

谐波电抗器选择的最佳方法

选择谐波电抗器的最佳方法取决于系统的具体要求和条件。 以下是选择谐波电抗器时需要考虑的关键因素和方法&#xff1a; 1、确定系统谐波频率 谐波分析&#xff1a;使用谐波分析仪测量系统中的谐波频率&#xff0c;确定主要的谐波频率和幅值。谐波电抗器的选择需要针对这些谐…

2024年6月GSEP(python)一级认证真题讲解

注意&#xff01;做题时长为2小时&#xff0c;孩子做完题目后对照讲解视频和讲解分析&#xff0c;针对薄弱点&#xff0c;进行有效的专项提高。 &#x1f451;讲解视频 &#xff08;暂无&#xff09; &#x1f451;讲解分析 1 单选题&#xff08;每题 2 分&#xff0c;共 3…

【CVPR‘23】CompletionFormer:用于深度补全的 Transformer 网络!已开源

【CVPR23】CompletionFormer:用于深度补全的 Transformer 网络! 摘要方法3.1 RGB 和深度嵌入3.2 联合卷积注意力和 Transformer 编码器3.3 解码器3.4 SPN 精化和损失函数主要贡献实验结果论文地址:https://openaccess.thecvf.com/content/CVPR2023/papers/Zhang_CompletionF…

C语言指针重学

学习要纲:建议掌握 gdb调试(b ,d ,fin ,bt ,print ,awatch ,up ,down ,set pretty等) SourceInsight软件看代码(全局搜索 文件搜索等) git如何调取分支合并(git branch,git blame,git log,git pull,git reset --hard等) 等内容,下面是对于指针的一个重新学习. C语言的指针&…

如何使用ssm实现基于java web的计算机office课程平台设计与实现+vue

TOC ssm277基于java web的计算机office课程平台设计与实现vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利…

WireShark网络分析~部署方式

一、《Wireshark网络分析就这么简单》 第一章学习 声明&#xff1a;文章只限于网络学习和实验&#xff0c;请遵守《网络安全法》。 第一章问题一&#xff1a;两台服务器A和B的网络配置如下(见图1)&#xff0c;B的子网掩码本应该是255.255.255.0&#xff0c;被不小心配成了255.…