从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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值