Prometheus概述以及安装(上)

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: Prometheus概述以及安装(上)

一、普罗米修斯简介


(1)Prometheus简介


prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundcloud以开源形式进行研发,并且与2015年早起对外发布早期版本。 2016年5月继kubernetes之后成为第二个加入CNCF基金会的项目,童年6月正式发布1.0版本。2017年底发布基于全兴存储层的2.0版本,能更好地与容器平台、云平台配合。


a421873b19a84dc8bae57e8f14fdb756.png


(2)prometheus的优势


prometheus是基于一个开源的完整监控方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。 相对传统的监控系统有如下几个优点。


  • 易于管理: 部署使用的是go编译的二进制文件,不存在任何第三方依赖问题,可以使用服务发现动态管理监控目标。
  • 监控服务内部运行状态: 我们可以使用prometheus提供的常用开发语言提供的client库完成应用层面暴露数据, 采集应用内部运行信息。
  • 强大的查询语言promQL: prometheus内置一个强大的数据查询语言PromQL,通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如grafana)以及告警中的。
  • 高效: 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。 而Prometheus可以高效地处理这些数据。
  • 可扩展: prometheus配置比较简单, 可以在每个数据中心运行独立的prometheus server, 也可以使用联邦集群,让多个prometheus实例产生一个逻辑集群,还可以在单个prometheus server处理的任务量过大的时候,通过使用功能分区和联邦集群对其扩展。
  • 易于集成: 目前官方提供多种语言的客户端sdk,基于这些sdk可以快速让应用程序纳入到监控系统中,同时还可以支持与其他的监控系统集成。
  • 可视化: prometheus server自带一个ui, 通过这个ui可以方便对数据进行查询和图形化展示,可以对接grafana可视化工具展示精美监控指标。


(3)Prometheus基础架构


76749cc7c40b403a869fa8e0cd6deb07.png


  • prometheus Server负责从pushgateway和jobs(Exporters)中采集数据, 存储到后端Storatge中,可以通过PromQL进行查询, 推送alerts信息到AlertManager。 AlertManager根据不同的路由规则进行报警通知。


(4)核心组件


-Prometheus


  • Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。


Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。


  • Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。但是这个UI还需要通过PromQL去查询数据,所以一般可以配合Grafana来使用


-exporters


exporter简单说是采集端,通过http服务的形式保留一个url地址,prometheus server 通过访问该exporter提供的endpoint端点,即可获取到需要采集的监控数据。exporter采集分为2大类。


直接采集:这一类exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes等。


间接采集: 原有监控目标不支持prometheus,需要通过prometheus提供的客户端库编写监控采集程序,例如Mysql Exporter, JMX Exporter等。


-AlertManager


  • 在prometheus中,支持基于PromQL创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入AlertManager进行处理。可以集成邮件,Slack或者通过webhook自定义报警。


-PushGateway


由于Prometheus数据采集采用pull方式进行设置的, 内置必须保证prometheus server 和对应的exporter必须通信,当网络情况无法直接满足时,可以使用pushgateway来进行中转,可以通过pushgateway将内部网络数据主动push到gateway里面去,而prometheus采用pull方式拉取pushgateway中数据。


(5)应用场景


-适合场景


普罗米修斯可以很好地记录任何纯数字时间序列。它既适合以机器为中心的监视,也适合高度动态的面向服务的体系结构的监视。


在微服务的世界中,它对多维数据收集和查询的支持是一个特别的优势。普罗米修斯是为可靠性而设计的,它是您在停机期间使用的系统,允许您快速诊断问题。每台普罗米修斯服务器都是独立的,不依赖于网络存储或其他远程服务。


当您的基础设施的其他部分被破坏时,您可以依赖它,并且您不需要设置广泛的基础设施来使用它。


-不适合场景


  • 普罗米修斯值的可靠性。您总是可以查看有关系统的统计信息,即使在出现故障的情况下也是如此。
  • 如果您需要100%的准确性,例如按请求计费,普罗米修斯不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析用于计费的数据,并使用Prometheus来完成剩下的监视工作。


二、部署普罗米修斯


(1)实验环境



系统 主机名 ip 实验软件
Centos7.4 prometheus 192.168.100.202 桥接网卡 prometheus-2.16.0.linux-amd64.tar.gz influxdb-1.7.8.x86_64.rpm



(2)实验步骤


-安装普罗米修斯


******(1)做基础配置
[root@Centos7 ~]# hostnamectl set-hostname prometheus
[root@Centos7 ~]# su
[root@prometheus ~]# systemctl stop firewalld
[root@prometheus ~]# setenforce 0
setenforce: SELinux is disabled
[root@prometheus ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
[root@prometheus ~]# yum -y install ntpdate  #在做监控之前必须要先进行时间同步
。。。。。。
完毕!
[root@prometheus ~]# ntpdate ntp1.aliyun.com
10 Jul 17:00:15 ntpdate[1154]: adjust time server 120.25.115.20 offset 0.006842 sec
******(2)上传软件包进行安装
[root@prometheus ~]# ll
总用量 58216
-rw-------. 1 root root     1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 59608515 7月  10 17:01 prometheus-2.16.0.linux-amd64.tar.gz
[root@prometheus ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz 
[root@prometheus ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
[root@prometheus ~]# cd /usr/local/prometheus/
[root@prometheus prometheus]# ./prometheus   #开启普罗米修斯
level=info ts=2021-07-10T09:02:33.312Z caller=main.go:295 msg="no time or size retention was set so using the default time retention" duration=15d
level=info ts=2021-07-10T09:02:33.312Z caller=main.go:331 msg="Starting Prometheus" version="(version=2.16.0, branch=HEAD, revision=b90be6f32a33c03163d700e1452b54454ddce0ec)"
level=info ts=2021-07-10T09:02:33.312Z caller=main.go:332 build_context="(go=go1.13.8, user=root@7ea0ae865f12, date=20200213-23:50:02)"
level=info ts=2021-07-10T09:02:33.312Z caller=main.go:333 host_details="(Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 prometheus (none))"
level=info ts=2021-07-10T09:02:33.313Z caller=main.go:334 fd_limits="(soft=1024, hard=4096)"
level=info ts=2021-07-10T09:02:33.313Z caller=main.go:335 vm_limits="(soft=unlimited, hard=unlimited)"
level=info ts=2021-07-10T09:02:33.314Z caller=main.go:661 msg="Starting TSDB ..."
level=info ts=2021-07-10T09:02:33.329Z caller=web.go:508 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2021-07-10T09:02:33.329Z caller=head.go:577 component=tsdb msg="replaying WAL, this may take awhile"
level=info ts=2021-07-10T09:02:33.341Z caller=head.go:625 component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
level=info ts=2021-07-10T09:02:33.342Z caller=main.go:676 fs_type=XFS_SUPER_MAGIC
level=info ts=2021-07-10T09:02:33.342Z caller=main.go:677 msg="TSDB started"
level=info ts=2021-07-10T09:02:33.342Z caller=main.go:747 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2021-07-10T09:02:38.796Z caller=main.go:775 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2021-07-10T09:02:38.796Z caller=main.go:630 msg="Server is ready to receive web requests."
#使用./prometheus --help可以获取帮助信息


  • 测试访问


image.png



******(3)编写启动脚本,因为按照上面那样启动是在前端启动的
#使用Ctrl+C退出
#Promtheus作为一个时间序列数据库,其采集的数据会以文件的形似存储在本地中,默认的存储路径为data/,因此我们需要先手动创建该目录:
[root@prometheus prometheus]# mkdir data
[root@prometheus prometheus]# ll
总用量 140984
drwxr-xr-x 2 3434 3434       38 2月  14 2020 console_libraries
drwxr-xr-x 2 3434 3434      173 2月  14 2020 consoles
drwxr-xr-x 3 root root       51 7月  10 17:02 data
-rw-r--r-- 1 3434 3434    11357 2月  14 2020 LICENSE
-rw-r--r-- 1 3434 3434     3184 2月  14 2020 NOTICE
-rwxr-xr-x 1 3434 3434 82329106 2月  14 2020 prometheus
-rw-r--r-- 1 3434 3434      926 2月  14 2020 prometheus.yml
-rwxr-xr-x 1 3434 3434 48417809 2月  14 2020 promtool
-rwxr-xr-x 1 3434 3434 13595766 2月  14 2020 tsdb
[root@prometheus prometheus]# useradd -s /sbin/nologin prometheus
[root@prometheus prometheus]# chown -R prometheus:prometheus /usr/local/prometheus/
[root@prometheus prometheus]# cd /usr/lib/systemd/system
[root@prometheus system]# vim prometheus.service
[Unit]
Description=prometheus
After=network.target 
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target
#保存退出
[root@prometheus system]# systemctl restart prometheus   #重新启动普罗米修斯
[root@prometheus system]# systemctl enable prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
[root@prometheus system]# netstat -anpt | grep 9090  #检查监听端口
tcp        0      0 127.0.0.1:50068         127.0.0.1:9090          ESTABLISHED 1226/prometheus     
tcp6       0      0 :::9090                 :::*                    LISTEN      1226/prometheus     
tcp6       0      0 ::1:57674               ::1:9090                ESTABLISHED 1226/prometheus     
tcp6       0      0 ::1:9090                ::1:57674               ESTABLISHED 1226/prometheus     
tcp6       0      0 127.0.0.1:9090          127.0.0.1:50068         ESTABLISHED 1226/prometheus    


-安装influxdb数据库


数据库下载地址(同时也是官网文档):https://docs.influxdata.com/influxdb/v1.7/introduction/downloading/


******(1)上传软件包进行安装
#默认情况下prometheus会将采集的数据存储到本机的data目录, 存储数据的大小受限和扩展不便,所以可以使用influxdb数据库作为后端的数据库来存储数据。
[root@prometheus system]# cd 
[root@prometheus ~]# ll
总用量 108032
-rw-------. 1 root root     1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 51010897 7月  10 17:11 influxdb-1.7.8.x86_64.rpm
-rw-r--r--  1 root root 59608515 7月  10 17:01 prometheus-2.16.0.linux-amd64.tar.gz
[root@prometheus ~]# yum -y install influxdb-1.7.8.x86_64.rpm  #安装influxdb数据库
。。。。。。
完毕!
******(2)备份默认的配置文件,并且启动数据库
[root@prometheus ~]# cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
[root@prometheus ~]# systemctl start influxdb
[root@prometheus ~]# systemctl enable influxdb
[root@prometheus ~]# influx   #输入influx可以进入数据库就说明安装成功
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show databases;
name: databases
name
----
_internal
> create database prometheus ;    #创建普罗米修斯的数据库
> show databases;
name: databases
name
----
_internal
prometheus
> exit
******(3)配置普罗米修斯集成influxdb数据库
#官方的帮助文档:https://docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus/
[root@prometheus ~]# cd /usr/local/prometheus/
[root@prometheus prometheus]# cp prometheus.yml prometheus.yml.defalut
[root@prometheus prometheus]# vim prometheus.yml
。。。。。。#在末尾直接添加
remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus"  #这是influxdb数据库的api接口
remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
#保存退出
————————————————————————————————————————————————————————————————
#如果influxdb有密码的配置:
remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus&u=username&p=password"
remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus&u=username&p=password"
————————————————————————————————————————————————————————————————
[root@prometheus prometheus]# systemctl restart prometheus  #重启服务
[root@prometheus prometheus]# systemctl status prometheus   #查看服务状态
● prometheus.service - prometheus
   Loaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled)
   Active: active (running) since 六 2021-07-10 17:17:40 CST; 8s ago
 Main PID: 1351 (prometheus)
   CGroup: /system.slice/prometheus.service
           └─1351 /usr/local/prometheus/prometheus
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.056Z caller=head.go:577 component=tsdb msg="rep...awhile"
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.058Z caller=web.go:508 component=web msg="Start....0:9090
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.060Z caller=head.go:625 component=tsdb msg="WAL...gment=2
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.062Z caller=head.go:625 component=tsdb msg="WAL...gment=2
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.063Z caller=head.go:625 component=tsdb msg="WAL...gment=2
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.063Z caller=main.go:676 fs_type=XFS_SUPER_MAGIC
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.063Z caller=main.go:677 msg="TSDB started"
7月 10 17:17:41 prometheus prometheus[1351]: level=info ts=2021-07-10T09:17:41.063Z caller=main.go:747 msg="Loading configurat...eus.yml
7月 10 17:17:41 prometheus prometheus[1351]: ts=2021-07-10T09:17:41.064Z caller=dedupe.go:112 component=remote level=info remo...=0283ed
7月 10 17:17:41 prometheus prometheus[1351]: ts=2021-07-10T09:17:41.065Z caller=dedupe.go:112 component=remote level=info remo...=0283ed
Hint: Some lines were ellipsized, use -l to show in full.
******(4)测试数据是否存储到了influxdb数据库中
[root@prometheus prometheus]# cd
[root@prometheus ~]# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> use prometheus;   #进入数据库
Using database prometheus  
> show MEASUREMENTS;  #查看数据
name: measurements
name
----
go_gc_duration_seconds
go_gc_duration_seconds_count
go_gc_duration_seconds_sum
go_goroutines
go_info
go_memstats_alloc_bytes
。。。。。。
promhttp_metric_handler_requests_total
scrape_duration_seconds
scrape_samples_post_metric_relabeling
scrape_samples_scraped
scrape_series_added
up
> select * from prometheus_http_requests_total limit 10 ;    #做个简单查询
name: prometheus_http_requests_total
time                __name__                       code handler  instance       job        value
----                --------                       ---- -------  --------       ---        -----
1625908702484000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 1
1625908717484000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 2
1625908732484000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 3
1625908747484000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 4
1625908762483000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 5
1625908777483000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 6
1625908792483000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 7
1625908807483000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 8
1625908822483000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 9
1625908837495000000 prometheus_http_requests_total 200  /metrics localhost:9090 prometheus 10


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
6月前
|
Prometheus 监控 Kubernetes
Prometheus + Grafana安装
Prometheus + Grafana安装
|
6月前
|
Prometheus Cloud Native Java
微服务框架(二十三)Prometheus + Grafana 安装、配置及使用
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Prometheus + Grafana 安装、配置及使用 本系列文章中所使用的框架版本为Spring ...
|
6天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
34 2
|
3月前
|
Prometheus 监控 Kubernetes
prometheus学习笔记之简介与安装
prometheus学习笔记之简介与安装
prometheus学习笔记之简介与安装
|
2月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
2月前
|
存储 Prometheus 监控
在Ubuntu系统上安装与配置Prometheus的步骤
通过以上步骤,您应该已经成功在Ubuntu系统上安装并配置了Prometheus。您现在可以开始使用Prometheus收集和分析您的系统和应用程序的指标数据了。
128 1
|
3月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置
|
3月前
|
存储 Prometheus 监控
Prometheus·概述
Prometheus·概述
53 3
|
12月前
|
Prometheus Cloud Native
Mac下安装 Prometheus+Grafana
Mac下安装 Prometheus+Grafana
407 0
|
6月前
|
Prometheus 监控 Cloud Native
Prometheus 安装与配置
Prometheus 安装与配置