Prometheus

Promethues:普罗米修斯的概念

Promethues是一个开源的系统监控以及报警系统,整合zabbix的功能系统,网络,设备

Promethues可以兼容网络,设备,容器监控,告警系统,因为它和k8s是一个项目基金开发的产品,天生匹配k8s的原生系统,容器化和云原生服务适配性很高

Prometheus是一个服务监控系统和时序数据库,提供了通用的数据模型和快捷数据采集,存储和接口查询

核心组件:prometheus server定期从静态配置的监控目标或者服务发现的自动配目标中进行拉取数据,拉取到的数据会持久化的保存到存储设备之中

先拉去数据,纳入到监控系统当中,才能进行时序数据采集,存储,告警和展示,能够直接把api server作为服务发现系统使用,动态监控,动态发现

Promethues的特点

1

多维的数据模型,根据不同的函数计算法,对同一数据可以做出不同的结论,promQL是难点

2

它是一个时间序列的数据,按照时间的顺序记录系统,设备变化的数据,容器化的数据,每个数据都是一个样本,如服务器指标数据,应用程序的性能监控,网络数据都是时间序列数据

3

通过静态,也可以通过服务自动发现收集数据

4

Promethues自带的原生数据展示不是很友好,有数据化展示工具,grafana

Prometheus的存储引擎:TSDB

                                          为什么要使用TSDB

1

能存储的数据量很庞大

2

大部分的都是写入操作

3

写入操作是一个时序添加,大多数情况下都是按照时间排序

4

一般不更新数据,很少更新数据,采集到的数据在秒级或者分钟级后就会被写入数据库

5

基本数据大,一般超过了内存的大小,数据按照一定的时间区间展示,缓存在这里不起作用

6

高并发读操作,一般都是高并发的操作

7

就是为了大数据,高并发而生的

Prometheus的组件

由核心组件和可选组件组成

核心组件:服务核心组件,采用pull方式采集监控数据,通过http协议进行传输,存储时间序列的数据,基于告警规则生成告警通知

Prometheus server

核心组件,核心分为三部分

1.retrieval:负责在目标主机抓取监控数据指标数据

2.Storage:存储,把采集到的数据保存到磁盘当中,默认保存15天,超过后将被清除

3.romQL:负责把数据按照一定的规则,通过指定的语法形成一个结果,最后展示出来(grafana)

Retrieval

怎么收集数据,通过exports负责再借点收集数据,Node-Exports服务负责收集服务器节点的状态数据,cpu,内存,网络,磁盘等等都是他收集,默认端口9100,核心组件之一

client library

客户端库,用于应用程序的内部测量系统,内部测试

cadvisor

监控容器内部的资源信息,这是一个可选组件,但是从k8s从1.20之后自带这个部分组件,也是核心组件之一

blackbox-exporter

用来监控业务容器的存活性(一般不用)

Altermanager

独立的告警模块,从prometheus server 收到告警通知之后,Altermanager进行重组分类,发送到对应的接收方,一般是电子邮件,钉钉,企业微信

pushgateway

类似于一个中转站,server端只会pull的方式拉去数据,节点的数据只能以上传(push)的方式发送,先把数据源保存在pushgatway,prometheus server统一从pushgatway拉取数据

grafana

图像化工具功能

Prometheus的工作流程

1

prometheus server为核心,收集和存储数据(时间序列数据),从监控目标中通过pull方式拉取数据,或者通过pushgatway把采集到的数据拉取到server当中

2

拉取到的数据,保存到本地的磁盘当中(一般是监控指标数据)

3

如果监控的指标数据出发了告警,就发送到独立模块altermanager模块,然后根据规则发送告警信息

4

通过prometheus的自带ui的问页面,通过promql可以查询监控用户数据

5

Grafana可以接入prometheus数据源,把监控数据以图形化的方式展示出来

工作流程图

Prometheus_第1张图片

Prometheus的局限性,以及和zabbix的对比(区别)

局限性

1

普罗米修斯的局限性:它只是一款指标监控系统,不适合存储时间,也不适合保存日志,更多的是一种趋势性的监控和展示,并非是一个精准的数据

2

认为最近的数据才有查询的必要和需要,保存在本地的数据默认只有15天,不支持大量的历史数据进行存储,也不支持查询过往的历史数据,基于远端存储,上传到了influxDB或者openTSDB系统

3

集群化程度不好,一般都是单节点部署

prometheus和zabbix的对比

Zabbix

大而全系统,功能非常完善,机制非常成熟,具有完善的web页面,可视化和告警,在界面上可以完成绝大部分的操作,上手的难度很低,可以快速掌握,集成度太高,定制化比较难,扩展也比较差

Prometheus

最近几年比较火的监控系统,基于go语言开发的,只是专注于监控的功能,提供一个简单的ui界面供用户查询

可视化---grafana,告警---Altermanager,第三方程序来实现,比较小巧灵活,但是门槛高

二者之间

功能的比较

Zabbix:指标收集方式:server和angent,agent部署在目标服务器,数据传送到server,基于tcp协议通信

Agent把数据推送到server,或者server主动发起请求,获取agent的数据

Prometheus:基于客户端进行数据收集,server端定时于客户端交互,通过pull方式获取监控数据

数据存储

Zabbix事宜挖补的数据来保存数据(mardb)

prometheus存储在内置的TSDB当中,时间序列数据库

查询性能

1.zabbix的查询性能较弱,只能在web界面做一些有限的操作

2.Prometheus的查询功能强大,自带查询语句,查询结果都是以图形,表格数据展示

Zabbix更成熟,上手难度低,对于传统的服务器系统和网络都有优秀的监控能力,不适配云原生,不适配容器健康

Prometheus,就是容器化监控,支持k8s的监控功能,难,不好学PROMQL

二进制部署 

[root@master01 ~]# cd /opt
把包丢进去
[root@master01 opt]# tar -xf prometheus-2.45.0.linux-amd64.tar.gz
[root@master01 opt]# mv prometheus-2.45.0.linux-amd64 prometheus
[root@master01 opt]# ls
prometheus  prometheus-2.45.0.linux-amd64.tar.gz
[root@master01 opt]# cd prometheus/
[root@master01 prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
[root@master01 prometheus]# cat prometheus.yml | grep -v "^#"

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).

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: "prometheus"

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

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

#scrape_interval: 15s 表示采集数据的间隔时间默认是15秒
#evaluation_interval: 15s 表示告警的讲个时间,默认也是1分钟 15秒
#scrape_timeout 数据采集的超时时间,默认是10s
#alerting:告警的实例配置
#rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml" 配置告警的规则
#scrape_configs:参数时序数据的源,配置采集的主机,静态,动态
#- job_name: "prometheus"表示每一个监控的实例都是以-job_name来表示整体的集合
#metrics_path defaults to '/metrics'指标采集的默认路径
#static——configs:静态配置发现实例(目标节点服务器)
[root@master01 prometheus]# cat > /usr/lib/systemd/system/prometheus.service <<'EOF'

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
 
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
  
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF

[root@master01 prometheus]# systemctl daemon-reload
[root@master01 prometheus]# systemctl restart prometheus.service
[root@master01 prometheus]# netstat -antp | grep prometheus
tcp6       0      0 :::9090                 :::*                    LISTEN      70934/prometheus
[root@master01 prometheus]# netstat -antp | grep 9090

访问 192.168.233.81:9090,如果出现Warning: Error...表示时间没有同步,在所有节点进行时间同步
[root@master01 prometheus]# yum -y install ntpdate
[root@master01 prometheus]# ntpdate ntp.aliyun.com
[root@master01 prometheus]# date
#查看prometheus的数据采集信息http://192.168.233.81:9090/metrics
[root@master01 prometheus]# cd /opt
#在所有node节点部署
[root@master01 opt]# tar -xf node_exporter-1.5.0.linux-amd64.tar.gz
[root@master01 opt]# mv node_exporter-1.5.0.linux-amd64 node_exporter-1.5.0
[root@master01 opt]# cd node_exporter-1.5.0/
[root@master01 node_exporter-1.5.0]# ls
LICENSE  node_exporter  NOTICE
[root@master01 node_exporter-1.5.0]# mv 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.tcpstat
 
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF

[root@master01 node_exporter-1.5.0]# systemctl start node_exporter
[root@master01 node_exporter-1.5.0]# systemctl enable node_exporter
Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /usr/lib/systemd/system/node_exporter.service.
[root@master01 node_exporter-1.5.0]# netstat -natp | grep :9100
tcp6       0      0 :::9100:::*   LISTEN  79784/node_exporter

vim /opt/prometheus/prometheus.yml
修改 prometheus 配置文件,加入到 prometheus 监控中

  - job_name: nodes
    metrics_path: "/metrics"
    static_configs:
    - targets:
	  - 192.168.233.81:9100
	  - 192.168.233.82:9100
	  - 192.168.233.83:9100
      labels:
        service: kubernetes
#在尾部增加
[root@master01 node_exporter-1.5.0]# curl -X POST http://192.168.233.81:9090/-/reload 或 systemctl reload prometheus


部署Grafana

[root@master01 node_exporter-1.5.0]# cd /opt
[root@master01 opt]# rpm -ivh grafana-enterprise-7.5.11-1.x86_64.rpm
[root@master01 opt]# systemctl start grafana-server
[root@master01 opt]# systemctl enable grafana-server
[root@master01 opt]# netstat -natp | grep 3000
访问  http://192.168.233.81:3000/
默认账号和密码为 admin/admin

prometheus

Prometheus_第2张图片

grafana

Prometheus_第3张图片

Prometheus_第4张图片

Prometheus_第5张图片 

Prometheus_第6张图片 Prometheus_第7张图片

Prometheus_第8张图片 

 

你可能感兴趣的:(prometheus)