Prometheus+Grafana:Linux设备群监控系统

jupiter
2022-06-15 / 0 评论 / 960 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月15日,已超过892天没有更新,若内容或图片失效,请留言反馈。

1.Prometheus

1.1. Prometheus简介

Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:

  • 支持多维数据模型:由度量名和键值对组成的时间序列数据
  • 内置时间序列数据库TSDB
  • 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义
  • 支持HTTP的Pull方式采集时间序列数据
  • 支持PushGateway采集瞬时任务的数据
  • 支持服务发现和静态配置两种方式发现目标
  • 支持接入Grafana

1.2. Prometheus架构

img

1.2.1. Prometheus Server

主要负责数据采集和存储,提供PromQL查询语言的支持。包含了三个组件:

  • Retrieval: 获取监控数据
  • TSDB: 时间序列数据库(Time Series Database),我们可以简单的理解为一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的。具备以下特点:
    • 大部分时间都是顺序写入操作,很少涉及修改数据
    • 删除操作都是删除一段时间的数据,而不涉及到删除无规律数据
    • 读操作一般都是升序或者降序
  • HTTP Server: 为告警和出图提供查询接口

1.2.2. 指标采集

  • Exporters: Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取
  • Pushgateway: 支持临时性Job主动推送指标的中间网关

1.2.3. 服务发现

  • Kubernetes_sd: 支持从Kubernetes中自动发现服务和采集信息。而Zabbix监控项原型就不适合Kubernets,因为随着Pod的重启或者升级,Pod的名称是会随机变化的。
  • file_sd: 通过配置文件来实现服务的自动发现

1.2.4. 告警管理

通过相关的告警配置,对触发阈值的告警通过页面展示、短信和邮件通知的方式告知运维人员。

1.2.5. 图形化展示

通过PromQL语句查询指标信息,并在页面展示。虽然Prometheus自带UI界面,但是大部分都是使用Grafana出图。另外第三方也可以通过 API 接口来获取监控指标。

2.Prometheus简单部署

2.1 部署和配置prometheus(在监控中心布置)

wget https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.linux-amd64.tar.gz
tar -xvf prometheus-2.36.1.linux-amd64.tar.gz 
mv prometheus-2.36.1.linux-amd64 prometheus
cd prometheus
  • 修改配置文件
vim 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:
          # - alertmanager: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:9090"]

  # node_exporter 监控数据采集 
  - job_name: 'node'
    static_configs:
      - targets:
          - "3090.inat.top:9100"
          - "v100.inat.top:9100"
          - "raspberry.inat.top:9100"
          - "agx.inat.top:9100"
          - "nx.inat.top:9100"
          - "nano.inat.top:9100"
  • 检查配置文件
./promtool check config prometheus.yml
  • 启动测试
./prometheus

image-20220614202403079

  • 配置开机自启动
sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=prometheus service
After=network.target

[Service]
ExecStart=/software/prometheus/prometheus --config.file=/software/prometheus/prometheus.yml 
Restart=always
RestartSec=20
TimeoutSec=300
User=root
Group=root
StandardOutput=journal
StandardError=journal
WorkingDirectory=/software/prometheus/

[Install]
WantedBy=default.target
sudo systemctl daemon-reload 
sudo systemctl start prometheus.service
sudo systemctl enable prometheus.service
sudo systemctl status prometheus.service

2.2 部署Node-Exporter(在被监控的机器上布置)

wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.0.1.linux-amd64.tar.gz 
mv node_exporter-1.0.1.linux-amd64 node_exporter
cd node_exporter
  • 创建monitor用户和组
sudo groupadd -g 9100 monitor
sudo useradd -g 9100 -u 9100 -s /sbin/nologin -M monitor
  • 修改对应文件夹的权限
sudo chown -R monitor.monitor /software/node_exporter
  • 启动测试
./node_exporter

image-20220614211603648

  • 配置开机自启动
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=node-exporter service
After=network.target

[Service]
User=monitor
Group=monitor
KillMode=control-group
Restart=on-failure
RestartSec=60
ExecStart=/software/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload 
sudo systemctl start node_exporter.service
sudo systemctl enable node_exporter.service
sudo systemctl status node_exporter.service

3.部署Grafana(在监控中心部署)

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.5.5_amd64.deb
sudo dpkg -i grafana-enterprise_8.5.5_amd64.deb
  • 设置开机自启动
 sudo /bin/systemctl daemon-reload
 sudo /bin/systemctl start grafana-server
 sudo /bin/systemctl enable grafana-server
 sudo /bin/systemctl status grafana-server
  • 访问测试(默认用户名和密码均为admin)

image-20220614215906387

image-20220614220056334

  • 添加数据源

image-20220614220234287

image-20220614220301664

image-20220614220332590

image-20220614220420201

  • 添加dashbord

image-20220614220558128

image-20220614220621866

image-20220614220701005

  • 查看dashbord

image-20220615145119923

image-20220615145141719

参考资料

  1. Prometheus看完这些,入门就够了
  2. Prometheus 重启失败的教训
  3. Prometheus(普罗米修斯)监控
  4. Prometheus(普罗米修斯)监控系统(一)
  5. https://grafana.com/grafana/download
  6. https://prometheus.io/download/
0

评论 (0)

打卡
取消