Prometheus

Prometheus

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,由 SoundCloud 公司开发。

Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 或者 Docker 。

Prometheus 应该是为数不多的适合 Docker、Mesos、Kubernetes 环境的监控系统之一。

Prometheus 优势

易于管理:
  • Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);
  • 唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
强大的查询语言 PromQL:
  • Prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合。
  • 同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警中。
高效:
  • 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效的处理这些数据。
可扩展:
  • Prometheus 支持联邦集群,可以让多个 Prometheus 实例产生一个逻辑集群;
  • 当单实例 Prometheus 处理的任务量过大时,通过使用功能分区(sharding)+ 联邦集群(federation)可以对其进行扩展。
易于集成:
  • 目前官网提供了多种语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。
可视化:
  • Prometheus Server 自带一个 UI,通过这个 UI 可以方便对数据进行查询和图形化展示;
  • 同时还可以对接 Grafana 可视化工具展示精美监控指标。

Prometheus 基础架构

在这里插入图片描述
如上图,Prometheus 主要由以下部分组成:

  • Prometheus:主要是负责存储、抓取、聚合、查询方面。
  • Alertemanager:主要是负责实现报警功能。
  • Pushgateway:主要是实现接收有 Client-push 过来的指标数据,在指定的时间间隔,有主程序来抓取。
  • *_exporter:主要是负责采集物理机、中间件的信息。
Prometheus 部署
主机名ip需要安装的软件
server192.168.58.121Prometheus
client192.168.58.30node_exporter

下载

[root@server ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz

解压并重命名

[root@server ~]# tar -xf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/
[root@server ~]# cd /usr/local/
[root@server local]# mv prometheus-2.31.1.linux-amd64/ prometheus

校验配置文件

[root@server local]# cd prometheus/
[root@server prometheus]# ./promtool check config ./prometheus.yml
Checking ./prometheus.yml
  SUCCESS: 0 rule files found

配置

配置共分为三部分,分别是全局配置、告警配置、收集数据配置

vim /usr/local/soft/prometheus/prometheus.yml
#全局配置
global:
  scrape_interval: 15s #每隔15秒向目标抓取一次数,默认为一分钟
  evaluation_interval: 15s #每隔15秒执行一次告警规则,默认为一分钟
  # scrape_timeout: 600s  #抓取数据的超时时间,默认为10s

#告警配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093	 #alertmanager所部署机器的ip和端口

#定义告警规则和阈值的yml文件
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#收集数据配置
#以下是Prometheus自身的一个配置.
scrape_configs:
  #这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:			#静态配置
      - targets: ["localhost:9090"]

配置service

[root@server ~]# cat > /usr/lib/systemd/system/prometheus.service <<EOF
[Unit]
Description=The Prometheus Server
After=network.target

[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
RestartSec=15s

[Install]
WantedBy=multi-user.target

EOF
[root@server node_exporter]# systemctl daemon-reload && systemctl enable node_exporter && systemctl restart node_exporter

启动参数介绍

##启动参数介绍
--config.file      	   #加载prometheus的配置文件
--web.listen-address   #监听prometheus的web地址和端口
--web.enable-lifecycle #热启动参数,可以在不中断服务的情况下重启加载配置文件
--storage.tsdb.retention   #数据持久化的时间                         
--storage.tsdb.path        #数据持久化的保存路径

访问网站
ip+端口号192.168.58.121:9090
在这里插入图片描述

重启并查看端口号

[root@server prometheus]# systemctl restart prometheus
[root@server prometheus]# ss -anlt
State         Recv-Q        Send-Q               Local Address:Port                Peer Address:Port         
LISTEN        1             128                        0.0.0.0:80                       0.0.0.0:*           
LISTEN        0             128                        0.0.0.0:22                       0.0.0.0:*           
LISTEN        0             128                              *:9090                           *:*           
LISTEN        0             128                           [::]:22                          [::]:*           

node_exporter部署

下载

[root@client ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.3.0/node_exporter-1.3.0.linux-amd64.tar.gz

解压并重命名

[root@client l~]# cd /usr/local 
[root@client local]# mv node_exporter-1.3.0.linux-amd64/ node_exporter
[root@client local]# ls
apache  apr  apr-util  bin  etc  games  include  lib  lib64  libexec  node_exporter  sbin  share  src

启动参数介绍

注意:相关启动的参数
--web.listen-address     #node_expoetrt暴露的端口
--collector.systemd	     #从systemd中收集
--collector.systemd.unit-whitelist   ##白名单,收集目标
		".+"         		      #从systemd中循环正则匹配单元
		"(docker|sshd|nginx).service"  #白名单,收集目标,收集参数node_systemd_unit_state

配置service文件

[root@client node_exporter]# vim /usr/lib/systemd/system/node_exporter.service
[unit]
Description=The node_exporter Server
After=network.target

[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
RestartSec=15s
SyslogIdentifier=node_exporter

[Install]
WantedBy=multi-user.target
[root@client node_exporter]# systemctl daemon-reload && systemctl enable node_exporter && systemctl restart node_exporter

访问网站
ip+端口号192.168.58.30:9100
在这里插入图片描述

重启并查看端口号

[root@client node_exporter]# ss -anlt
State         Recv-Q        Send-Q               Local Address:Port                Peer Address:Port        
LISTEN        0             128                        0.0.0.0:6379                     0.0.0.0:*           
LISTEN        0             128                        0.0.0.0:22                       0.0.0.0:*           
LISTEN        0             80                               *:3306                           *:*           
LISTEN        0             128                              *:9100                           *:*           
LISTEN        0             128                           [::]:22                          [::]:*           

在server主机修改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: ["192.168.58.30:9100"]      //此处指定客户端ip和端口

重启prometheus并查看端口号

[root@server prometheus]# systemctl restart prometheus
[root@server prometheus]# ss -anlt
State         Recv-Q        Send-Q               Local Address:Port                Peer Address:Port        
LISTEN        0             128                        0.0.0.0:22                       0.0.0.0:*           
LISTEN        0             128                              *:9090                           *:*           
LISTEN        0             128                           [::]:22                          [::]:*           

访问部署机的9090端口 /targets,查看到node(192.168.58.30)任务的状态是Up,证明Node_Exporter接收数据正常(http://192.168.58.121:9090/targets)
在这里插入图片描述

Graph使用
进入http://192.168.58.121:9090/网页操作如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值