prometheus简介

      Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合.由SoundCloud公司开发。Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus

与其他监控系统相比,Prometheus的主要特点是:

  • 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
  • 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
  • 一种灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点。
  • 时间集合通过HTTP上的PULL模型进行。
  • 通过中间网关支持推送时间。
  • 通过服务发现或静态配置发现目标。
  • 多种模式的图形和仪表板支持。

prometheus的架构

外部 prometheus监控 kubernetes prometheus web监控_数据

它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。 

Prometheus系统的主要由以下三部分:prometheus、alertmanager、*_exporter(多个)

Prometheus

 prometheus是最主要的组件,支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。负责采集数据,将告警发送到alertmanager,alertmanager再将告警以各种形式送出

Alertmanager

是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

*_exporter

exporter是一组程序,它们分别被用来采集物理机、中间件的信息。有prometheus官方实现的,还有更多第三方实现的:

这些exporter分别采集对应系统的指标,并将其以prometheus的格式呈现出来,供prometheus采集

prometheus配置安装

下载安装

https://prometheus.io/download/去下载一份,然后如下执行

tar xvfz prometheus-*.tar.gz

cd prometheus-*

 

进入目录后可以通过下面命令来查看帮助

./prometheus --help

配置

打开prometheus.yml配置文件进行相关配置,在这里我们主要对我们的canal worker进程进行监控

- job_name: 'canal'

   static_configs:

   - targets: ['localhost:11112'] //端口配置即为canal.properties中的canal.metrics.pull.port

配置完毕后可以执行 如下命令进行启动,这个配置文件的路径也可以指定

./prometheus --config.file=prometheus.yml

之后通过打开 http://localhost:9090/graph来查看监控情况,这个是prometheus自带的监控界面比较简陋,我们可以通过grafana来进行监控

Grafana配置安装

Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB

下载安装

进入https://grafana.com/grafana/download页面进行下载,然后按照下面步骤进行配置granfa  http://docs.grafana.org/features/datasources/prometheus/#adding-the-data-source-to-grafana,使prometheus的监控信息通过grafana来展示

canal监控配置(摘自github的canal主页readme)

canal监控安装步骤

  • 安装并部署对应平台的prometheus,参见官方guide
  • 配置prometheus.yml,执行./promtool check config prometheus.yml命令,查看配置文件是否有错,添加canal的job,示例:
- job_name: 'canal'

   static_configs:

   - targets: ['localhost:11112'] //端口配置即为canal.properties中的canal.metrics.pull.port
  • 启动prometheus与canal server
  • 安装与部署grafana,推荐使用新版本(5.2)。
  • 启动grafana-server,使用用户admin与密码admin登录localhost:3000 (默认配置下)。启动:./grafana-server start
  • 配置prometheus datasource.
  • 导入模板(canal/conf/metrics/Canal_instances_tmpl.json),参考这里。、
  • 进入dashboard 'Canal instances', 在'datasource'下拉框中选择刚才配置的prometheus datasource, 然后'destination'下拉框中就可以切换instance了(如果没出现instances列表就刷新

canal监控相关原始指标列表

指标

说明

单位

精度

canal_instance_transactions

instance接收transactions计数

-

-

canal_instance

instance基本信息

-

-

canal_instance_subscriptions

instance订阅数量

-

-

canal_instance_publish_blocking_time

instance dump线程提交到异步解析队列过程中的阻塞时间(仅parallel解析模式)

ms

ns

canal_instance_received_binlog_bytes

instance接收binlog字节数

byte

-

canal_instance_parser_mode

instance解析模式(是否开启parallel解析)

-

-

canal_instance_client_packets

instance client请求次数的计数

-

-

canal_instance_client_bytes

向instance client发送数据包字节计数

byte

-

canal_instance_client_empty_batches

向instance client发送get接口的空结果计数

-

-

canal_instance_client_request_error

instance client请求失败计数

-

-

canal_instance_client_request_latency

instance client请求的响应时间概况

-

-

canal_instance_sink_blocking_time

instance sink线程put数据至store的阻塞时间

ms

ns

canal_instance_store_produce_seq

instance store接收到的events sequence number

-

-

canal_instance_store_consume_seq

instance store成功消费的events sequence number

-

-

canal_instance_store

instance store基本信息

-

-

canal_instance_store_produce_mem

instance store接收到的所有events占用内存总量

byte

-

canal_instance_store_consume_mem

instance store成功消费的所有events占用内存总量

byte

-

canal_instance_put_rows

store put操作完成的table rows

-

-

canal_instance_get_rows

client get请求返回的table rows

-

-

canal_instance_ack_rows

client ack操作释放的table rows

-

-

canal_instance_traffic_delay

server与MySQL master的延时

ms

ms

canal_instance_put_delay

store put操作events的延时

ms

ms

canal_instance_get_delay

client get请求返回events的延时

ms

ms

canal_instance_ack_delay

client ack操作释放events的延时

ms

ms

  监控展示指标

指标

简述

多指标

Basic

Canal instance 基本信息。


Network bandwith

网络带宽。包含inbound(canal server读取binlog的网络带宽)和outbound(canal server返回给canal client的网络带宽)


Delay

Canal server与master延时;store 的put, get, ack操作对应的延时。


Blocking

sink线程blocking占比;dump线程blocking占比(仅parallel mode)。


TPS(transaction)

Canal instance 处理binlog的TPS,以MySQL transaction为单位计算。


TPS(tableRows)

分别对应store的put, get, ack操作针对数据表变更行的TPS


Client requests

Canal client请求server的请求数统计,结果按请求类型分类(比如get/ack/sub/rollback等)。


Response time

Canal client请求server的响应时间统计。


Empty packets

Canal client请求server返回空结果的统计。


Store remain events

Canal instance ringbuffer中堆积的events数量。


Store remain mem

Canal instance ringbuffer中堆积的events内存使用量。


Client QPS

client发送请求的QPS,按GET与CLIENTACK分类统计