云原生监控平台 Prometheus 的相关概念及部署

news/2024/5/18 23:41:00 标签: 云原生, prometheus

1 Prometheus简介

      Prometheus 是一个开源的系统监控和报警系统,在 2012 年由 SoundCloud 公司创建,并于 2015 年正式发布。2016 年,Prometheus 正式加入 CNCF (Cloud Native Computing Foundation),成为继kubernetes之后第二个在CNCF托管的项目, 现已广泛用于在容器和微服务领域中得到了广泛的应用,当然不仅限于此Prometheus 本身基于Go语言开发的一套开源的系统监控报警框架和时序列数据库(TSDB)。

Prometheus 的监控功能很完善和全面,性能也足够支撑上万台规模的集群。

网站:Prometheus - Monitoring system & time series database

github:https://github.com/prometheus

其特点主要如下:

  • 支持多维数据模型:由度量名和键值对组成的时间序列数据

  • 内置时间序列数据库TSDB(Time Series Database )

  • 支持PromQL(Prometheus Query Language)查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义

  • 支持HTTP的Pull方式采集时间序列数据

  • 支持PushGateway采集瞬时任务的数据

  • 支持服务发现和静态配置两种方式发现目标

  • 多种可视化和仪表盘,支持第三方 dashboard, 比如:Grafana

数据特点

  • 监控指标,采用独创的指标格式,我们称之为Prometheus格式,这个格式在监控场景中非常常见。

  • 数据标签,支持多维度标签,每个独立的标签组合都代表一个独立的时间序列

  • 数据处理,prometheus内部支持多种数据的聚合、切割、切片等功能。

  • 数据存储,prometheus支持双精度浮点型数据存储,缺点就是,不能存储文本,所以无法对日志的数据采集,只不过它有替代产品软件叫loki。

适用场景

        Prometheus非常适合记录任何纯数字时间序列。它既适合以机器为中心的监控场景,也适合于高度动态的面向服务的体系结构的监控场景。尤其是在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。

       Prometheus的设计旨在提高可靠性,使其成为中断期间要使用的系统,以使您能够快速诊断问题。Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分故障时,您可以依靠它,并且无需设置广泛的基础结构即可使用它。

       由于Prometheus重视可靠性。在故障情况下,我们可以查看有关系统的可用统计信息。但是如果您需要100%的准确性,则Prometheus并不是一个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视

2 Prometheus 架构

官方文档: Overview | Prometheus

     Prometheus 的主要模块包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及图形界面

主要组件:

  • prometheus :

    时序数据存储、监控指标管理

  • 可视化:

    prometheus web UI :集群状态管理、promQL

    grafana:非常全面的可视化套件

  • 数据采集

    exporter:为当前的客户端暴露出符合prometheus规格的数据指标

    pushgateway :拉模式下数据的采集工具

  • 监控目标

    服务发现 :文件方式、dns方式、console方式、k8s方式

  • 告警:

    alertmanager

3 Prometheus 数据模型

       Prometheus中存储的数据为时间序列,即基于同一度量标准或者同一时间维度的数据流。除了时间序列数据的正常存储之外,Prometheus还会基于原始数据临时生成新的时间序列数据,用于后续查询的依据或结果

每个时间序列都由metric名称和标签(可选键值对)组合成唯一标识  

3.1 metric 名字

  • 该名字必须有意义,用于表示 metric 的一般性功能,例如:http_requests_total, 表示 http 请求的总数

  • metric 名字由 ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式 [a-zA-Z]:[a-zAZ0-9_:]*的查询需求

  • 注意:冒号是为用户定义的记录规则保留的

3.2 标签

  • 标签是以键值对的样式而存在,不同的标签用于表示时间序列的不同维度标识

  • 基本格式:

<metric name>{<label name>=<label value>, …}
#示例样式:
http_requests_total{method="POST",endpoint="/api/tracks"}
解析: http_requests_total{method="POST"} 表示所有 http 请求中的 POST 请求,
endpoint="/api/tracks"表示请求的url地址是/api/tracks。
当 method="GET" 时,则为新的一个 metric
  • 标签中的键名由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z: [a-zA-Z0- 9:]*。以__头的标签名称保留供内部使用

  • 标签值可以包含任何Unicode字符,标签值为空的标签被认为等同于不存在的标签

查询语言允许基于这些维度进行过滤和聚合。更改任何标签值,包括添加或删除标签,都会创建一个新的时间序列

4 Prometheus 部署

4.1 常见部署方式

  • 包安装

    RHEL系统: prometheus-rpm/release - Results in prometheus-rpm/release

    Ubuntu和Debian可直接使用apt命令安装

  • 二进制安装 Download | Prometheus

  • 基于 docker 运行 Installation | Prometheus

  • 基于 kubernetes operator 安装 https://github.com/coreos/kube-prometheus

4.2 docker 镜像直接启动

#安装docker
[root@master1 ~]# yum install docker -y
[root@master1 ~]# systemctl enable --now docker

#将prometheus镜像包上传到linux系统中
#导入镜像
#docker load -i prometheus.tar

[root@master1 ~]# docker run -d --name prometheus -p 9090:9090 prom/prometheus

 浏览器访问:http://prometheus服务器:9090/

4.3 二进制安装 prometheus

4.3.1 下载二进制包并解压

官方下载: Download | Prometheus

[root@master1 ~]#wget https://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-amd64.tar.gz

[root@master1 ~]#ls -l prometheus-2.35.0.linux-amd64.tar.gz 
-rw-r--r-- 1 root root 80620181 Apr 21 10:07 prometheus-2.35.0.linux-amd64.tar.gz

[root@master1 ~]#tar xf prometheus-2.35.0.linux-amd64.tar.gz 

[root@master1 ~]#ln -s /root/prometheus-2.35.0.linux-amd64 /usr/local/prometheus

[root@master1 ~]#cd /usr/local/prometheus

[root@master1 /usr/local/prometheus]#ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

[root@master1 /usr/local/prometheus]#mkdir bin conf data

[root@master1 /usr/local/prometheus]#mv prometheus promtool bin/

[root@master1 /usr/local/prometheus]#mv prometheus.yml conf/

[root@master1 /usr/local/prometheus]#useradd -r -s /sbin/nologin prometheus

[root@master1 /usr/local/prometheus]#chown -R prometheus.prometheus /usr/local/prometheus/

[root@master1 /usr/local/prometheus]#cd

[root@master1 ~]#vim /etc/profile.d/prometheus.sh
export PROMETHEUS_HOME=/usr/local/prometheus
export PATH=${PROMETHEUS_HOME}/bin:$PATH

[root@master1 ~]#source /etc/profile.d/prometheus.sh

#查看配置文件,默认可不修改
[root@master1 ~]#grep -Ev "^ *#|^$" /usr/local/prometheus/conf/prometheus.yml
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.
alerting:
  alertmanagers:
    - static_configs:
        - targets:
rule_files:
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
     
#属性解析:主要是global和 scrape_configs 两部分的配置,在这里目前我们保持默认即可

#检查配置文件是否正确
[root@master1 ~]#promtool check config /usr/local/prometheus/conf/prometheus.yml
Checking /usr/local/prometheus/conf/prometheus.yml
 SUCCESS: /usr/local/prometheus/conf/prometheus.yml is valid prometheus config file syntax

4.3.2 创建service文件

[root@master1 ~]#vim /lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Restart=on-failure
User=root
WorkingDirectory=/usr/local/prometheus/
ExecStart=/usr/local/prometheus/bin/prometheus --config.file=/usr/local/prometheus/conf/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target

#配置解析:
#我们需要将定制的prometheus的配置文件和数据目录作为启动参数配置好
#其它的参数,可以基于prometheus --help 查看更多

[root@master1 ~]#systemctl daemon-reload

[root@master1 ~]#systemctl restart prometheus

[root@master1 ~]#systemctl status prometheus

[root@master1 ~]#ss -tnlp |grep prometheus
LISTEN 0      4096               *:9090            *:*    users:(("prometheus",pid=6488,fd=8))

#结果显示:可以看到当前主机上可以看到一个端口9090,可通过下面地址看到prometheus的服务页面

4.3.3 测试访问

浏览器访问: http://192.168.3.21:9090/


http://www.niftyadmin.cn/n/457463.html

相关文章

Android中加载一个大图,如何正常显示且不发生OOM ?

问题 在Android中&#xff0c;获取一个1000*20000(宽1000px&#xff0c;高20000px)的大图&#xff0c;如何正常加载显示且不发生OOM呢? 分析 Android系统会为应用分配一定大小的堆内存&#xff0c;而如果遇到高分辨率图片时&#xff0c;如果它的配置为ARGB(每个像素占4Byte…

规则引擎--QLExpress: 数据和操作符的抽象

继续回顾QLExpress&#xff0c;深入了解里面的一些设计。 操作数据的抽象 /*** 数据类型定义** author qhlhl2010gmail.com*/ public class OperateData {protected Object dataObject;protected Class<?> type;public OperateData(Object obj, Class<?> type)…

【初识C语言】字符串+转义字符+注释

文章目录 1. 字符串2. 转义字符转义字符表常见转义字符 3. 注释 1. 字符串 “hello world.\n” 上面这种由双引号引起的一串字符就被称为字符串&#xff1b; 字符串的存储 C 语言当中没有字符串类型&#xff0c;如果想要将字符串存储起来的话就需要用到字符串数组。 #include…

HTML5 的新特性

目录 1.0 HTML5 的新特性 1.1 HTML5 新增的语义化标签 1.2 HTML5 新增的多媒体标签 video视频 audio音频 1.2.1 video视频 1.2.2 audio音频 1.3 多媒体标签总结 2.0 HTML5 新增的input 类型 3.0 HTML5 新增的表单属性 1.0 HTML5 的新特性 HTML5的新增特性主要是针对于以前的不…

机器学习期末复习 集成学习

1.集成学习的一般结构&#xff1f; &#xff08;1&#xff09;产生一组个体学习器 &#xff08;2&#xff09;用某些策略将个体学习器结合 2.&#xff08;判断&#xff09;集成学习主要分为并行算法和串行算法。其中随机森林属于串行算法&#xff0c;即每一颗树的学习受其他树…

js blob 文件上传

js blob 文件上传 js中的文件处理和文件上传掌握得更扎实&#xff0c;有更深入的理解&#xff0c;底层原理 ps.项目中使用插件上传 filereadermime类型筛选单文件的2种处理方案多文件&文件上传进度管控 Ajax文件上传时&#xff1a;Formdata、File、Blob的关系-腾讯云开发者…

大数据就业路线

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 数仓&#x…