1. prometheus 是什么

开源的系统监控和报警工具,监控项目的流量、内存量、负载量等实时数据。

它通过直接或短时jobs中介收集监控数据,在本地存储所有收集到的数据,并且通过定义好的rules产生新的时间序列数据,或发送警报。通过其它api可以将采集到的数据可视化。

2. 怎么实现监控

简单的说,主要就是以下几个步骤:

  1. 配置待监控的各个服务器,在每个服务器本地收集并存储数据。如果采用第三方系统收集数据metrics,且数据不是prometheus时序对,则需要定义exporter将那些metrics export为prometheus时序对。现在有很多已经定义好的官方或第三方的exporters有些软件抓取的数据直接就是prometheus格式的。
  2. 找一台服务器部署prometheus服务。然后修改配置文件,设定监控对象的ip地址和端口等。启动prometheus,之后prometheus就会用轮询的方式去各个服务器pull数据。
  3. 分析数据。prometheus提供了强大的查询库,可以定制收集到的数据。prometheus提供了browser的结果呈现,也可以配置使用第三方的数据可视化平台。

部署监控mysql

以一个例子来说明部署流程。

安装和运行prometheus

有很多种安装方法,这里我使用预编译的二进制文件。到这里下载。之后解压,terminal中输入./prometheus,回车启动prometheus服务。

监控prometheus自己

打开解压后的prometheus目录,发现其中有个prometheus.yml文件。prometheus.yml是设置监控对象等的配置文件。打开prometheus.yml,默认的prometheus.yml的初始配置如下:

global:
scrape_interval: 15s # By default, scrape targets every 15 seconds. # Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor' # 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_name: 'prometheus' # Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s static_configs:
- targets: ['localhost:9090']

这里设定监控目标为localhost:9090,即prometheus自己。浏览器打开localhost:9090,就能访问prometheus提供的可视化界面。localhost:9090/metrics提供了所有的监控数据信息。其中有一条prometheus_target_interval_length_seconds,表示真实的数据获取间隔,在prometheus首页输入它并回车,就可以看到一系列的数据,它们有不同quantile,从0.01至0.99不等。quantitle表示有多少比例的数据在这个值以内。如果只关注0.99的数据,可以输入prometheus_target_interval_length_seconds{quantile="0.99"}查询。查询还支持函数,比如count(prometheus_target_interval_length_seconds)可 以查询数量。

如果想要查询结果直接包含数量那个数据,创建一个prometheus.rules文件,在文件中定义这条规则,然后在prometheus.yml中配置rules文件。

//prometheus.rules
test:prometheus_target_interval_length_seconds:count = count(prometheus_target_interval_length_seconds) //prometheus.yml
# my global config
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
# scrape_timeout is set to the global default (10s). # Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor' # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "prometheus.rules"
# - "second.rules" # 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_name: 'prometheus' # Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s # metrics_path defaults to '/metrics'
# scheme defaults to 'http'. static_configs:
- targets: ['localhost:9090']

之后,就可以直接输入test:prometheus_target_interval_length_seconds:count查询数据了。这里rule比较简单,如果有一些常用的但比较复杂的数据,都可以用rule的方法来定义获取。

监控mysql

修改prometheus.yml,在文件最后添加:

  - job_name: 'mysql'

    # Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s # metrics_path defaults to '/metrics'
# scheme defaults to 'http'. static_configs:
- targets: ['localhost:9104']
labels:
instance: db1

重启prometheus服务:

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

再打开localhost:9090,查看Status -> Targets页面下,就可以看到配置的两个target:一个是prometheus本身,StateUP,另一个是mysql,State DOWN,因为我们还没有配置监控mysql的服务。

安装并运行mysql exporter

在在这里下载并解压mysql exporter,或者直接使用docker:

$ docker pull prom/mysqld-exporter

mysqld_exporter需要连接到mysql,需要mysql的权限,需要先为他创建用户并赋予所需的权限:

CREATE USER 'mysqlexporter'@'localhost' IDENTIFIED BY 'msyqlexporter';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'
WITH MAX_USER_CONNECTIONS 3;

然后在docker中运行exporter,其中DATA_SOURCE_NAME是环境变量,用于连接数据库。

$ docker run -d \
-p 9104:9104 \
-e DATA_SOURCE_NAME="mysqlexporter:mysqlexporter@(localhost:3306)/data_store" prom/mysqld-exporter

此时再刷下localhost:9090/targets,就可以看到mysql的state转为UP,即已经成功的监测了mysql。

总结

核心的几个点:

  1. 数据收集

    1. 通过中介网关支持短时间序列数据收集
    2. 通过http pull的形式采集时间序列
    3. 可以通过自定义的rules产生新的时间数据系列(即定义一个rule,这个rule可能以已有的监控数据为输入,计算之后得到加工后的监控数据。加入该监控规则后,再监控时就能直接拿到这个加工后的数据了),例如官网的这个例子
    4. 监控目标:服务发现/静态配置。基于服务收集数据,而不是基于服务器收集数据。
  2. 数据存储
    1. 不依赖分布式存储,单个服务器节点工作
    2. 多维度数据模型(键值对确定的时间序列模型),解决了分布式存储的问题。就是说你的项目是分布在多个容器(例如每个服务器有一个容器)中,要获得整个项目的数据,需要监控这所有的容器。可以利用cAdvisor等从每个容器中拿数据,这样得到的数据是分散的,然后采用多维度数据模型配合查询语法就可以查到整个项目的流量数据。
  3. 数据查询
    1. 灵活的查询语言来利用上述维度数据模型
  4. 数据展示
    1. 各种展示面板:expression browser(无需配置)、Grafana等

局限和适用

局限:

  1. 单机缺点。因为它是以单个服务器节点工作为基础的,因此每个节点要存储监控数据,那么每个节点的监控数据量就会受限于存储空间。
  2. 内存占用量大(可以配置改善)。因为集成了leveldb(高效插入数据的数据库),在ssd盘下io占用高。

适用于监控所有时间序列的项目。

采用prometheus 监控mysql的更多相关文章

  1. Grafana+Prometheus 监控 MySQL

    转自:Grafana+Prometheus 监控 MySQL 架构图 环境 IP 环境 需装软件 192.168.0.237 mysql-5.7.20 node_exporter-0.15.2.lin ...

  2. Prometheus 监控Mysql服务器及Grafana可视化

    Prometheus 监控Mysql服务器及Grafana可视化. mysql_exporter:用于收集MySQL性能信息. 使用版本 mysqld_exporter 0.11.0 官方地址 使用文 ...

  3. 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

    一.背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能.Grafana 是一款功能强大的仪表盘面板,支持多种数据源 ...

  4. Grafana+Prometheus监控mysql性能

    #cmd /usr/local 今天讲一下如何监控服务器中的mysql数据库的性能 一.数据库操作 1.mysql启动 #service mysqld start #启动数据库 #service my ...

  5. Prometheus 监控MySQL

    目录 0.简介 1.mysql_exporter部署 2.mysql报警规则 0.简介 文中主要监控MySQL/MySQL主从信息 版本:mysql-5.7,mysql_exporter-0.12.1 ...

  6. 手把手教你使用 Prometheus 监控 MySQL 与 MariaDB.md

    概述 MySQL 是常用的关系型数据库,MariaDB 作为 MySQL 的分支版本,兼容 MySQL 协议,也越来越流行.在 Kubernetes 环境中如何使用 Prometheus 来对它们进行 ...

  7. Grafan+Prometheus 监控 MySQL

    架构图 环境 IP 环境 需装软件 192.168.0.237 mysql-5.7.20 node_exporter-0.15.2.linux-amd64.tar.gz mysqld_exporter ...

  8. prometheus监控mysql

    创建一个用于mysqld_exporter连接到MySQL的用户并赋予所需的权限 mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO '; my ...

  9. 5.监控MySQL

    prometheus监控MySQL需要用到mysql_exporter. mysql_exporter 项目地址:https://github.com/prometheus/mysqld_export ...

随机推荐

  1. ROS Navigation中的map_server地图包功能和使用

    博客参考 http://wiki.ros.org/map_server 和 https://www.ncnynl.com/archives/201708/1897.html 1. 安装map_serv ...

  2. pyspider示例代码二:解析JSON数据

    本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉.pyspider示例代码官方网站是http://demo.pyspider.org/.上面的示例代码太多,无从下手.因此本人找出一下 ...

  3. 数据挖掘算法以及其实现zz

    实验一    分类技术及其应用 实习要求: 基于线性回归模型拟合一个班学生的学习成绩,建立预测模型.数据可由自己建立100个学生的学习成绩. 1)    算法思想: 最小二乘法 设经验方程是y=F(x ...

  4. windows 下mongodb 副本建创建

    步骤: 一.安装mongodb 二.将安装的mongodb 复制2份 如图: 三.修改配置文件 dbpath=C:\mongofuben\zhu\data logpath=C:\mongofuben\ ...

  5. centos7安装kubernetes 1.1

    原文地址:http://foxhound.blog.51cto.com/1167932/1717105 前提:centos7 已经update yum update -y 一.创建yum源 maste ...

  6. SGU 194 Reactor Cooling (有容量和下界的可行流)

    题意:给定上一个有容量和下界的网络,让你求出一组可行解. 析:先建立一个超级源点 s 和汇点 t ,然后在输入时记录到每个结点的下界的和,建边的时候就建立c - b的最后再建立 s 和 t , 在建立 ...

  7. tomcat服务器输入localhost可以访问,ip无法访问解决办法

    最近在开发项目中,遇到的一个问题是: 在 tomcat中发布一个web项目,但是发布成功后,只能用http://localhost:8080/fm访问项目,不能用 http://127.0.0.1:8 ...

  8. (转)【经验之谈】Git使用之Windows环境下配置

    原文地址:http://www.cnblogs.com/xishuai/p/3590434.html 前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论 ...

  9. jconsole连接远程tomcat

    windows(Windows操作系统下的远程监控) 1.编辑文件:在进入到了tomcat中的bin的目录中,进行打开catalina.bat进行编辑文件. 2.添加代码:找到文件中的如下代码 rem ...

  10. Sqler-Monitor

    针对Sqler Monitor 功能做了整理 ##SqlServices ## Cluster. Alwayson Single ##Replicaion ##: 1:undelivedcmds mo ...