• docker搭建Prometheus+Grafana监控体系


    一、知识铺垫

      1、简介

    Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

    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模型进行。
    • 通过中间网关支持推送时间。
    • 通过服务发现或静态配置发现目标。
    • 多种模式的图形和仪表板支持。

       2、架构概览

    该图说明了普罗米修斯(Prometheus)及其一些生态系统组件的整体架构:

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

    Prometheus:支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。

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

    PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

    如果有使用过statsd的用户,则会觉得这十分相似,只是statsd是直接发送给服务器端,而Prometheus主要还是靠进程主动去抓取。

    大多数Prometheus组件都是用Go编写的,它们可以轻松地构建和部署为静态二进制文件。访问prometheus.io以获取完整的文档,示例和指南

      3、数据模型

    Prometheus从根本上所有的存储都是按时间序列去实现的,相同的metrics(指标名称) 和label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。

    metrics name&label指标名称和标签

    每条时间序列是由唯一的”指标名称”和一组”标签(key=value)”的形式组成。

    指标名称:一般是给监测对像起一名字,例如http_requests_total这样,它有一些命名规则,可以包字母数字_之类的的。通常是以应用名称开头_监测对像_数值类型_单位这样。例如:push_total、userlogin_mysql_duration_seconds、app_memory_usage_bytes。

    标签:就是对一条时间序列不同维度的识别了,例如一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。最终形成的标识便是这样了:http_requests_total{method=”POST”,endpoint=”/api/tracks”}。

    记住,针对http_requests_total这个metrics name无论是增加标签还是删除标签都会形成一条新的时间序列。

    查询语句就可以跟据上面标签的组合来查询聚合结果了。

    如果以传统数据库的理解来看这条语句,则可以考虑http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值了。(Prometheus里面所有值都是按float64存储)。

      4、四种数据类型

    Counter

    Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。

    例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。

    Gauge

    Gauge常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置。

    例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。

    Histogram

    Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。

    例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。

    Summary

    Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。

    例如:count=7次,sum=7次的值求值。

    它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

     二、环境准备

    1、docker环境已存在

    docker安装与配置传送门

    三、具体步骤

    1、Prometheus

    新建目录prometheus,编辑配置文件prometheus.yml

    mkdir /etc/prometheus
    cd /etc/prometheus/
    vim prometheus.yml

    内容如下:

    global:
      scrape_interval:     15s  #默认是1分钟
      evaluation_interval: 15s  #默认是1分钟
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
      - job_name: 'node_exporter'
        static_configs:
        - targets: ['localhost:9100']
      - job_name: 'mysql'
        static_configs:
        - targets: ['k8s.testing-studio.com:9104']
      - job_name: 'cadvisor'
        static_configs:
        - targets: ['k8s.testing-studio.com:8091']

    注意:

    1、修改成自己的IP地址

    2、这个配置文件比较重要,scrape_configs部分指定的是要监控的组件

    启动prometheus

    docker run --name prometheus -d -p 9090:9090 -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml -v `pwd`/rules/:/etc/prometheus/ prom/prometheus --config.file=/etc/prometheus/prometheus.yml

     访问页面,确认普罗米修斯服务是否可用

    http://192.168.10.104:9090/targets

     出现上面,则服务正常

    2、Grafana

    新建空文件夹grafana-storage,用来存储数据

    mkdir /opt/grafana-storage

    设置权限

    chmod 777 -R /opt/grafana-storage

    启动grafana

    docker run --name grafana -v /opt/grafana-storage:/var/lib/grafana --restart=always -d -p 8000:3000 grafana/grafana

    等待1分钟,访问url:

    http://192.168.10.104:8000/

    默认会先跳转到登录页面,默认的用户名和密码都是admin

    登录之后,它会要求你重置密码。你可以重新设置admin密码或者是跳过

    密码设置完成之后,就会跳转到首页

    点击Add data source

     URL修改成普罗米修斯的域名或者是ip地址

    点击下面的Save & Test,如果出现绿色的,说明ok了

     至此,Prometheus和Grafana已经联系上了

    四、监控操作系统

    ......

    五、监控mysql

    前提:

    是已经搭建好mysql服务

    1、运行mysql-exporter

    docker run -d --name mysql-exporter -p 9104:9104 -e DATA_SOURCE_NAME="root:1qaz9ol.@(172.17.56.102:8888)/mysql" prom/mysqld-exporter

    备注:

    root:是数据库用户名

    1qaz9ol.@:是数据库密码

    @是连接符号

    ():是mysql服务的ip:端口号

    2、在Grafana中配置mysql的监控模板

    在Grafana官网中找到mysql的监控模板 Mysql Overview,ID为7362(或者是其他),使用ID的方式导入到Grafana中去

    3、查看效果

    知道、想到、做到、得到
  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/Durant0420/p/15459828.html
Copyright © 2020-2023  润新知