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

1 Prometheus简介

云原生监控平台 Prometheus 的相关概念及部署_第1张图片

      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 的相关概念及部署_第2张图片

数据特点

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

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

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

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

适用场景

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

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

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

2 Prometheus 架构

官方文档: Overview | Prometheus

云原生监控平台 Prometheus 的相关概念及部署_第3张图片

     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_:]*的查询需求

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

云原生监控平台 Prometheus 的相关概念及部署_第4张图片

3.2 标签

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

  • 基本格式:

{
  • 标签中的键名由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z: [a-zA-Z0- 9:]*。以__头的标签名称保留供内部使用

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

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

云原生监控平台 Prometheus 的相关概念及部署_第5张图片

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/

云原生监控平台 Prometheus 的相关概念及部署_第6张图片

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/

云原生监控平台 Prometheus 的相关概念及部署_第7张图片

你可能感兴趣的:(云原生,prometheus)