精华内容
下载资源
问答
  • 3D机房环境监控系统源码

    热门讨论 2018-04-13 13:00:32
    3D机房环境监控系统源码,最流行的3D交互控制技术,代码完整,参考的好资料
  • 【大家如果觉得书籍不错,请购买纸质书籍支持作者】《Zabbix企业级分布式监控系统》从运维(OPS)角度对Zabbix的各项功能进行了详细介绍,以自动化运维视角为出发点,对Zabbix的安装配置、自动化功能、监控告警、...
  • 视频监控系统整套源码

    热门讨论 2015-10-27 15:16:28
    网络视频监控系统整套。含多云台操作,含数据库和源代码,开发视频监控系统时修改修改就OK。
  • Grafana监控系统之Prometheus+Grafana监控系统搭建

    千次阅读 多人点赞 2020-08-21 11:06:05
    Grafana监控系统之Prometheus+Grafana监控系统搭建 本文章内容较长,可通过右上角点击目录快速定位想看的内容 => => 一. 概述 1.1 Grafana介绍 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过...

    Grafana监控系统之Prometheus+Grafana监控系统搭建

    本文章内容较长,可通过右上角点击目录快速定位想看的内容 => =>

    一. 概述

    1.1 Grafana介绍

    Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

    1. 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;

    2. 数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;

    3. 通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;

    4. 混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;

    5. 注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;

    6. 过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

    简单来讲,它是一个多用途的监控工具,同时通过邮件等方式进行有效的预警通知,丰富的直观的可视化界面,多种数据源配置是其优点所在;

    1.2 Prometheus对比Zabbix

    • 和Zabbix类似,Prometheus也是一个近年比较火的开源监控框架,和Zabbix不同之处在于Prometheus相对更灵活点,模块间比较解耦,比如告警模块、代理模块等等都可以选择性配置。服务端和客户端都是开箱即用,不需要进行安装。zabbix则是一套安装把所有东西都弄好,很庞大也很繁杂。

    • zabbix的客户端agent可以比较方便的通过脚本来读取机器内数据库、日志等文件来做上报。而Prometheus的上报客户端则分为不同语言的SDK和不同用途的exporter两种,比如如果你要监控机器状态、mysql性能等,有大量已经成熟的exporter来直接开箱使用,通过http通信来对服务端提供信息上报(server去pull信息);而如果你想要监控自己的业务状态,那么针对各种语言都有官方或其他人写好的sdk供你使用,都比较方便,不需要先把数据存入数据库或日志再供zabbix-agent采集。

    • zabbix的客户端更多是只做上报的事情,push模式。而Prometheus则是客户端本地也会存储监控数据,服务端定时来拉取想要的数据。

    • 界面来说zabbix比较陈旧,而prometheus比较新且非常简洁,简洁到只能算一个测试和配置平台。要想获得良好的监控体验,搭配Grafana还是二者的必走之路。

    1.3 Grafana结构图

    在这里插入图片描述

    1.4 通俗讲

    • Prometheus作为一个中间点,而Grafana作为可视化展示,后面的exporter作为监控,exporter将需要获取的数据获取并连接到Prometheus,而Prometheus连接到Grafana,直观展示被监控者状态;

    二. Grafana监控系统之Prometheus+Grafana监控系统搭建

    2.1 安装Prometheus

    • 下载并解压
      wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
      
      tar xvfz prometheus-2.7.2.linux-amd64.tar.gz
      
    • 运行Prometheus server
      cd prometheus-2.7.2.linux-amd64
      
      ./prometheus --config.file=prometheus.yml
      
    • 配置Prometheus
      • 在Prometheus.yml中有配置文件,我们可以对其进行配置,当然第一次安装也可以不管;
      $ cat prometheus.yml 
      # my global config
      global:
        scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
        evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
        # scrape_timeout is set to the global default (10s).
       
      # Alertmanager configuration
      alerting:
        alertmanagers:
        - static_configs:
          - targets:
            # - alertmanager:9093
       
      # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
      rule_files:
        # - "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_name: 'prometheus'
       
          # metrics_path defaults to '/metrics'
          # scheme defaults to 'http'.
       
          static_configs:
          - targets: ['localhost:9090']
      
      

    其大致可分为四部分:
    - global:全局配置,其中scrape_interval表示抓取一次数据的间隔时间,evaluation_interval表示进行告警规则检测的间隔时间;
    - alerting:告警管理器(Alertmanager)的配置,目前还没有安装Alertmanager;
    - rule_files:告警规则有哪些;
    - scrape_configs:抓取监控信息的目标。一个job_name就是一个目标,其targets就是采集信息的IP和端口。这里默认监控了Prometheus自己,可以通过修改这里来修改Prometheus的监控端口。Prometheus的每个exporter都会是一个目标,它们可以上报不同的监控信息,比如机器状态,或者mysql性能等等,不同语言sdk也会是一个目标,它们会上报你自定义的业务监控信息。

    • 访问prometheus
      • 输入: “ip地址”+":9090" 在浏览器中进行访问,如果出现可视化界面说明成功;

    示例: 186.163.15.42:9090 直接在自己电脑中访问
    如果访问不了,请检查防火墙是否开启9090端口

    2.2 添加机器状态监控(监控服务器CPU,硬盘,网络等状态)

    • 下载且解压并运行

      // 下载最新版本,可以在github的release中对最新版本右键获取下载链接
      wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
      
    • 解压

      tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
      
    • 进入解压出的目录

      cd node_exporter-0.17.0.linux-amd64
      
    • 运行监控采集服务

      ./node_exporter
      
    • 监听9100端口

      • 本Centos中访问: curl http://localhost:9100/metrics
      • 电脑浏览器中访问: ip地址:9100

      如果访问有内容显示则成功

      启动服务的时候可使用nohup后台启动,如果是直接图中所示内容启动则重开连接

      • 去Prometheus的配置文件中加上这个exporter的地址
        • 先回到根目录
      cd ~
      
    • 进入prometheus

      cd prometheus-2.7.2.linux-amd64/
      
    • 编辑配置文件prometheus.yml

      vim prometheus.yml
      

    没有vim可以下载或者使用vi也可以

    • 添加target:
      scrape_configs:
        - job_name: 'prometheus'
          static_configs:
            - targets: ['localhost:9090']
        - job_name: 'server'
          static_configs:
            - targets: ['localhost:9100']
      

    2.3 安装Grafana

    • 下载并解压Grafana
      wget https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz
      
      tar -zxvf grafana-6.0.0.linux-amd64.tar.gz
      

    这个页面给出的是最新版本的安装命令,右上角可以选择切换其他版本的安装命令。解压后会出现 grafana-6.0.0 目录,进入该目录,然后就可以运行Grafana了;

    • 安装插件

      • 进入Grafana服务器的该Grafana的lib目录下,然后输入以下命令更新插件:
        ./grafana-cli plugins install grafana-piechart-panel
    • 进入Grafana目录

      cd grafana-6.0.0
      
      • 启动Grafana。
      ./bin/grafana-server web
      
    • 在Grafana展示监控信息

      • 安装并启动Grafana后,浏览器输入 IP:3000 来访问Grafana,管理员账号密码默认是admin/admin。首次登陆会让你修改管理员密码,然后就可以登录查看了。

      • 添加数据源
        在这里插入图片描述

      • 选择Prometheus
        在这里插入图片描述

      • 先输入名称,然后填入http://ip+9090然后直接点Save&Test,成功后则直接点击Dashboards选择展示面板
        在这里插入图片描述

      • 点击导入,可一个也可以全部导入
        在这里插入图片描述

      • 选择左侧边栏的 + 号,点击Imput, 在Grafana.com Dashboard中输入: 8919

      也可以自己选择官方展示面板,链接: https://grafana.com/dashboards

      • 输入号码后点击确定,然后再prometheus选择对应的Prometheus,点击Import即可
        在这里插入图片描述
    • 查看效果

      • 左边侧栏选择方块,点击Manage,然后点击刚刚创建的,即可成功展示!
        在这里插入图片描述

      • 展示效果如图所示:
        在这里插入图片描述

    三. Grafana监控系统之搭建其他服务器监控系统

    3.1 前述

    • 这次的教程是配置其他服务器的监控系统,所以假设上面的已经做好了

    • 监控系统的Prometheus类似于一个注册中心,我们可以只需要配置一个Prometheus,而在其他服务器,只需要安装node_exporter,它们的数据流转就是通过exporter采集数据信息,然后告诉prometheus它的位置;而Prometheus则存储exporter的信息供Grafana询问;Grafana则负责信息的展示;所以可以只配置一个Prometheus,而其他服务器或者本机的服务器的exporter只需要在这一个Promethes中给出它的job_name,targets地址等信息即可;

    • 这里介绍了又重新下载了一个Prometheus的方式,不下载的话可直接跳过从教程: 3.5 添加机器状态监控 开始

    3.2 安装Prometheus

    • 连接需要被安装的服务器,安装Prometheus:
      wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
      
      tar xvfz prometheus-2.7.2.linux-amd64.tar.gz
      

    3.3 启动Prometheus

    • 下载最新版本,可以在github的release中对最新版本右键获取下载链接
      wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
      
    • 解压
      tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
      
    • 进入解压出的目录
      cd node_exporter-0.17.0.linux-amd64
      
    • 运行监控采集服务
      ./node_exporter
      

    3.4 配置Prometheus:

    $ cat prometheus.yml 
    # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
     
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
     
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "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_name: 'prometheus'
     
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
     
        static_configs:
        - targets: ['localhost:9090']
    

    如无其他特殊需求可不做改变;

    3.5 添加机器状态监控

    ~~~java
    // 下载最新版本,可以在github的release中对最新版本右键获取下载链接
    wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
    ~~~
    
    • 解压
      tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
      
    • 进入解压出的目录
      cd node_exporter-0.17.0.linux-amd64
      
    • 运行监控采集服务
      ./node_exporter
      

    可使用后台运行进程命令启动也可以;访问:http://ip:9100/metrics即可验证,如果有对应界面则配置成功

    3.6 配置Prometheus.yml文件

    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'server'
        static_configs:
          - targets: ['localhost:9100']
    

    如果prometheus不在本服务器,则将server下的targets中的localhost改为对应的ip地址;
    重新启动一下

    3.7 配置Grafana

    • 进入Grafana服务器的该Grafana的lib目录下,然后输入以下命令更新插件:
      ./grafana-cli plugins install grafana-piechart-panel
      

    更新插件后重新启动服务

    3.8 配置可视化界面

    • 添加数据源
      在这里插入图片描述
    • 选择Prometheus

    在这里插入图片描述

    • 先输入名称,然后填入http://ip+9090然后直接点Save&Test,成功后则直接点击Dashboards选择展示面板
      在这里插入图片描述
    • 点击导入,可一个也可以全部导入
      在这里插入图片描述
    • 选择左侧边栏的 + 号,点击Imput, 在Grafana.com Dashboard中输入: 8919

    也可以自己选择官方展示面板,链接: https://grafana.com/dashboards

    • 输入号码后点击确定,然后再prometheus选择对应的Prometheus,点击Import即可
      在这里插入图片描述

    3.9 查看效果

    • 左边侧栏选择方块,点击Manage,然后点击刚刚创建的,即可成功展示!
      在这里插入图片描述

    • 展示效果如图所示:
      在这里插入图片描述

    注意:如果需要监控其他服务器,则只需要在其他服务器安装 node_exporter 即可,将其对应的ip地址,端口号等信息配置到已有的Prometheus的Prometheus.yml内即可;格式参照其他,job_name不能命名成一样的,可改成其他名称;Grafana添加数据源和注册仪表盘都是一致的;

    四. Grafana监控系统之邮件报警

    4.1 Grafana服务器配置

    • 关闭服务
      ctrl+c

    如果是后台启动的服务,则用相关的命令关闭grafana web
    如果grafana监控系统没有开启,则无需关闭;

    • 进入grafana目录
      cd grafana-6.0.0
      
    • 编辑配置文件conf
      vim defaults.ini
      

    没有vim直接 yum install vim 即可,使用vi 也可以进行编辑
    在这里插入图片描述
    smtp.qq.com:465是针对qq邮箱的,其他的邮箱的服务器不同,请做对应的改变,直接百度即可;

    • 编辑完退出:
      ESC+:wq+Enter
    • 返回上一级
      cd ..
    • 启动服务
      ./bin/grafana-server web
      

    4.2 Grafana 可视化界面配置

    • 添加
      在这里插入图片描述
    • 输入具体警告内容
      在这里插入图片描述

    如果成功就能接收到邮件,否则查看服务器内配置是否正确;

    4.3 邮件报警总结

    • 此功能可以具体对某些仪表盘的数据设立阀值,如果超过此值则触发报警,具体的应用具体分析,后面补充;

    五. Grafana监控系统之搭建MySQL监控系统

    5.1 步骤概述概述

    1. 下载安装Mysql并配置账号密码
    2. 导入sql文件
    3. 安装mysqld_exporter
    4. 对mysqld_exporter进行操作
    5. 运行mysql_exporter
    6. 加入Prometheus.yml配置
    7. 配置可视化界面

    5.2 下载安装Mysql

    • 如果是对已有的mysql进行操作,请忽略此步骤;

    • 下载mysql的repo源:

      wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
      
    • 安装mysql-community-release-el7-5.noarch.rpm包:

      rpm -ivh mysql-community-release-el7-5.noarch.rpm
      
    • 安装mysql:

      yum install mysql-server -y
      
    • 修改权限,否则会报错:

      chown -R root:root /var/lib/mysql
      
    • 重启mysql服务:

      service mysqld restart
      
    • 登录并重置密码:

      ## 直接回车进入mysql控制台
      mysql -u root
      mysql > use mysql;
      mysql > update user set password=password('123456') where user='root';
      mysql > exit;
      

    5.3 导入sql文件

    1. 下载my2.sql
      https://codeload.github.com/john1337/my2Collector/zip/master
      
    2. 解压文件后将此文件夹内的sql文件放入要监控的Mysql服务器中
    3. 使用命令登录mysql
      mysql -u用户名 -p密码 示例: mysql -uroot -proot
    4. 使用命令导入sql文件
      	source /root/my2.sql
      

    后面的是具体地址,如果位置不对则相应变化

    1. 当出现一系列执行成功,则说明完成;

    5.4 对mysqld_exporter进行操作

    • 先下载并解压:
      https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
      
      tar -xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz
      
    • 创建.my.cnf 文件
      vim vi.my.cnf
      
    • 创建效果如下:
      [client]
      user=root
      password=root
      

    账号密码只要连接得上mysql即可,也可单独为其分配账号;

    • 运行mysql_exporter
      ./mysqld_exporter -config.my-cnf=".my.cnf" &
      

    5.5 加入Prometheus.yml配置

      - job_name: mysql
        static_configs:
          - targets: ['mysql的ip地址:9104']
    

    这里9104不要改动,配好后保存重启Prometheus,然后点击Status->Targets,如果发现mysql的State为Up 状态,则说明已经配置好了
    如果没有配置好,则可以注意一下是否mysql开启了远程访问,一般新安装的msyql都是仅本机可访问;开启远程访问可百度;

    5.6 配置可视化界面

    • 先点击小齿轮添加DataSource,然后点击Mysql,输入对应的ip+端口号,以及账号密码等信息,点击Save&Test进行测试,如果反馈成功则说明配置成功
    • 点击+ 图标,然后选择Import ,可选择官方文档中的仪表盘,这里我使用的是: 7991

    输入7991点Load可自动加载

    • 官方地址: https://grafana.com/dashboards
    • 加载后配置相关的名称地址,以及加载的数据源等信息,点击添加后即可在 小方块 图标的Manage下展示;
    • 效果图如下:
      在这里插入图片描述

    六. Grafana监控系统之开放API

    6.1 概述

    • 在我们使用server类型的访问模式中,访问数据通常有两种形式;一种是直接使用用户登录,获取到的Cookie进行验证;一种是通过 API令牌机制进行资源请求校验;
    • Admin HTTP API目前不支持API令牌。API令牌目前仅链接到组织和组织角色。他们无法获得服务器管理员的许可,只有用户才能获得该权限。因此,为了使用这些API调用,您必须使用Basic Auth,Grafana用户必须具有Grafana Admin权限。(默认管理员用户被调用admin并且有权使用此API。)

    官方文档地址:https://grafana.com/docs/http_api/admin/

    6.2 关于用户登录验证请求资源

    • 无法使用HTTP API的部分,可以使用RestTemplate等工具模拟登录验证,获取Cookie请求资源;而请求资源我们可以使用F12 获取请求的接口地址,需要哪些资源,直接到相关站点界面获取接口地址,模拟登录即可做对应的操作;

    这部分不多加介绍,下面介绍使用HTTP API的方式;

    6.3 创建API 令牌

    • 创建API KEY
      在这里插入图片描述
    • 点击保存
      在这里插入图片描述
    • 将Key后面的内容作为 Authorization中的Bearer 后的内容:
      在这里插入图片描述

    里面的权限为Viewer,Eidtor,和Admin,权限为只能看,可以部分写,以及全部权限;

    6.4 验证HTTP资源/操作 接口示例:

    在这里插入图片描述

    6.5 创建API Key 示例:

    • 请求ip地址和请求头填写内容:
      在这里插入图片描述
    • 请求体内填写内容:
      在这里插入图片描述

    权限类别可分为Viewer,Editor和Admin,Viewer只能查看,Editor可以一些界面进行操作,而Admin是拥有所有权限的角色;
    secondsToLive - 以秒为单位设置密钥到期时间。这是可选的。如果是正数,则设置密钥的到期日期。如果它为null,为零或完全省略(除非api_key_max_seconds_to_live设置了配置选项),密钥将永不过期。

    6.6 删除API Key示例:

    • 先通过查询接口查询到所有Api Key列表
      在这里插入图片描述
    • 拿到需要删除的ApiKey的id,然后使用Delete请求方式,在最后带id即可删除对应id的ApiKey,图示如下:
      在这里插入图片描述

    只要支持HTTP API的均可使用此方式,具体的请求路径和对应资源可进入官方文档查看;
    https://grafana.com/docs/http_api/dashboard/

    七. Grafana监控系统之监控RabbitMQ

    7.1 下载并解压

    • 下载:
      wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC5/rabbitmq_exporter-1.0.0-RC5.linux-amd64.tar.gz
      

    没有wget等命令请自行搜索下载

    • 解压:

      tar -xvf rabbitmq_exporter-1.0.0-RC5.linux-amd64.tar.gz
      
    • 进入目录:

      cd rabbitmq_exporter-1.0.0-RC5.linux-amd64
      
    • 执行命令:

      RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter 2>&1 &
      

    注意里面的PABBIT_USER的账号,以及后面的密码,请按实际账号密码输入,以及端口等;

    7.2 加入Prometheus.yml

    • 进入有Prometheus的服务器,进入Prometheus,编辑prometheus.yml

      vim prometheus.yml
      
    • 配置如下内容:

      - job_name: 'RabbitMQ'
        static_configs:
      	- targets: ['Rabbit的ip地址:9099']
      

    这里的ip地址写Rabbit的地址,端口号默认都写9099;

    7.3 进入Grafana配置RabbitMQ地址

    1. 浏览器输入:ip地址+3000 进入Grafana 默认账户和密码都是admin
    2. 点击小齿轮,点击**Data Sources **
      在这里插入图片描述
    3. 点击右侧 **Add data source ** 选择Prometheus
    4. 编辑Prometheus的配置信息,Name为名称,URL为 http://promethues的服务器地址和端口号(9090)

    这里的URL不是写RabbitMQ的服务器地址,而是Prometheus的地址,注意不要弄错;

    1. 点击Save&Test进行测试,如果下方出现小绿条提示: Data source is working 则说明安装成功
    2. 点击左侧的 + 图标,选择Import,在第一个输入框中输入 2121 ,然后点击 Load
    3. 点击左侧小方块图标,点击Manage 选择刚刚配好的,点击进入即可展示,效果图如下:
      在这里插入图片描述

    八. Grafana监控系统之监控Redis

    8.1 下载并解压

    • 下载:
      wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.3/redis_exporter-v1.0.3.linux-amd64.tar.gz
      
    • 解压:
      tar -xvf redis_exporter-v1.0.3.linux-amd64.tar.gz
      

    8.2 启动 Redis_exporter

    • 无密码:
      ./redis_exporter redis//192.168.1.120:6379 &
      
    • 有密码:
      redis_exporter  -redis.addr 192.168.1.120:6379  -redis.password 123456****
      

    里面的ip地址和端口号请根据自身实际来

    8.3 配置Prometheus.yml

    • 进入prometheus的服务器,然后进入prometheus.yml,进行编辑:
    • 编辑:
      vim prometheus.yml
      
    • 内容如下:
       - job_name: redis
          static_configs:
            - targets: ['ip地址:9121']
      

    8.4 检查Redis状态

    • 进入地址
      Premetheus的ip地址:9090/targets
      

    如果显示State的结果为 UP 则说明成功。

    8.5 配置Grafana的数据源

    • 登录网站:
      Grafana的ip地址:3000
      
    • 添加数据源,如果之前已经在Grafana中添加了此DataSource(指向了安装有Prometheus的ip地址和对应端口),则无需重新添加,在导入面板的时候,可以直接引用此DataSource;

    8.6 配置展示面板

    1. 先进行登陆,登陆后点击 + 号选择Import
    2. 在第一个框框内输入: 731

    注意,也可以自己找其他的展示面板,在官方的面板页面找到数据源为Prometheus的Redis展示面板,在上方所说的对应位置输入它的编号即可
    官方控制面板地址:https://grafana.com/dashboards

    8.7 直接查看,展示效果图如下:

    **https://grafana.com/dashboards**

    九.Grafana监控系统之监控TiDB

    9.1 下载二进制包并解压

    • 下载
      wget https://github.com/prometheus/node_exporter/releases/download/v0.15.2/node_exporter-0.15.2.linux-amd64.tar.
      
    • 解压
      tar -xzf node_exporter-0.15.2.linux-amd64.tar.gz
      

    9.2 启动服务

    • 进入目录:
      cd node_exporter-0.15.2.linux-amd64
      
    • 启动 node_exproter服务
      ./node_exporter --web.listen-address=":9100" \ --log.level="info" &
      

    9.3 在Prometheus.yml中配置

    • 进入Prometheus所在的服务器,并进入该Prometheus目录
      cd prometheus-2.2.1.linux-amd64
      
    • 编辑 prometheus.yml
      vim prometheus.yml
      
    • 新增内容如下:
        - job_name: 'tidb'
          honor_labels: true  # 不要覆盖 job 和实例的 label
          static_configs:
          - targets: ['tidb所在服务器ip地址:10080']
      

    这里配置好了以后,需要重新启动一下Prometheus.yml,然后登陆 ip地址:9090/targets 如果Status显示为 UP 则说明成功;

    9.4 启动Grafana服务

    ./prometheus \
        --config.file="./prometheus.yml" \
        --web.listen-address=":9090" \
        --web.external-url="http://192.168.199.113:9090/" \
        --web.enable-admin-api \
        --log.level="info" \
        --storage.tsdb.path="./data.metrics" \
        --storage.tsdb.retention="15d" &
    

    9.5 启动Grafana并配置DataSource

    • 按照正常命令启动,如果已经启动过则无需改;
    • 如果前面已经对此Prometheus的DataSource进行过配置,则无需再次配置,在导入展示面板的时候直接指向此已经写好的展示面板即可;

    9.6 导入Grafana面板

    1. 在侧边栏菜单中,依次点击 + 号 > Import 打开 Import Dashboard 窗口。

    2. 点击 Upload .json File 上传对应的 JSON 文件(https://github.com/pingcap/tidb-ansible/tree/master/scripts)。

    3. 注意:TiDB 面板对应的 JSON 文件为tidb.json 。 (我们可以通过上面的链接进入找到此tidb.json然后将内容复制出来命名为tidb.json然后导入)

    4. 点击 Load。

    5. 选择一个 Prometheus 数据源。(以前对这个Prometheus创建过数据源,我们可以重复利用,直接指向即可)

    6. 点击 Import,Prometheus 面板即导入成功。

    9.7 在Mangae 里面可以直接预览,展示效果图如下

    在这里插入图片描述

    码子不易,喜欢的话点个关注或收藏吧~ ^^

    展开全文
  • 变电站监控系统CAD图,变电站遥视系统图,视频监控、安防监控相关的CAD图像模版,直接可以用,省得自己一个一个去画了。
  • 视频监控系统VISIO素材图标. 宗旨:好用、够用、能用。
  • QT编写的简易安防视频监控系统

    千次下载 热门讨论 2014-07-19 17:46:25
    说明: 1:此示例只是用来显示视频流 并没有处理存储视频及回放视频功能 2:在打开项目后务必将构建里面的影子构建 Shadow build 取消 3:实时显示视频 视频响应速度比VLC QTAV等播放器快很多倍 ...
  • 开发一套基于andorid平台通过socket跟服务器实时通信的MES监控系统 该系统实现了图表曲线的实时绘制和实时数据的动态显示 可直接运行。做毕业设计、课程设计或者想研究下技术的可以下载学习。需要更多资源的可以...
  • QT实战之监控系统

    千人学习 2018-08-10 03:32:02
    支持添加摄像头播放监控画面,支持1、4、9、16分屏显示,通过封装播放器,可以支持多协议,本地视频多种播放方式,随意封装播放器功能,并且可在此基础上对本次监控系统进行二次开发,友好的界面操作,支持系统拖盘...
  • 监控系统图 visio 图

    热门讨论 2012-06-25 16:54:11
    一般行业的监控系统图 visio原图 可以按照自己的需要来修改。很实用 很基本的东西 给需要的人
  • 搞定Prometheus普罗米修斯监控系统

    千次阅读 2021-01-17 00:33:59
    能够通过安装node_exporter监控远程linux 能够通过安装mysqld_exporter监控远程mysql数据库 能够安装grafana 能够在grafana添加prometheus数据源 能够在grafana添加监控cpu负载的图形 能够在grafana图形显示...

    目录

     

    学习目录

    任务背景

    任务分析

    一、普罗米修斯概述

    二、时间序列数据

    三、实验环境准备

    1、安装prometheus

    2、prometheus界面

    3、主机数据展示

    4、普罗米修斯默认的监控图像​

    四、使用普罗米修斯监控Linux 主机

    1、node组件介绍

    2、安装node_exporter

    3、让普罗米修斯监控可以拉取node 节点信息

    五、使用普罗米修斯监控mysqld 服务

    1、如何监控其他服务

    2、安装mysqld_exporter 组件

    3、安装mysql,并启动

    4、创建mysql 账号

    5、在mysqld_exporter 组件中配置msyql 信息

    6、启动mysqld_exporter组件

    7、让普罗米修斯监控可以拉取mysqld 节点信息

    六、Grafana 可视化工具

    1、什么是Grafana

    2、安装Grafana

    3、登录Grafana 

    4、添加普罗米修斯的数据源

    5、为添加好的数据源做图形显示

    七、Grafana图形显示MySQL监控数据

    1、修改配置文件安装模板

    2、在Grafana 中导入json 文件

    3、设置数据库源

    4、更改数据源名称

    八、Grafana + onealert 报警

    1、onealert

    2、在Grafana中配置Webhook URL


    学习目录

    • 能够安装prometheus服务器
    • 能够通过安装node_exporter监控远程linux
    • 能够通过安装mysqld_exporter监控远程mysql数据库
    • 能够安装grafana
    • 能够在grafana添加prometheus数据源
    • 能够在grafana添加监控cpu负载的图形
    • 能够在grafana图形显示mysql监控数据
    • 能够通过grafana+onealert实现报警

    任务背景

    AAA公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行为业务监控,责成运维部门来实施这个项目。

    任务要求:

    1. 部署监控服务器,实现7*24实时监控
    2. 针对公司的为一务及研发部门设计监控系统,对监控项和触发器拿出合理意见
    3. 做好问题预警机制,对可能出的问题要及时告警并形成严格的处理机制
    4. 做好监控告警系统,要求可以实现告警分级
      1. 一级报警 电话通知
      2. 二级报警 微信通知
      3. 三级报警 邮件通知
    5. 处理好公司服务器异地集中监控问题,K8S内部使用的监控系统就是普罗米修斯


    任务分析

    为什么要监控?

    实时收集数据,通过报警及时发现问题 ,及时处理。数据为优化也可以提供依据。

    监控四要素:

    • 监控对象:【主机状态、服务、资源、页面、url】
    • 用什么监控:【zabbix-server zabbix-agent】 -> 普罗米修斯监控
    • 什么时间监控:【7 x 24、5x8】
    • 报警给谁:【管理员】

    项目选型:

    • mrtg(Multi Router Traffic Grapher)通过snmp 协议得到设备的流量信息,并以包含PNG格式的图形的HTML文档方式显示给用户。
    • cacti(仙人掌)用php语言实现的一个软件,它的主要功能是用snmp 服务获取数据,然后用rrdtool 存储和更新数据。官网地址:https://www.cacti.net/
    • ntop 官网地址:https://www.stopo.org/
    • nagios 能够跨平台,插件多,报警功能强大。官网地址: https://www.nagios.org/
    • centreon 底层使用的就是nagios。是一个nagios整合版软件。官网地址:https://www.centreon.com/
    • ganglia 设计用于测量数以千计的节点,资源消耗非常小。官网地址:http://ganglia.info/
    • open-falcon 小米发布的运维监控软件,高效率,高可用。时间较短,用户基数小。官网地址: http://open-falcon.org/
    • zabbix 跨平台,画图,多条件告警,多种API接口。使用基数特别大。官网地址: https://www.zabbix.com/
    • prometheus 基于时间序列的数值数据的容器监控解决方案。官网地址: https://prometheus.io/
       

    综合分析:Prometheus比较适合公司的监控需求


    一、普罗米修斯概述

    Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。https://prometheus.io/docs/introduction/overview/

    二、时间序列数据

    1、什么是序列数据
    时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用的场景很多, 如:

    • 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距
    • 离等等。每时每刻都要将数据记录下来做分析。
    • 某一个地区的各车辆的行驶轨迹数据
    • 传统证券行业实时交易数据
    • 实时运维监控数据等

    2、时间序列数据特点

    • 性能好

    关系型数据库对于大规模数据的处理性能糟糕。NOSQL可以比较好的处理大规模数据,让依然比不上时间序列数据库。

    • 存储成本低

    高效的压缩算法,节省存储空间,有效降低IO,Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了200多G(来自官方数据)

    3、Prometheus的主要特征

    • 多维度数据模型
    • 灵活的查询语言
    • 不依赖分布式存储,单个服务器节点是自主的
    • 以HTTP方式,通过pull模型拉去时间序列数据
    • 也可以通过中间网关支持push模型
    • 通过服务发现或者静态配置,来发现目标服务对象
    • 支持多种多样的图表和界面展示

    4、普罗米修斯原理架构图


    三、实验环境准备

    序号服务器IP角色
    1node-01 (172.20.10.7)被监控服务器
    2node-02 (172.20.10.8)Prometheus 服务器
    3node-03 (172.20.10.9)grafana 服务器

    1. 静态ip(要求能上外网)【三台服务器都要操作】
    2. 主机名【三台服务器都要操作】: vi /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    ## BigData CDH 5.x
    172.20.10.7 node-01.bigdata.com node-01
    172.20.10.8 node-02.bigdata.com node-02
    172.20.10.9 node-03.bigdata.com node-03

    3. 时间同步(时间同步一定要确认一下)【三台服务器都要操作】

    # crontab -e
    # .------------------------------------------minute(0~59)
    # | .----------------------------------------hours(0~23)
    # | | .--------------------------------------day of month(1~31)
    # | | | .------------------------------------month(1~12)
    # | | | | .----------------------------------day of week(0~6)
    # | | | | | .--------------------------------command
    # | | | | | |
    # | | | | | |
    */1 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

    4. 关闭防火墙

    systemctl stop firewalld       (当前开机状态生效)
    systemctl disable firewalld    (永久生效,重启才生效)
    systemctl status firewalld 

    5. SELINUX关闭

    setenforce 0   (当前开机状态生效)
    vi /etc/selinux/config (SELINUX=disabled)   (永久生效,重启生效)

    1、安装prometheus

    https://prometheus.io/download/ 下载相应版本,安装到服务器上官网提供的是二进制版,解压就能用,不需要编译

    第一步:上传软件prometheus-2.5.0.linux-amd64.tar.gz 到Linux服务器目录下:/home/tools

    第二步:解压软件:tar -zxvf /home/tools/prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local/

    第三步:创建prometheus软链接:ln -s /usr/local/prometheus-2.5.0.linux-amd64 /usr/local/prometheus

    第四步:启动普罗米修斯软件

    直接使用默认配置文件启动
    [root@server ~]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
    
    注: &连接符代表后台运行,不占用终端窗口

    第五步:测试端口占用情况(判断是否真正的启动了)

    如果没有安装的话:yum install lsof
    [root@server ~]# lsof -i:9090   或   ss -naltp | grep 9090

    ss -naltp | grep 9090

    2、prometheus界面

    通过浏览器访问http://服务器IP:9090就可以访问到prometheus的主界面。即: http://node-02:9090

    默认只监控了本机一台,点Status --》点Targets --》可以看到只监控了本机


    3、主机数据展示

    通过http://服务器IP:9090/metrics可以查看到监控的数据

    在web主界面可以通过关键字查询监控项

    4、普罗米修斯默认的监控图像


    四、使用普罗米修斯监控Linux 主机

    1、node组件介绍

    在远程linux 主机(被监控端agent)上安装node_exporter组件(这样普罗米修斯就可以接收到其收集系统)。

    下载地址:https://prometheus.io/download/

    2、安装node_exporter

    第一步:上传软件包到Linux 服务器中(Agent 被监控端)node-01服务器中:node_exporter-0.16.0.linux-amd64.tar.gz

    第二步:解压安装node_exporter 组件

    tar -zxvf /home/tools/node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local/
    
    ln -s /usr/local/node_exporter-0.16.0.linux-amd64 /usr/local/node_exporter

    第三步:启动node_exporter组件

    里面就一个启动命令node_exporter,可以直接使用此命令启动
    ls /usr/local/node_exporter/
    LICENSE node_exporter NOTICE
    
    启动指令,&代表后台运行,nohup代表永久运行
    nohup /usr/local/node_exporter/node_exporter &

    扩展: nohup命令: 如果把启动node_exporter的终端给关闭,那么进程也会随之关闭。nohup命令会帮你解决这个问题。
     

    第四步:查看9100 端口占用情况

    ss -naltp | grep 9100

    第五步:使用http 协议 + 9100 端口收集Linux 主机信息

    通过浏览器访问 http://被监控端IP:9100/metrics 就可以查看到node_exporte在被监控端收集的监控信息。即:http://node-01:9100/metrics


    3、让普罗米修斯监控可以拉取node 节点信息

    回到prometheus服务器的配置文件里添加被监控机器的配置段
     

    在主配置文件最后加上下面三行

    vi /usr/local/prometheus/prometheus.yml

    具体配置如下:文件的最后添加内容

      
      - job_name: 'node-01_agent1' # 取一个job名称来代 表被监控的机器
        static_configs:
        - targets: ['172.20.10.7:9100'] # 这里改成被监控机器 的IP,后面端口接9100 

    设置完成后,保存,然后重新启动Prometheus  普罗米修斯监控系统 

    改完配置文件后,重启服务 
    [root@node-02 prometheus]# pkill prometheus 
    [root@node-02 prometheus]# lsof -i:9090 
    
    # 确认端口没有进程占 用
    [root@node-02 prometheus]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
    
    [root@node-02 prometheus]# lsof -i:9090    # 确认端口被占用,说明重启成功
    或
    [root@node-02 prometheus]# ss -naltp | grep 9090

    回到web 管理界面 --》点Status --》 点Targets --》可以看到多了一台监控目标

    通过浏览器访问http://服务器IP:9090就可以访问到prometheus的主界面。即: http://node-02:9090


    五、使用普罗米修斯监控mysqld 服务

    1、如何监控其他服务

    在node_exporter 的基础上,可以根据自己的需要收集其他信息

    2、安装mysqld_exporter 组件

    下载地址:https://prometheus.io/download/

    第一步:上传组件到Linux 服务器

    第二步:解压与安装mysqld组件

    tar -zxvf /home/tools/mysqld_exporter-0.11.0.linux-amd64.tar.gz -C /usr/local/
    
    ln -s /usr/local/mysqld_exporter-0.11.0.linux-amd64 /usr/local/mysqld_exporter
    
    [root@node-01 local]# ls /usr/local/mysqld_exporter
    LICENSE  mysqld_exporter  NOTICE

    3、安装mysql,并启动

    安装过程。这里不要误解哈,因为之前node-01节点上已经安装了社区版本的mysql服务,所以想直接使用。但发现还不是很满意,所以又在node-03上安装了mariadb

    安装mariadb数据库,并授权
    [root@node-03 ~]# yum install mariadb\* -y
    [root@node-03 ~]# systemctl restart mariadb
    [root@node-03 ~]# systemctl enable mariadb
    [root@node-03 ~]# mysql

    这个过程比较简单【跳过】:ss -naltp | grep 3306

    4、创建mysql 账号

    mysql -u root -p aa_bb_CC1234
    
    grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by 'aa_bb_CC1234';
    flush privileges;
    quit

    5、在mysqld_exporter 组件中配置msyql 信息

    这个文件是手工创建

    创建一个mysql 配置文件,写上连接的用户名与密码(和上面的授权的用户名
    和密码要对应)
    [root@node-01 mysqld_exporter]# vi /usr/local/mysqld_exporter/.my.cnf
    [client]
    user=mysql_monitor
    password=aa_bb_CC1234

    6、启动mysqld_exporter组件

    启动mysqld_exporter
    [root@node-01 ~]# nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &
    
    
    确认端口(9104)
    [root@node-01 ~]# ss -naltp | grep 9104


    7、让普罗米修斯监控可以拉取mysqld 节点信息

    回到prometheus服务器的配置文件里添加被监控机器的配置段
     

    在主配置文件最后加上下面三行

    vi /usr/local/prometheus/prometheus.yml

    具体配置如下:文件的最后添加内容

      
      - job_name: 'mysql_agent' # 取一个job名称来代 表被监控的机器
        static_configs:
        - targets: ['172.20.10.7:9104'] # 这里改成被监控机器 的IP,后面端口接9100 

    设置完成后,保存,然后重新启动Prometheus  普罗米修斯监控系统 

    改完配置文件后,重启服务 
    [root@node-02 prometheus]# pkill prometheus 
    [root@node-02 prometheus]# lsof -i:9090 
    
    # 确认端口没有进程占 用
    [root@node-02 prometheus]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
    
    [root@node-02 prometheus]# lsof -i:9090    # 确认端口被占用,说明重启成功
    或
    [root@node-02 prometheus]# ss -naltp | grep 9090

    回到web 管理界面 --》点Status --》 点Targets --》可以看到多了一台监控目标

    通过浏览器访问http://服务器IP:9090就可以访问到prometheus的主界面。即: http://node-02:9090


    六、Grafana 可视化工具

    1、什么是Grafana

    Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。

    网址: https://grafana.com/

    它是开源的时序数据分析平台    目前支持52种数据源,其中promethus 就是其中支持的一种

    2、安装Grafana

    下载地址:https://grafana.com/grafana/download

    我这里选择的rpm包,下载后直接rpm -ivh安装就OK
    [root@node-03 ~]# rpm -ivh /home/tools/grafana-5.3.4-1.x86_64.rpm
    
    或
    yum install grafana-5.3.4-1.x86_64.rpm -y
    
    启动服务
    [root@node-03 ~]# systemctl start grafana-server
    设置开机自启动
    [root@node-03 ~]# systemctl enable grafana-server
    
    确认端口(3000)
    [root@node-03 ~]# ss -naltp | grep 3000

    3、登录Grafana 

    http://node-03:3000/login

    默认的账号与密码:admin。首次登录后,需要对admin的密码进行更改,如:123456

    4、添加普罗米修斯的数据源

    第一步:添加数据源

    第二步:设置数据源、数据源名称、类型、IP地址、端口号...

    5、为添加好的数据源做图形显示

    第一步:点击加号,选择Dashboard

    第二步:增加一个图形

    第三步:选择需要呈现图形的数据(小三角 =》Edit 编辑)

    第四步:选择DataSource 数据源,选择普罗米修斯 

    第五步:可以把我们设计完的图形保存起来

    扩展,第六步:根据条件帅选我们想要的数据


    七、Grafana图形显示MySQL监控数据

    1、修改配置文件安装模板

    在grafana上修改配置文件,并下载安装mysql监控的dashboard(包含相关json文件,这些json文件可以看作是开发人员开发的一个监控模板)

    参考网址: https://github.com/percona/grafana-dashboards
     

    在grafana配置文件里最后加上以下三行
    [root@node-03 ~]# vi /etc/grafana/grafana.ini
    [dashboards.json]
    enabled = true
    path = /var/lib/grafana/dashboards
    
    
    [root@node-03 ~]# cd /var/lib/grafana/
    [root@node-03 grafana]# git clone https://github.com/percona/grafana-dashboards.git
    [root@grafana grafana]# cp -r grafanadashboards/dashboards/ /var/lib/grafana/
    
    如果网速过慢,可以先通过windows下载好再上传至服务器
    mkdir /var/lib/grafana/dashboards
    然后下载好的dashboars目录下的.json文件全部上传至 /var/lib/grafana/dashboards
    
    重启grafana服务
    [root@node-03 grafana]# systemctl restart grafana-server

    2、在Grafana 中导入json 文件

    选择上传MySQL_Overview.json,设置完成后,单点Import 

    3、设置数据库源

    点import导入后,报prometheus数据源找不到,因为这些json文件里默认要找的就是叫Prometheus的数据源,但我们前面建立的数据源却是叫 prometheus_data(坑啊

    4、更改数据源名称

    那么请自行把原来的prometheus_data源改名为Prometheus即可(注意:第一个字母P是大写)。然后再回去刷新,就有数据了(如下图所示)


    八、Grafana + onealert 报警

    1、onealert

    https://caweb.aiops.com/#/integrate,需要先在这个系统中进行注册一个账号。然后登录。

    2、在Grafana中配置Webhook URL

    第一步:在Grafana中创建Notification channel,选择类型为Webhook;

    第三步:将配置的Webhook Notification Channel添加到Grafana Alert中

    设置告警内容:发送给运维负责人

    CPU负载测试

    cat /dev/urandom | md5sum

    测试告警情况:

     

    测试结果:

    告警后,邮箱收到报警邮件

    如果告警消除后,也会收到一封告警消除的邮件。

    同时,使用手机扫描二维码,也可以详细了解告警信息。


    文章最后,给大家推荐一些受欢迎的技术博客链接

    1. JAVA相关的深度技术博客链接
    2. Flink 相关技术博客链接
    3. Spark 核心技术链接
    4. 设计模式 —— 深度技术博客链接
    5. 机器学习 —— 深度技术博客链接
    6. Hadoop相关技术博客链接
    7. 超全干货--Flink思维导图,花了3周左右编写、校对
    8. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
    9. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
    10. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
    11. 深入聊聊Java 垃圾回收机制【附原理图及调优方法】

    欢迎扫描下方的二维码或 搜索 公众号“大数据高级架构师”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                               

           

     

     

    展开全文
  • 【完整版】视频监控系统visio图标

    热门讨论 2016-10-05 22:33:50
    【完整版】视频监控系统visio图标
  • 基于web视频监控系统

    热门讨论 2012-04-06 00:26:08
    基于web视频监控系统,,,,,基于web视频监控系统
  • 视频监控系统源代码

    热门讨论 2011-12-27 17:31:50
    这是视频监控系统的源代码。有需要的可以拿去看看,看了记得自己也动手写写。对你会有帮助的。对于没有开发经验的学生来说,还是很有帮助的。
  • Web车辆监控系统网站源代码

    热门讨论 2013-07-01 16:03:28
    功能有最后位置、实时监控、历史轨迹、地图标注、设置围栏、指令下发、里程统计、地图搜索、报警管理、用户和组管理、报表查询等功能。由于上传空间有限,数据库及配置文件分开上传:...
  • 监控系统的设计

    万次阅读 2019-09-29 14:35:53
    经济高速发展的今天,我们处于信息大爆炸的时代。...就在这样一个纷繁复杂地环境下,监控系统粉墨登场了。 今天,我们会对 IT 监控系统进行介绍,包括其功能,分类,分层;同时也会介绍几款流行的监控平台...

    经济高速发展的今天,我们处于信息大爆炸的时代。随着经济发展,信息借助互联网的力量在全球自由地流动,于是就催生了各种各样的服务平台和软件系统。

    由于业务的多样性,这些平台和系统也变得异常的复杂。如何对其进行监控和维护是我们 IT 人需要面对的重要问题。就在这样一个纷繁复杂地环境下,监控系统粉墨登场了。

    今天,我们会对 IT 监控系统进行介绍,包括其功能,分类,分层;同时也会介绍几款流行的监控平台。

    监控系统的功能

    在 IT 运维过程中,常遇到这样的情况:

    • 某个业务模块出现问题,运维人员并不知道,发现的时候问题已经很严重了。
    • 系统出现瓶颈了,CPU 占用持续升高,内存不足,磁盘被写满;网络请求突增,超出网关承受的压力。

    以上这些问题一旦发生,会对我们的业务产生巨大的影响。因此,每个公司或者 IT 团队都会针对此类情况建立自己的 IT 监控系统。

     

    想吃透监控系统,就这一篇够不够?

     

     

    监控系统工作流程图

    其功能包括:

    • 对服务,系统,平台的运行状态实时监控。
    • 收集服务,系统,平台的运行信息。
    • 通过收集信息的分析结果,预知存在的故障风险,并采取行动。
    • 根据对风险的评估,进行故障预警。
    • 一旦发生故障,第一时间发出告警信息。
    • 通过监控数据,定位故障,协助生成解决方案。
    • 最终保证系统持续、稳定、安全运行。
    • 监控数据可视化,便于统计,按照一定周期导出、归档,用于数据分析和问题复盘。

    监控系统的分类

    既然监控系统对我们意义重大,针对不同场景把监控系统分为三类,分别是:

    • 日志类
    • 调用链类
    • 度量类

    日志类

    通常我们在系统和业务级别上加入一些日志代码,记录一些日志信息,方便我们在发现问题的时候查找。

    这些信息会与事件做相关,例如:用户登录,下订单,用户浏览某件商品,一小时以内的网关流量,用户平均响应时间等等。

    这类以日志的记录和查询的解决方案比较多。比如 ELK 方案(Elasticsearch+Logstash+Kibana),使用ELK(Elasticsearch、Logstash、Kibana)+Kafka/Redis/RabbitMQ 来搭建一个日志系统。

     

    想吃透监控系统,就这一篇够不够?

     

     

    ELK 结合 Redis/Kafka/RabbitMQ 实现日志类监控

    程序内部通过 Spring AOP 记录日志,Beats 收集日志文件,然后用 Kafka/Redis/RabbitMQ 将其发送给 Logstash,Logstash 再将日志写入 Elasticsearch。

    最后,使用 Kibana 将存放在 Elasticsearch 中的日志数据显示出来,形式可以是实时数据图表。

    调用链类

    对于服务较多的系统,特别是微服务系统。一次服务的调用有可能涉及到多个服务。A 调用 B,B 又要调用 C,好像一个链条一样,形成了服务调用链。

    调用链就是记录一个请求经过所有服务的过程。请求从开始进入服务,经过不同的服务节点后,再返回给客户端,通过调用链参数来追踪全链路行为。从而知道请求在哪个环节出了故障,系统的瓶颈在哪儿。

    调用链监控的实现原理如下:

    ①Java 探针,字节码增强

     

    想吃透监控系统,就这一篇够不够?

     

     

    Java 代码运行原理图

    在介绍这种方式之前,我们先来复习一下 Java 代码运行的原理。通常我们会把 Java 源代码,通过“Java 编译器”编译成 Class 文件。再把这个 Class 的字节码文件装载到“类装载器”中进行字节码的验证。

    最后,把验证过后的字节码发送到“Java 解释器”和“及时编译器”交给“Java 运行系统”运行。

    Java 探针,字节码增强的方式就是利用 Java 代理,这个代理是运行方法之前的拦截器。

    在 JVM 加载 Class 二进制文件的时候,利用 ASM 动态的修改加载的 Class 文件,在监控的方法前后添加需要监控的内容。

    例如:添加计时语句,用于记录方法耗时。将方法耗时存入处理器,利用栈先特性(先进后出)处理方法调用顺序。

    每当请求处理结束后,将耗时方法和入参 map 输出到文件中,然后根据 map 中相应参数,区分出耗时业务。

    最后将相应耗时文件取下来,转化为 xml 格式并进行解析,通过浏览器将代码分层结构展示出来。

     

    想吃透监控系统,就这一篇够不够?

     

     

    Java 探针工具原理图

    备注:ASM 是一个 Java 字节码操纵框架,它可以动态生成类或者增强既有类的功能。

    ASM 可以直接产生二进制 Class 文件,可以在类被载入 Java 虚拟机之前改变类行为。

    Java Class 被存储在 .class文件里,文件拥有元数据来解析类中的元素:类名称、方法、属性以及 Java 字节码(指令)。

    ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够生成新类。

    ②拦截请求

    获取每次请求服务中的信息来实现跟踪的。这里以 Zipkin+Slueth 为例说明其原理。

    Sleuth 提供链路追踪。由于一个请求会涉及到多个服务的互相调用,而这种调用往往成链式结构,经过多次层层调用以后请求才会返回。常常使用 Sleuth 追踪整个调用过程,方便理清服务间的调用关系。

     

    想吃透监控系统,就这一篇够不够?

     

     

    Sleuth 服务调用追踪图例

    每次请求都会生成一个 Trace ID,如上图所示这个 Trace ID 在整个 Request 和 Response 过程中都会保持一致,不论经过了多少个服务。这是为了方便记录一次调用的整个生命周期。

    再看每次请求的时候都会有一个 Span ID,这里的 Span 是 Sleuth 服务跟踪的最小单元,每经过一个服务,每次 Request 和 Response 这个值都会有所不同,这是为了区分不同的调用动作。

    针对每个调用的动作,Sleuth 都做了标示如下:

    • Server Received 是服务器接受,也就是服务端接受到请求的意思。
    • Client Sent 是客户端发送,也就是这个服务本身不提供响应,需要调用其他的服务提供该响应,所以这个时候是作为客户端发起请求的。
    • Server Sent 是服务端发送,看上图SERVICE 3 收到请求后,由于他是最终的服务提供者,所以作为服务端,他需要把请求发送给调用者。
    • Client Received 是客户端接受,作为发起调用的客户端接受到服务端返回的请求。

    实际上 Sleuth 就是通过上述方式把每次请求记录一个统一的 Trace ID,每个请求的详细步骤记作 Span ID。

    每次发起请求或者接受请求的状态分别记录成 Server Received,Client Sent,Server Sent,Client Received 四种状态来完成这个服务调用链路的跟踪的。

     

    想吃透监控系统,就这一篇够不够?

     

     

    Sleuth 服务调用追踪图例

    在调用服务的链路上每个被调用的服务节点都会通过 Parent ID 来记录发起调用服务的 Span ID,由于 Span ID 是唯一确认最小服务单元的,所以知道了 Parent 的 Span ID 也就知道了谁调用自己了。

    度量类

    实现了时序数据库(TimeSeriesData,TSD)的监控方案。实际上就是记录一串以时间为维度的数据,然后再通过聚合运算,查看指标数据和指标趋势。说白了,就是描述某个被测主体在一段时间内的测量值变化(度量)。

    由于 IT 基础设施,运维监控和互联网监控的特性,这种方式被广泛应用。一般对时序数据进行建模分为三个部分,分别是:主体,时间点和测量值。

    通过这个例子来看一下,时序数据库的数学模型,例如:需要监控服务器的 In/Out 平均流量:

    • 整个监控的数据库称为“Metric”,它包含了所有监控的数据。类似关系型数据库中的 Table。
    • 每条监控数据,称为“Point”,类似于关系型数据库中的 Row 的概念。
    • 每个“Point”都会定义一个时间戳“Timestamp”,将其作为索引,表明数据采集的时间。
    • “Tag”作为维度列,表示监控数据的属性。
    • “Field”作为指标列,作为测量值,也就是测量的结果。

     

    想吃透监控系统,就这一篇够不够?

     

     

    时序数据库数据模型图例

    时序数据库的存储原理,关系型数据库存储采用的是 B tree,虽然降低了数据查询的磁盘寻道时间,但是无法解决大量数据写入时的磁盘效率。

    由于监控系统的应用场景,经常会遇到大批量的数据写入,所以我们会选择 LSMtree(Log Structured Merge Tree)存储时序数据库。

    LSMtree(Log Structured Merge Tree),从字面意义上理解,记录的数据按照日志结构(Log Structured)追加到系统中,然后通过合并树(Merge Tree)的方式将其合并。

    来看一个 LevelDB 的例子,方便我们理解,LSM-tree 被分成三种文件:

    • 接收写入请求的 memtable 文件(内存中)
    • 不可修改的 immutable memtable 文件(内存中)
    • 磁盘上的 SStable文件(Sorted String Table),有序字符串表,这个有序的字符串就是数据的key。SStable 一共有七层(L0 到 L6)。下一层的总大小限制是上一层的 10 倍。

     

    想吃透监控系统,就这一篇够不够?

     

     

    LSMtree LevelDB 存储示意图

    LSMtree 写入流程:

    • 将数据追加到日志 WAL(Write Ahead Log)中,写入日志的目的是为了防止内存数据丢失,可以及时恢复。
    • 把数据写到 memtable 中。
    • 当 memtable 满了(超过一定阀值),就将这个 memtable 转入 immutable memtable 中,用新的 memtable 接收新的数据请求。
    • immutablememtable 一旦写满了, 就写入磁盘。并且先存储 L0 层的 SSTable 磁盘文件,此时还不需要做文件的合并。

    每层的所有文件总大小是有限制的(8MB,10MB,100MB… 1TB)。从 L1 层往后,每下一层容量增大十倍。

    • 某一层的数据文件总量超过阈值,就在这一层中选择一个文件和下一层的文件进行合并。

    如此这般上层的数据都是较新的数据,查询可以从上层开始查找,依次往下,并且这些数据都是按照时间序列存放的。

    监控系统的分层

    谈完了监控系统的分类,再来聊聊监控系统的分层。用户请求到数据返回,经历系统中的层层关卡。

     

    想吃透监控系统,就这一篇够不够?

     

     

    监控系统分层示意图

    一般我们将监控系统分为五层来考虑,当然也有人分成三层,大致的意思都差不多,仅供参考:

    • 客户端监控,用户行为信息,业务返回码,客户端性能,运营商,版本,操作系统等。
    • 业务层监控,核心业务的监控,例如:登录,注册,下单,支付等等。
    • 应用层监控,相关的技术参数,例如:URL 请求次数,Service 请求数量,SQL 执行的结果,Cache 的利用率,QPS 等等。
    • 系统层监控,物理主机,虚拟主机以及操作系统的参数。例如:CPU 利用率,内存利用率,磁盘空间情况。
    • 网络层监控,网络情况参数。例如:网关流量情况,丢包率,错包率,连接数等等。

    流行的监控系统

    前面讲了监控系统的功能,分类,分层,相信大家对 IT 监控系统都有一定的了解了。

    接下来,我们来看看有哪些优秀实践。这里介绍两个比较流行的监控系统:

    • Zabbix
    • Prometheus

    Zabbix

    Zabbix 是一款企业级的分布式开源监控方案。它由 Alexei Vladishev 创建,由 Zabbix SIA 在持续开发和支持。

    Zabbix 能够监控网络参数,服务器健康和软件完整性。它提供通知机制,允许用户配置告警,从而快速反馈问题。

    基于存储的数据,Zabbix 提供报表和数据可视化,并且支持主动轮询和被动捕获。它的所有报告、统计信息和配置参数都可以通过 Web 页面访问。

    Zabbix 的 API 功能,完善度很高,大部分操作都提供了 API 接口,方便和现有系统整合。

    例如:通过历史数据查询 API,获取线上服务器使用情况,生成报表;设置条件,对问题服务器和问题业务进行筛选,加入告警。

    利用 Zabbix graph 的 API,生成关键指标趋势图,方便运维人员实时了解系统情况。利用告警添加 API,让监控系统和部署系统联动。

    比如新部署了一个新实例,那么自动添加所需要的监控策略;反之,下线一个实例,就删除关联的监控策略。

    Zabbix 由 Server,Agent,Proxy(可选项)组成:

    • Agent 负责收集数据,并且传输给 Server。
    • Server 负责接受 Agent 的数据,进行保存或者告警。
    • Proxy 负责代理 Server 收集 Agent 传输的数据,并且转发给 Server。Proxy 是安装在被监控的服务器上的,用来和 Server 端进行通信,从而传输数据。

     

    想吃透监控系统,就这一篇够不够?

     

     

    Zabbix 的部署模式

    Zabbix 的数据采集,主要有两种模式:Server 主动拉取数据和 Agent 主动上报数据。

    以 Server 拉取数据为例,用户在 Web-portal 中,设置需要监控的机器,配置监控项,告警策略。Zabbix-Server 会根据策略主动获取 Agent 的数据,然后存储到 MySQL 中。

    同时根据用户配置的策略,判定是否需要告警。用户可以在 Web 端,以图表的形式,查看各种指标的历史趋势。

    在 Zabbix 中,将 Server 主动拉取数据的方式称之为 Active Check。这种方式配置起来较为方便,但是会对 Zabbix-Server 的性能存在影响。

    所以在生产环境中,一般会选择主动推送数据到 Zabbix-Server 的方式,称之为 Trapper。

    即用户可以定时生成数据,再按照 Zabbix 定义的数据格式,批量发送给 Zabbix-Server,这样可以大大提高 Server 的处理能力。

    Proxy,作为可选项,起到收集 Agent 数据并且转发到 Server 的作用。

    当 Server 和 Agent 不在一个网络内,就需要使用 Proxy 做远程监控,特别是远程网络有防火墙的时候。同时它也可以分担 Server 的压力,降低 Server 处理连接数的开销。

    Prometheus(普罗米修斯)

    随着这几年云环境的发展,Prometheus 被广泛地认可。它的本质是时间序列数据库,而 Zabbix 采用 MySQL 进行数据存储。

    从上面我们对时间序列数据库的分析来看,Prometheus 能够很好地支持大量数据的写入。

    它采用拉的模式(Pull)从应用中拉取数据,并通过 Alert 模块实现监控预警。据说单机可以消费百万级时间序列。

    一起来看看 Prometheus 的几大组件:

    • Prometheus Server,用于收集和存储时间序列数据,负责监控数据的获取,存储以及查询。
    • 监控目标配置,Prometheus Server 可以通过静态配置管理监控目标,也可以配合 Service Discovery(K8s,DNS,Consul)实现动态管理监控目标。
    • 监控目标存储,Prometheus Server 本身就是一个时序数据库,将采集到的监控数据按照时间序列存储在本地磁盘中。
    • 监控数据查询,Prometheus Server 对外提供了自定义的 PromQL 语言,实现对数据的查询以及分析。
    • Client Library,客户端库。为需要监控的服务生成相应的 Metrics 并暴露给 Prometheus Server。
    • 当 Prometheus Server 来 Pull 时,直接返回实时状态的 Metrics。通常会和 Job 一起合作。
    • Push Gateway,主要用于短期的 Jobs。由于这类 Jobs 存在时间较短,可能在 Prometheus 来 Pull 之前就消失了。为此,这些 Jobs 可以直接向 Prometheus Server 端推送它们的 Metrics。
    • Exporters,第三方服务接口。将 Metrics(数据集合)发送给 Prometheus。
    • Exporter 将监控数据采集的端点,通过 HTTP 的形式暴露给 Prometheus Server,使其通过 Endpoint 端点获取监控数据。
    • Alertmanager,从 Prometheus Server 端接收到 Alerts 后,会对数据进行处理。例如:去重,分组,然后根据规则,发出报警。
    • Web UI,Prometheus Server 内置的 Express Browser UI,通过 PromQL 实现数据的查询以及可视化。

     

    想吃透监控系统,就这一篇够不够?

     

     

    Prometheus 架构图

    说完了 Prometheus 的组件,再来看看 Prometheus 的架构:

    • Prometheus Server 定期从 Jobs/Exporters 中拉 Metrics。同时也可以接收来自 Pushgateway 发过来的 Metrics。
    • Prometheus Server 将接受到的数据存储在本地时序数据库,并运行已定义好的 alert.rules(告警规则),一旦满足告警规则就会向 Alertmanager 推送警报。
    • Alertmanager 根据配置文件,对接收到的警报进行处理,例如:发出邮件告警,或者借助第三方组件进行告警。
    • WebUI/Grafana/APIclients,可以借助 PromQL 对监控数据进行查询。

    最后将两个工具进行比较如下:

     

    想吃透监控系统,就这一篇够不够?

     

     

    Zabbix 和 Prometheus 比较图

    从上面的比较可以看出:

    • Zabbix 的成熟度更高,上手更快。高集成度导致灵活性较差,在监控复杂度增加后,定制难度会升高。而且使用的关系型数据库,对于大规模的监控数据插入和查询是个问题。
    • Prometheus 上手难度大,定制灵活度高,有较多数据聚合的可能,而且有时序数据库的加持。
    • 对于监控物理机或者监控环境相对稳定的情况,Zabbix 有明显优势。如果监控场景多是云环境的话,推荐使用 Prometheus。

    总结

     

    想吃透监控系统,就这一篇够不够?

     

     

    监控系统思维导图

    监控系统对 IT 系统运维意义重大,从状态监控到收集/分析数据,到故障报警,以及问题解决,最后归档报表,协助运维复盘。

    监控系统分为三大类,日志类,调用链类,度量类,他们有各自的特点,且应用场景各不相同。

    因为要对整个 IT 系统进行监控,所以将其分为五层,分别是,客户端,业务层,应用层,系统层,网络层。

    Zabbix 和 Prometheus 是当下流行的监控系统,可以根据他们的特点选择使用。

    展开全文
  • IT 监控系统介绍

    千次阅读 2019-09-30 14:40:29
    就在这样一个纷繁复杂地环境下,监控系统粉墨登场了。 今天,我们会对 IT 监控系统进行介绍,包括其功能,分类,分层;同时也会介绍几款流行的监控平台。 监控系统的功能 在 IT 运维过程中,常遇到这样的...

    由于业务的多样性,这些平台和系统也变得异常的复杂。如何对其进行监控和维护是我们 IT 人需要面对的重要问题。就在这样一个纷繁复杂地环境下,监控系统粉墨登场了。

     

    今天,我们会对 IT 监控系统进行介绍,包括其功能,分类,分层;同时也会介绍几款流行的监控平台。

     

    监控系统的功能

     

    在 IT 运维过程中,常遇到这样的情况:

    • 某个业务模块出现问题,运维人员并不知道,发现的时候问题已经很严重了。

    • 系统出现瓶颈了,CPU 占用持续升高,内存不足,磁盘被写满;网络请求突增,超出网关承受的压力。

     

    以上这些问题一旦发生,会对我们的业务产生巨大的影响。因此,每个公司或者 IT 团队都会针对此类情况建立自己的 IT 监控系统。

    监控系统工作流程图

     

    其功能包括:

    • 对服务,系统,平台的运行状态实时监控。

    • 收集服务,系统,平台的运行信息。

    • 通过收集信息的分析结果,预知存在的故障风险,并采取行动。

    • 根据对风险的评估,进行故障预警。

    • 一旦发生故障,第一时间发出告警信息。

    • 通过监控数据,定位故障,协助生成解决方案。

    • 最终保证系统持续、稳定、安全运行。

    • 监控数据可视化,便于统计,按照一定周期导出、归档,用于数据分析和问题复盘。

     

    监控系统的分类

     

    既然监控系统对我们意义重大,针对不同场景把监控系统分为三类,分别是:

    • 日志类

    • 调用链类

    • 度量类

     

    日志类

     

    通常我们在系统和业务级别上加入一些日志代码,记录一些日志信息,方便我们在发现问题的时候查找。

     

    这些信息会与事件做相关,例如:用户登录,下订单,用户浏览某件商品,一小时以内的网关流量,用户平均响应时间等等。

     

    这类以日志的记录和查询的解决方案比较多。比如 ELK 方案(Elasticsearch+Logstash+Kibana),使用ELK(Elasticsearch、Logstash、Kibana)+Kafka/Redis/RabbitMQ 来搭建一个日志系统。

    ELK 结合 Redis/Kafka/RabbitMQ 实现日志类监控

     

    程序内部通过 Spring AOP 记录日志,Beats 收集日志文件,然后用 Kafka/Redis/RabbitMQ 将其发送给 Logstash,Logstash 再将日志写入 Elasticsearch。

     

    最后,使用 Kibana 将存放在 Elasticsearch 中的日志数据显示出来,形式可以是实时数据图表。

     

    调用链类

     

    对于服务较多的系统,特别是微服务系统。一次服务的调用有可能涉及到多个服务。A 调用 B,B 又要调用 C,好像一个链条一样,形成了服务调用链。

     

    调用链就是记录一个请求经过所有服务的过程。请求从开始进入服务,经过不同的服务节点后,再返回给客户端,通过调用链参数来追踪全链路行为。从而知道请求在哪个环节出了故障,系统的瓶颈在哪儿。

     

    调用链监控的实现原理如下:

     

    ①Java 探针,字节码增强

    Java 代码运行原理图

     

    在介绍这种方式之前,我们先来复习一下 Java 代码运行的原理。通常我们会把 Java 源代码,通过“Java 编译器”编译成 Class 文件。再把这个 Class 的字节码文件装载到“类装载器”中进行字节码的验证。

     

    最后,把验证过后的字节码发送到“Java 解释器”和“及时编译器”交给“Java 运行系统”运行。

     

    Java 探针,字节码增强的方式就是利用 Java 代理,这个代理是运行方法之前的拦截器。

     

    在 JVM 加载 Class 二进制文件的时候,利用 ASM 动态的修改加载的 Class 文件,在监控的方法前后添加需要监控的内容。

     

    例如:添加计时语句,用于记录方法耗时。将方法耗时存入处理器,利用栈先特性(先进后出)处理方法调用顺序。

     

    每当请求处理结束后,将耗时方法和入参 map 输出到文件中,然后根据 map 中相应参数,区分出耗时业务。

     

    最后将相应耗时文件取下来,转化为 xml 格式并进行解析,通过浏览器将代码分层结构展示出来。

    Java 探针工具原理图

     

    备注:ASM 是一个 Java 字节码操纵框架,它可以动态生成类或者增强既有类的功能。

     

    ASM 可以直接产生二进制 Class 文件,可以在类被载入 Java 虚拟机之前改变类行为。

     

    Java Class 被存储在 .class文件里,文件拥有元数据来解析类中的元素:类名称、方法、属性以及 Java 字节码(指令)。

     

    ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够生成新类。

     

    ②拦截请求

     

    获取每次请求服务中的信息来实现跟踪的。这里以 Zipkin+Slueth 为例说明其原理。

     

    Sleuth 提供链路追踪。由于一个请求会涉及到多个服务的互相调用,而这种调用往往成链式结构,经过多次层层调用以后请求才会返回。常常使用 Sleuth 追踪整个调用过程,方便理清服务间的调用关系。

    Sleuth 服务调用追踪图例

     

    每次请求都会生成一个 Trace ID,如上图所示这个 Trace ID 在整个 Request 和 Response 过程中都会保持一致,不论经过了多少个服务。这是为了方便记录一次调用的整个生命周期。

     

    再看每次请求的时候都会有一个 Span ID,这里的 Span 是 Sleuth 服务跟踪的最小单元,每经过一个服务,每次 Request 和 Response 这个值都会有所不同,这是为了区分不同的调用动作。

     

    针对每个调用的动作,Sleuth 都做了标示如下:

    • Server Received 是服务器接受,也就是服务端接受到请求的意思。

    • Client Sent 是客户端发送,也就是这个服务本身不提供响应,需要调用其他的服务提供该响应,所以这个时候是作为客户端发起请求的。

    • Server Sent 是服务端发送,看上图SERVICE 3 收到请求后,由于他是最终的服务提供者,所以作为服务端,他需要把请求发送给调用者。

    • Client Received 是客户端接受,作为发起调用的客户端接受到服务端返回的请求。

     

    实际上 Sleuth 就是通过上述方式把每次请求记录一个统一的 Trace ID,每个请求的详细步骤记作 Span ID。

     

    每次发起请求或者接受请求的状态分别记录成 Server Received,Client Sent,Server Sent,Client Received 四种状态来完成这个服务调用链路的跟踪的。

    Sleuth 服务调用追踪图例

     

    在调用服务的链路上每个被调用的服务节点都会通过 Parent ID 来记录发起调用服务的 Span ID,由于 Span ID 是唯一确认最小服务单元的,所以知道了 Parent 的 Span ID 也就知道了谁调用自己了。

     

    度量类

     

    实现了时序数据库(TimeSeriesData,TSD)的监控方案。实际上就是记录一串以时间为维度的数据,然后再通过聚合运算,查看指标数据和指标趋势。说白了,就是描述某个被测主体在一段时间内的测量值变化(度量)。

     

    由于 IT 基础设施,运维监控和互联网监控的特性,这种方式被广泛应用。一般对时序数据进行建模分为三个部分,分别是:主体,时间点和测量值。

     

    通过这个例子来看一下,时序数据库的数学模型,例如:需要监控服务器的 In/Out 平均流量:

    • 整个监控的数据库称为“Metric”,它包含了所有监控的数据。类似关系型数据库中的 Table。

    • 每条监控数据,称为“Point”,类似于关系型数据库中的 Row 的概念。

    • 每个“Point”都会定义一个时间戳“Timestamp”,将其作为索引,表明数据采集的时间。

    • “Tag”作为维度列,表示监控数据的属性。

    • “Field”作为指标列,作为测量值,也就是测量的结果。

    时序数据库数据模型图例

     

    时序数据库的存储原理,关系型数据库存储采用的是 B tree,虽然降低了数据查询的磁盘寻道时间,但是无法解决大量数据写入时的磁盘效率。

     

    由于监控系统的应用场景,经常会遇到大批量的数据写入,所以我们会选择 LSMtree(Log Structured Merge Tree)存储时序数据库。

     

    LSMtree(Log Structured Merge Tree),从字面意义上理解,记录的数据按照日志结构(Log Structured)追加到系统中,然后通过合并树(Merge Tree)的方式将其合并。

     

    来看一个 LevelDB 的例子,方便我们理解,LSM-tree 被分成三种文件:

    • 接收写入请求的 memtable 文件(内存中)

    • 不可修改的 immutable memtable 文件(内存中)

    • 磁盘上的 SStable文件(Sorted String Table),有序字符串表,这个有序的字符串就是数据的key。SStable 一共有七层(L0 到 L6)。下一层的总大小限制是上一层的 10 倍。

    LSMtree LevelDB 存储示意图

     

    LSMtree 写入流程:

    • 将数据追加到日志 WAL(Write Ahead Log)中,写入日志的目的是为了防止内存数据丢失,可以及时恢复。

    • 把数据写到 memtable 中。

    • 当 memtable 满了(超过一定阀值),就将这个 memtable 转入 immutable memtable 中,用新的 memtable 接收新的数据请求。

    • immutablememtable 一旦写满了, 就写入磁盘。并且先存储 L0 层的  SSTable 磁盘文件,此时还不需要做文件的合并。

      每层的所有文件总大小是有限制的(8MB,10MB,100MB… 1TB)。从 L1 层往后,每下一层容量增大十倍。

    • 某一层的数据文件总量超过阈值,就在这一层中选择一个文件和下一层的文件进行合并。

      如此这般上层的数据都是较新的数据,查询可以从上层开始查找,依次往下,并且这些数据都是按照时间序列存放的。

     

    监控系统的分层

     

    谈完了监控系统的分类,再来聊聊监控系统的分层。用户请求到数据返回,经历系统中的层层关卡。

    监控系统分层示意图

     

    一般我们将监控系统分为五层来考虑,当然也有人分成三层,大致的意思都差不多,仅供参考:

    • 客户端监控,用户行为信息,业务返回码,客户端性能,运营商,版本,操作系统等。

    • 业务层监控,核心业务的监控,例如:登录,注册,下单,支付等等。

    • 应用层监控,相关的技术参数,例如:URL 请求次数,Service 请求数量,SQL 执行的结果,Cache 的利用率,QPS 等等。

    • 系统层监控,物理主机,虚拟主机以及操作系统的参数。例如:CPU 利用率,内存利用率,磁盘空间情况。

    • 网络层监控,网络情况参数。例如:网关流量情况,丢包率,错包率,连接数等等。

     

    流行的监控系统

     

    前面讲了监控系统的功能,分类,分层,相信大家对 IT 监控系统都有一定的了解了。

     

    接下来,我们来看看有哪些优秀实践。这里介绍两个比较流行的监控系统:

    • Zabbix

    • Prometheus

     

    Zabbix

     

    Zabbix 是一款企业级的分布式开源监控方案。它由 Alexei Vladishev 创建,由 Zabbix SIA 在持续开发和支持。

     

    Zabbix 能够监控网络参数,服务器健康和软件完整性。它提供通知机制,允许用户配置告警,从而快速反馈问题。

     

    基于存储的数据,Zabbix 提供报表和数据可视化,并且支持主动轮询和被动捕获。它的所有报告、统计信息和配置参数都可以通过 Web 页面访问。

     

    Zabbix 的 API 功能,完善度很高,大部分操作都提供了 API 接口,方便和现有系统整合。

     

    例如:通过历史数据查询 API,获取线上服务器使用情况,生成报表;设置条件,对问题服务器和问题业务进行筛选,加入告警。

     

    利用 Zabbix graph 的 API,生成关键指标趋势图,方便运维人员实时了解系统情况。利用告警添加 API,让监控系统和部署系统联动。

     

    比如新部署了一个新实例,那么自动添加所需要的监控策略;反之,下线一个实例,就删除关联的监控策略。

     

    Zabbix 由 Server,Agent,Proxy(可选项)组成:

    • Agent 负责收集数据,并且传输给 Server。

    • Server 负责接受 Agent 的数据,进行保存或者告警。

    • Proxy 负责代理 Server 收集 Agent 传输的数据,并且转发给 Server。Proxy 是安装在被监控的服务器上的,用来和 Server 端进行通信,从而传输数据。

    Zabbix 的部署模式

     

    Zabbix 的数据采集,主要有两种模式:Server 主动拉取数据和 Agent 主动上报数据。

     

    以 Server 拉取数据为例,用户在 Web-portal 中,设置需要监控的机器,配置监控项,告警策略。Zabbix-Server 会根据策略主动获取 Agent 的数据,然后存储到 MySQL 中。

     

    同时根据用户配置的策略,判定是否需要告警。用户可以在 Web 端,以图表的形式,查看各种指标的历史趋势。

     

    在 Zabbix 中,将 Server 主动拉取数据的方式称之为 Active Check。这种方式配置起来较为方便,但是会对 Zabbix-Server 的性能存在影响。

     

    所以在生产环境中,一般会选择主动推送数据到 Zabbix-Server 的方式,称之为 Trapper。

     

    即用户可以定时生成数据,再按照 Zabbix 定义的数据格式,批量发送给 Zabbix-Server,这样可以大大提高 Server 的处理能力。

     

    Proxy,作为可选项,起到收集 Agent 数据并且转发到 Server 的作用。

     

    当 Server 和 Agent 不在一个网络内,就需要使用 Proxy 做远程监控,特别是远程网络有防火墙的时候。同时它也可以分担 Server 的压力,降低 Server 处理连接数的开销。

     

    Prometheus(普罗米修斯)

     

    随着这几年云环境的发展,Prometheus 被广泛地认可。它的本质是时间序列数据库,而 Zabbix 采用 MySQL 进行数据存储。

     

    从上面我们对时间序列数据库的分析来看,Prometheus 能够很好地支持大量数据的写入。

     

    它采用拉的模式(Pull)从应用中拉取数据,并通过 Alert 模块实现监控预警。据说单机可以消费百万级时间序列。

     

    一起来看看 Prometheus 的几大组件:

    • Prometheus Server,用于收集和存储时间序列数据,负责监控数据的获取,存储以及查询。

    • 监控目标配置,Prometheus Server 可以通过静态配置管理监控目标,也可以配合 Service Discovery(K8s,DNS,Consul)实现动态管理监控目标。

    • 监控目标存储,Prometheus Server 本身就是一个时序数据库,将采集到的监控数据按照时间序列存储在本地磁盘中。

    • 监控数据查询,Prometheus Server 对外提供了自定义的 PromQL 语言,实现对数据的查询以及分析。

    • Client Library,客户端库。为需要监控的服务生成相应的 Metrics 并暴露给 Prometheus Server。

      当 Prometheus Server 来 Pull 时,直接返回实时状态的 Metrics。通常会和 Job 一起合作。

    • Push Gateway,主要用于短期的 Jobs。由于这类 Jobs 存在时间较短,可能在 Prometheus 来 Pull 之前就消失了。为此,这些 Jobs 可以直接向 Prometheus Server 端推送它们的 Metrics。

    • Exporters,第三方服务接口。将 Metrics(数据集合)发送给 Prometheus。

      Exporter 将监控数据采集的端点,通过 HTTP 的形式暴露给 Prometheus Server,使其通过 Endpoint 端点获取监控数据。

    • Alertmanager,从 Prometheus Server 端接收到 Alerts 后,会对数据进行处理。例如:去重,分组,然后根据规则,发出报警。

    • Web UI,Prometheus Server 内置的 Express Browser UI,通过 PromQL 实现数据的查询以及可视化。

    Prometheus 架构图

     

    说完了 Prometheus 的组件,再来看看 Prometheus 的架构:

    • Prometheus Server 定期从 Jobs/Exporters 中拉 Metrics。同时也可以接收来自 Pushgateway 发过来的 Metrics。

    • Prometheus Server 将接受到的数据存储在本地时序数据库,并运行已定义好的 alert.rules(告警规则),一旦满足告警规则就会向 Alertmanager 推送警报。

    • Alertmanager 根据配置文件,对接收到的警报进行处理,例如:发出邮件告警,或者借助第三方组件进行告警。

    • WebUI/Grafana/APIclients,可以借助 PromQL 对监控数据进行查询。

     

    最后将两个工具进行比较如下:

    Zabbix 和 Prometheus 比较图

     

    从上面的比较可以看出:

    • Zabbix 的成熟度更高,上手更快。高集成度导致灵活性较差,在监控复杂度增加后,定制难度会升高。而且使用的关系型数据库,对于大规模的监控数据插入和查询是个问题。

    • Prometheus 上手难度大,定制灵活度高,有较多数据聚合的可能,而且有时序数据库的加持。

    • 对于监控物理机或者监控环境相对稳定的情况,Zabbix 有明显优势。如果监控场景多是云环境的话,推荐使用 Prometheus。

     

    总结

     

    监控系统思维导图

     

    监控系统对 IT 系统运维意义重大,从状态监控到收集/分析数据,到故障报警,以及问题解决,最后归档报表,协助运维复盘。

     

    监控系统分为三大类,日志类,调用链类,度量类,他们有各自的特点,且应用场景各不相同。

     

    因为要对整个 IT 系统进行监控,所以将其分为五层,分别是,客户端,业务层,应用层,系统层,网络层。

     

    Zabbix 和 Prometheus 是当下流行的监控系统,可以根据他们的特点选择使用。

    展开全文
  • 使用Java实现简单的监控系统

    千次阅读 2020-05-05 15:15:36
    本文只是简单介绍了下监控系统实现的思路,具体还需根据自己需求实现。 前言: 目前存在一个后台服务系统,此时需要配套一个监控系统,对这个后台服务系统进行监控。下面会涉及到两个系统,后台服务系统(这是已经...
  • CAT分布式监控系统(一):CAT监控系统功能介绍 本文概要: 1、CAT监控系统是什么。 2、CAT监控系统能做什么,能监控些什么。 下面有些截图是CAT 2.0版本的,但和3.0版本没什么区别的。 一、简介 ...
  • 本次将变电站机器人监控系统的外框架界面代码分离出来,有需要的朋友可以下载
  • 软件监控系统介绍

    千次阅读 2020-11-17 18:58:04
    监控系统要监控的指标或内容多种多样,根据不同的侧重点、不同的层次划分,监控系统又有多种实现。例如,Zabbix、Promethos、Open-falcon、Skywalking、CAT等等。 因此,很难简单的概括监控系统的定义。 2. 作用 ...
  • 可视化爬虫监控系统

    千次阅读 2019-01-31 11:17:36
    当你部署很多爬虫以后你就需要一个可视化的爬虫监控系统。来方便查看每个爬虫的入库数据和工作状态等… 本文就手把手一步步教你如何搭建这样一个可视化监控系统。本文不讲解爬虫的相关技术实现,而是从实用性的角度...
  • 吴兆松资深系统工程师,Zabbix监控系统“红宝书”作者,熟悉IT运维领域,对服务器运维、应用运维以及运维(DevOps)平台的构思、设计、开发等都具有十分丰富的经验,尤其擅长IT监控系统的运维和开发,是国内最早一批...
  • Nagios监控系统

    千次阅读 2018-11-01 21:47:52
    Nagios监控系统 前言:Nagios是一款开源的免费网络监视工具,可以监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员。流量监控...
  • 自用型监控系统方案设计

    千次阅读 2018-11-29 13:02:18
    一、监控系统整体概述 系统背景: 在当前项目中,当我们对特定流程注入故障后,如何评估故障的效果以及系统应对故障的表现?传统方式是用户需要登录线上机器或者各种监控系统去查看具体的指标信息,然后通过人工...
  • 小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统 小米的http://book.open-falcon.org/zh/intro/ 早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源...
  • 2.2系统拓扑结构 汽车尾气排放远程在线监控系统 汽车尾气排放远程在线监控系统的运行环境有两种方案有以下两种方案: 方案一、自建机房来部署汽车尾气排放远程在线监控系统。该方案的优势在于自主性比较高,尤其是...
  • 远程屏幕监控系统

    千次阅读 2018-05-12 20:41:13
    远程屏幕监控系统 近期整理代码的时候,发现大二的时候(目前大三)做的几个课程设计还不错,所以把这部分的代码以及设计文档都开源出来,以供后者参考学习使用。 完整代码以及本文的word都在放在了Github上,...
  • 简述舆情监控系统

    千次阅读 2019-06-03 21:44:04
    首先我们要知道什么是舆情监控系统,这个有什么用。 网络舆情是指在互联网上流行的对社会问题不同看法的网络舆论,是通过互联网传播的公众对现实生活中某些热点、焦点问题所持的有较强影响力、倾向性的言论和观点。...
  • 接近完美的监控系统—普罗米修斯

    千次阅读 2020-11-29 08:08:00
    普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统。当年,由于SoundCloud公司生产了太多的服务,传统的监控已经无法满足监控需求,于是他们在2012年决...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 838,262
精华内容 335,304
关键字:

监控系统