监控平台简介:

统一监控平台由七大角色构成:监控源、数据采集、数据存储、数据分析、数据展现、预警中心、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相关推荐

  1. 0基础搭建Prometheus+Grafana监控服务器CPU、磁盘、内存等信息

    这里写自定义目录标题 0基础搭建Prometheus+Grafana监控服务器CPU.磁盘.内存等信息 1.实验环境准备 2.基础环境配置 3.部署prometheus 4.部署Grafana可视化图 ...

  2. Prometheus+Granfana

    二.虚机(服务器)方式 prometheus在虚机(服务器)中安装运行. 命令行启动 在安装完成以后,可以直接在命令行启动.启动方式通常是: ./prometheus --config.file=pr ...

  3. 实战 Prometheus 搭建监控系统

    欢迎关注方志朋的博客,回复"666"获面试宝典 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个 ...

  4. 【Prometheus】PromQL 万字详解

    在上一文当中,通过Node Exporter暴露的HTTP服务,Prometheus可以采集到当前主机所有监控指标的样本数据.例如: # HELP node_cpu Seconds the cpus ...

  5. Spring Boot2.x-14 使用Prometheus + Grafana 实现可视化的监控

    文章目录 环境信息 Prometheus 组件 下载 & 安装 通过指定配置文件prometheus.yml启动Prometheus 查看采集到的性能指标 查看prometheus规则 查看监 ...

  6. k8s安装Prometheus

    注:必须要先搭建网页管理容器: k8s部署dashboard_kali_yao的博客-CSDN博客 1.Prometheus的概述 Prometheus是一个最初在SoundCloud上构建的开源监控 ...

  7. 【Prometheus Pushgateway】 推送数据踩坑

    文章目录 pushed metrics are invalid or inconsistent with existing metrics: collected metric python prome ...

  8. 巨详细的prometheus+grafana实现服务器(集群)性能监控,并学着调用prometheus的api

    目录 1.添加机器状态监控节点(node集群配置:每台要监控的服务器都需要安装一个node) 2.安装prometheus(只需要安装一个总控prometheus,yml配置文件中配置好各个node节 ...

  9. prometheus + influxdb + grafana + mysql

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本文介绍使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方 ...

最新文章

  1. RTMP协议中的Chunk Stream ID (CID)的作用
  2. [转]构建基于WCF Restful Service的服务
  3. 源码包部署tomcat
  4. 文本框换行_多行文本框的认识以及代码详解
  5. 从博客时间轴总结这一年
  6. ps怎么一下选中多个图层_PS图层基本操作,零基础小白必学
  7. MiOJ 3. 大数相减(字符串减法)
  8. java 正则匹配_正则表达式真的很强大,可惜你不会写
  9. 多任务场景下单线程异步多线程多进程
  10. 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!
  11. Spark Structured SQL : NumberFormatException: Zero length BigInteger
  12. python是什么专业学的-当我们学Python时,我们学什么?
  13. C3P0的几种使用方法(非JNDI)
  14. sencha touch 入门系列 (四)sencha touch 新建项目目录结构解析
  15. DWF文件该如何打开查看呢?
  16. PEP 8: E305 excepted 2 blank lines, after class or function definition, found 1
  17. 河北省专科院校计算机专业排名,河北省高职院校全国排名+各院校王牌专业
  18. linux操作系统原理与应用.第2版 陈莉君 pdf
  19. 浅谈 iOS14 Widget小组件
  20. Java 实现图片转换为ICO以及多种格式图片之间转换

热门文章

  1. [探测与扫描]仿生学-鹰眼的威力
  2. 2.4 Spring Framework 5.x之DI(依赖注入)
  3. 教你看电脑的配置,学下以后会用得着。
  4. (翻译)常见问题解答(Frequently Asked Questions(FAQ))
  5. ipadmini5远程服务器,为什么iPadmini5被称为“等等党的耻辱”?原因可以分为3点!...
  6. 厂家未结算差价 iPad退款双重标准惹不满
  7. 鸿蒙os去广告,隐藏福利?华为鸿蒙OS新惊喜:优酷视频流转播放可免广告
  8. PyQt5中的QMessageBox消息弹窗使用示例
  9. 什么是java工程师
  10. 架构和框架(Framework)的区别