Prometheus

Prometheus

Prometheus 是一个开源的监控和警报系统,主要用于收集和查询时序数据。其架构设计旨在高效地处理大规模的数据,并提供灵活的查询和可视化功能。以下是 Prometheus 的详细架构描述:

  1. Prometheus 服务器
  • 数据收集:Prometheus 服务器负责定期从配置好的目标(Targets)中抓取(Scrape)监控数据。目标是被监控的应用或服务,通常通过 HTTP 端点暴露时间序列数据。
  • 数据存储:Prometheus 服务器内置了一个高效的时序数据库(Time Series Database, TSDB),用于存储抓取的数据。数据按时间序列存储,并采用了时间分片的方式来优化存储和查询性能。
  • 查询引擎:Prometheus 提供了一个强大的查询语言,PromQL(Prometheus Query Language),用于执行复杂的查询、聚合和数据分析操作。
  • 报警管理:Prometheus 内置报警功能,通过定义规则和阈值生成报警。报警信息可以发送到外部报警管理系统(如 Alertmanager)进行处理。
  1. 数据抓取(Scraping)
  • 目标配置:Prometheus 通过配置文件(prometheus.yml)指定需要抓取的目标。目标可以是静态的或通过服务发现(Service Discovery)动态发现的。
  • Exporters:被监控的服务通过 Exporter 将其内部状态暴露为 Prometheus 能够理解的格式。例如,node_exporter 用于暴露系统级指标,blackbox_exporter 用于检测外部服务的可用性。
  1. 数据存储
  • 时序数据库:Prometheus 使用自己的时序数据库来存储数据。它采用了高效的压缩算法,并且支持数据的增量存储和查询。
  • 数据分片:数据按时间分片存储,使得历史数据的查询和存储变得更加高效。
  1. 查询和可视化
  • PromQL:Prometheus 提供了一种功能强大的查询语言,允许用户从存储的数据中提取和聚合信息。
  • Prometheus UI:内置的 Web UI 允许用户执行 PromQL 查询、查看时间序列数据以及管理报警规则。
  • Grafana:Prometheus 常与 Grafana 结合使用,Grafana 提供了强大的可视化功能,可以创建丰富的仪表板以展示 Prometheus 收集的数据。
  1. 报警管理
  • Alertmanager:Prometheus 的报警功能通过 Alertmanager 进行管理。Alertmanager 处理来自 Prometheus 的报警,并可以将其路由到不同的接收器(如邮件、Slack、PagerDuty)进行通知。
  1. 服务发现
  • 静态配置:可以在 Prometheus 配置文件中静态配置目标。
  • 动态服务发现:Prometheus 支持多种服务发现机制(如 Kubernetes、Consul、AWS),可以自动发现和更新监控目标。
  1. 集成和扩展
  • Exporters:用于将各种应用的指标暴露给 Prometheus。Exporters 可以是官方维护的,也可以是社区提供的。
  • Pushgateway:用于推送短期或批处理作业的指标。由于 Prometheus 主要是拉取模式,Pushgateway 提供了一个将指标推送到 Prometheus 的方式,适用于临时或一次性作业。
  • Pushgateway:用于推送短期或批处理作业的指标。由于 Prometheus 主要是拉取模式,Pushgateway 提供了一个将指标推送到 Prometheus 的方式,适用于临时或一次性作业。
  1. 高可用性
  • 多实例部署:Prometheus 可以通过多个实例来实现高可用性。这些实例可以配置为互相独立运行,并将数据存储在不同的地方。
  • 数据复制:虽然 Prometheus 本身不提供内置的数据复制机制,但可以通过外部工具(如 Thanos、Cortex)来实现数据的跨集群存储和查询功能。
  1. 安全性
  • 身份验证和授权:Prometheus 本身没有内置身份验证和授权机制,通常通过反向代理(如 Nginx、Traefik)来实现。
  • 加密:Prometheus 支持通过 HTTPS 加密数据传输,但需要外部配置和设置。
  1. 存储管理
  • 数据保留策略:Prometheus 允许配置数据保留时间,控制数据的存储周期。可以通过配置文件中的 storage.tsdb.retention.time 设置。

通过这些组件和功能,Prometheus 提供了一个全面的监控解决方案,适用于多种规模和复杂度的系统。

监控类型主要分为黑盒监控和白盒监控两种:

  1. 黑盒监控:关注系统的外部行为和输出,通常不深入了解内部实现。比如,网站的用户体验监控,通过模拟用户操作来测试网站性能和响应。
  2. 白盒监控:深入了解系统内部状态和实现,通过代码级别的分析来监控。比如,应用程序的性能监控,通过跟踪代码执行来检测瓶颈。

prometheus安装部署

方式一

apt install  prometheus  -y

方式二

docker-compouse

方式三

二进制安装

tar -zxvf prometheus-2.53.2.linux-amd64.tar.gz  -C /usr/local/bin

ln -sv /usr/local/bin/prometheus-2.53.2.linux-amd64/  /usr/local/bin/prometheus

./promtool check config prometheus.yml
cat >/etc/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/usr/local/bin/prometheus
ExecStart=/usr/local/bin/prometheus/prometheus --config.file=/usr/local/bin/prometheus/prometheus.yml --web.enable-lifecycle

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload 
systemctl enable --now prometheus.service

部署Node-exporter

tar -zxvf node exporter-1.8.2.linux-amd64.tar.gz
ln -sv /usr/local/bin/node exporter-1.8.2.linux-amd64 /usr/local/bin/node_exportercd /usr/local/bin/node_exporter
cat >/etc/systemd/system/node-exporter.service<<E0F
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
ExecStart=/usr/local/bin/node exporter/node exporter
[Install]WantedBy=multi-user.targetEOF
systemctldaemon-reload
systemctl start node-exporter.service
systemctl enable node-exporter.service

#配置prometheus-server节点
vim /usr/local/bin/prometheus/prometheus.yml
# k8s
  - job name:"K8S-nodes"
    static configs:
      -targets:['192.168.240.11:9100','192.168.240.12:9100','192.168.240.13:9100'
systemctl restart prometheus.service

部署Grafana可视化

Grafana :可视化组件,用于接受客户端的请求,到Prometheus服务端获取查询数据,经过自身渲染,再浏览器端显示给终端客户

apt update
apt-get install -y adduser libfontconfig1 musldpkg -i grafana-enterprise 11.1.4 amd64.deb
cat >/etc/grafana/grafana.ini<<E0F
[server]
# Protocol(http,https,socket)
protocol =http# The ip address to bind to, empty will bind to all interfaceshttp addr =0.0.0.0
# The http port to use
http port = 3000
EOF
systemctl restart grafana-server.service
systemctlenable grafana-server.service
systemctl status grafana-server.service
## 寻找模板
https://grafana.com/grafana/dashboards

示例

cat <<EOF>cadvisor-ds.yaml
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cadvisor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: cAdvisor
  template:
    metadata:
      labels:
        app: cAdvisor
    spec:
      tolerations:  
        - effect: NoSchedule
          key: node-role.kubernetes.io/master
      hostNetwork: true
      restartPolicy: Always 
      containers:
      - name: cadvisor
        image: harbor.hiuiu.com/prometheus/cadvisor:v0.47.2
        imagePullPolicy: IfNotPresent  
        ports:
        - containerPort: 8080
        volumeMounts:
          - name: root
            mountPath: /rootfs
          - name: run
            mountPath: /var/run
          - name: sys
            mountPath: /sys
          - name: docker
            mountPath: /var/lib/containerd
      volumes:
      - name: root
        hostPath:
          path: /
      - name: run
        hostPath:
          path: /var/run
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/containerd
---
EOF
kubectl create ns monitoring
kubectl apply -f cadvisor-ds.yaml
kubectl get pod -n monitoring
vim /usr/local/bin/prometheus/prometheus.yml
  - job_name: "container"
    static_configs:
      - targets: ['192.168.240.12:8080','192.168.240.13:8080']
systemctl restart prometheus
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值