监控(一):监控系统搭建(Prometheus+Grafana)

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+Grafana)_第1张图片

它的服务过程是这样的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分类统计

 

详细:https://github.com/alibaba/canal/wiki/Prometheus-QuickStart

你可能感兴趣的:(监控)