从0到1了解Prometheus
监控平台简介:
统一监控平台由七大角色构成:监控源、数据采集、数据存储、数据分析、数据展现、预警中心、CMDB(企业软硬件资产管理)
- 监控源:
从层次上来分,大致可以分为三层,业务应用层、中间件层、基础设施层。业务应用层主要包括应用软件、企业消息总线等,中间件层包括数据库、缓存、配置中心、等各种系统软件,基础设施层主要有物理机、虚拟机、容器、网络设备、存储设备等等。
- 数据采集:
数据源如此多样,数据采集的任务自然轻松不了。数据采集从指标上划分可以分为业务指标、应用指标、系统软件监控指标、系统指标。应用监控指标如:可用性、异常、吞吐量、响应时间、当前等待笔数、资源占用率、请求量、日志大小、性能、队列深度、线程数、服务调用次数、访问量、服务可用性等,业务监控指标如大额流水、流水区域、流水明细、请求笔数、响应时间、响应笔数等,系统监控指标如:CPU负载、内存负载、磁盘负载、网络IO、磁盘IO、tcp连接数、进程数等。
从采集方式来说通常可以分为接口采集、客户端agent采集、通过网络协议主动抓取(http、snmp等)
- 数据存储:
采集到的数据一般都会存储到文件系统(如HDFS)、索引系统(如elasticsearch)、指标库(如influxdb)、消息队列(如kafka,做消息临时存储或者缓冲)、数据库(如mysql)
- 数据分析:
针对采集到的数据,进行数据的处理。处理分两类:实时处理和批处理。技术包括Map/Reduce计算、全日志检索、流式计算、指标计算等,重点是根据不同的场景需求选择不同的计算方式。
- 数据展现:
将处理的结果进行图表展现,在多屏时代,跨设备的支持必不可少。
- 预警:
如果在数据处理过程发现了问题,则需要进行异常的分析、风险的预估以及事件的触发或告警。
- CMDB(企业软硬件资产管理):
CMDB在统一监控平台中是很重要的一环,监控源虽然种类繁多,但是他们大都有着关系,如应用运行在运行环境中,应用的正常运行又依赖网络和存储设备,一个应用也会依赖于其他的应用(业务依赖),一旦其中任何一个环节出了问题,都会导致应用的不可用。CMDB除了存储软硬件资产外,还要存储这样一份资产间的关联关系,一个资产发生了故障,要能根据这个关系迅速得知哪些其他的资产会被影响,然后逐一解决问题。
为什么选择Prometheus?
Prometheus VS Zabbix:
发行时间 |
开发语言 |
性能 |
社区支持 |
容器支持 |
企业使用 |
部署难度 |
|
Prometheus |
2016 |
go |
支持万为单位 |
相对不如zabbix,但是人数与日俱增 |
不仅支持swarm原生集群,还支持Kubernetes容器集群的监控,是目前容器监控最好的解决方案 |
基本上使用Kubernetes与容器的企业,prometheus是最好的选择 |
只有一个核心server组件,一条命令便可以启动 |
Zabbix |
2012 |
c + php |
上限约一万字节 |
应用广泛,支持较成熟,遇到的问题都能搜索到 |
Zabbix出现得比较早,当时容器还没有诞生,自然对容器的支持也比较差 |
在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势 |
多种系统,多种监控信息采集方式 |
架构原理:
- Prometheus Server:
Prometheus Sever是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储及查询。Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Sever需要对采集到的数据进行存储,Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。
- Exporters:
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:
直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
间接采集:原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。
- AlertManager:
在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产生一条告警。在AlertManager从 Prometheus server 端接收到 alerts后,会进行去除重复数据,分组,并路由到对应的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,webhook 等。
- PushGateway:
Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行中转。通过PushGateway将内部网络的监控数据主动Push到Gateway中,Prometheus Server采用针对Exporter同样的方式,将监控数据从PushGateway pull到Prometheus Server。
- Prometheus的工作流:
1、Prometheus server定期从配置好的jobs或者exporters中拉取metrics,或者接收来自 Pushgateway发送过来的metrics,或者从其它的Prometheus server中拉metrics;
2、Prometheus server在本地存储收集到的metrics,并运行定义好的alerts.rules,记录新的时间序列或者向Alert manager推送警报;
3、Alertmanager根据配置文件,对接收到的警报进行处理,发出告警;
4、在Web UI或Grafana中,通过PromQL从Prometheus server中查询并对采集到的数据进行可视化。
安装部署:
安装Prometheus:
Getting started | Prometheus
Download | Prometheus
tar -zxvf prometheus-*.tar.gz 进行解压即可。
进入prometheus-*解压目录,配置prometheus.yml:
# my global config
global:
scrape_interval: 15s # 设置为每15秒钟从Target采集一次数据,默认是1分钟一次
evaluation_interval: 15s # 设置为每15秒钟评估一下规则,默认是1分钟一次
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"] # 配置 alertmanager地址
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "prometheus.rules.yml" # 配置规则文件
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
# 配置一个job,这里就是以prometheus自己作为exporter,监控prometheus自己
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["172.16.0.213:9090"]
labels:
instance: prometheus
# 配置mysql exporter,监控mysql
- job_name: "mysqld_exporter"
static_configs:
- targets: ["localhost:9104"]
labels:
instance: mysql_208
# 配置linux exporter,监控linux主机
- job_name: "node_exporter"
static_configs:
- targets: ["localhost:9100"]
labels:
instance: linux_208
# 监控 访客管理这个JVM进程
- job_name: "vms"
metrics_path: /vms/actuator/prometheus
static_configs:
- targets: ["localhost:10109"]
配置prometheus.rules.yml:
groups:
# 配置一个规则,满足规则时,会将报警信息推送到alertmanager
- name: InstanceDown
rules:
- alert: "服务进程死亡"
expr: up == 0 # 基于Prom QL表达式创建的告警规则
for: 5m # 如果连续5分钟内的检测结果都是up == 0,那么推送报警信息给alertmanager
labels:
severity: critical # 报警的严重程度
annotations: # 报警内容
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
- name: MemoryRule
rules:
- alert: "内存使用率过高报警"
expr: ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 80 # 基于Prom QL表达式创建的告警规则
for: 5m # 如果连续5分钟内的检测到的内存使用率都高于80%,那么推送报警信息给alertmanager
labels:
severity: "High" # 报警的严重程度
annotations: # 报警内容
summary: "服务名:{{$labels.alertname}}"
description: "业务500报警: {{ $value }}"
value: "{{ $value }}"
这是邮箱收到的报警信息:
配置好之后,启动即可。
访问地址:localhost:9090
安装Grafana:
With Grafana | Grafana documentation
Download Grafana | Grafana Labs
下载,解压,启动。
访问地址:172.16.0.213:3000
安装AlertManager:
Download | Prometheus
下载,解压,配置alertmanager.yml文件:
global:
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '1737***937@qq.com'
smtp_auth_username: '1737***937@qq.com'
smtp_auth_password: 'idhcsx***qoe***'
smtp_require_tls: false
route:
receiver: 'mail-dyy'
group_wait: 1s
group_interval: 5s
repeat_interval: 1h
group_by: ['alertname']
receivers:
- name: 'mail-dyy'
email_configs:
- to: '1737***937@qq.com'
后续扩展:
监控平台是随着应用平台的扩展而扩展的。目前我们做了一个最小闭环,包含prometheus、alertmanager、grafana、node_exporter、mysqld_exporter等组成的最小闭环,可以监控linux服务器、监控mysql、监控具体的java项目。但是需要很多横向扩展的,比如监控MQ、监控Redis、监控Nginx等等。在做这些横向扩展的时候,主要需要把握两点,即Exporter、Grafana模板,而且Exporter暴露的监控项需要和Grafana模板里面的PromQL对应起来,如果没有对应的现成的模板,则需要手动创建。
Exporter:
Download | Prometheus
Grafana模板:
Dashboards | Grafana Labs
根据名字来搜索想要的模板:
获取模板的ID:
在Grafana操作界面中进行import dashboard,输入上面的ID即可导入一个样式模板:
从0到1了解Prometheus相关推荐
- 0基础搭建Prometheus+Grafana监控服务器CPU、磁盘、内存等信息
这里写自定义目录标题 0基础搭建Prometheus+Grafana监控服务器CPU.磁盘.内存等信息 1.实验环境准备 2.基础环境配置 3.部署prometheus 4.部署Grafana可视化图 ...
- Prometheus+Granfana
二.虚机(服务器)方式 prometheus在虚机(服务器)中安装运行. 命令行启动 在安装完成以后,可以直接在命令行启动.启动方式通常是: ./prometheus --config.file=pr ...
- 实战 Prometheus 搭建监控系统
欢迎关注方志朋的博客,回复"666"获面试宝典 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个 ...
- 【Prometheus】PromQL 万字详解
在上一文当中,通过Node Exporter暴露的HTTP服务,Prometheus可以采集到当前主机所有监控指标的样本数据.例如: # HELP node_cpu Seconds the cpus ...
- Spring Boot2.x-14 使用Prometheus + Grafana 实现可视化的监控
文章目录 环境信息 Prometheus 组件 下载 & 安装 通过指定配置文件prometheus.yml启动Prometheus 查看采集到的性能指标 查看prometheus规则 查看监 ...
- k8s安装Prometheus
注:必须要先搭建网页管理容器: k8s部署dashboard_kali_yao的博客-CSDN博客 1.Prometheus的概述 Prometheus是一个最初在SoundCloud上构建的开源监控 ...
- 【Prometheus Pushgateway】 推送数据踩坑
文章目录 pushed metrics are invalid or inconsistent with existing metrics: collected metric python prome ...
- 巨详细的prometheus+grafana实现服务器(集群)性能监控,并学着调用prometheus的api
目录 1.添加机器状态监控节点(node集群配置:每台要监控的服务器都需要安装一个node) 2.安装prometheus(只需要安装一个总控prometheus,yml配置文件中配置好各个node节 ...
- prometheus + influxdb + grafana + mysql
2019独角兽企业重金招聘Python工程师标准>>> 前言 本文介绍使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方 ...
最新文章
- RTMP协议中的Chunk Stream ID (CID)的作用
- [转]构建基于WCF Restful Service的服务
- 源码包部署tomcat
- 文本框换行_多行文本框的认识以及代码详解
- 从博客时间轴总结这一年
- ps怎么一下选中多个图层_PS图层基本操作,零基础小白必学
- MiOJ 3. 大数相减(字符串减法)
- java 正则匹配_正则表达式真的很强大,可惜你不会写
- 多任务场景下单线程异步多线程多进程
- 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!
- Spark Structured SQL : NumberFormatException: Zero length BigInteger
- python是什么专业学的-当我们学Python时,我们学什么?
- C3P0的几种使用方法(非JNDI)
- sencha touch 入门系列 (四)sencha touch 新建项目目录结构解析
- DWF文件该如何打开查看呢?
- PEP 8: E305 excepted 2 blank lines, after class or function definition, found 1
- 河北省专科院校计算机专业排名,河北省高职院校全国排名+各院校王牌专业
- linux操作系统原理与应用.第2版 陈莉君 pdf
- 浅谈 iOS14 Widget小组件
- Java 实现图片转换为ICO以及多种格式图片之间转换
热门文章
- [探测与扫描]仿生学-鹰眼的威力
- 2.4 Spring Framework 5.x之DI(依赖注入)
- 教你看电脑的配置,学下以后会用得着。
- (翻译)常见问题解答(Frequently Asked Questions(FAQ))
- ipadmini5远程服务器,为什么iPadmini5被称为“等等党的耻辱”?原因可以分为3点!...
- 厂家未结算差价 iPad退款双重标准惹不满
- 鸿蒙os去广告,隐藏福利?华为鸿蒙OS新惊喜:优酷视频流转播放可免广告
- PyQt5中的QMessageBox消息弹窗使用示例
- 什么是java工程师
- 架构和框架(Framework)的区别