精华内容
下载资源
问答
  • 沃尔沃CareTrack远程智能监控系统登陆中国.pdf
  • 沃尔沃CareTrack远程智能监控系统登陆中国 (2).pdf
  • 沃尔沃CareTrack远程智能监控系统登陆中国 (1).pdf
  • 基于C#和.Net的校园网自动登陆以及流量监控系统,实现了自动校园网关登陆,注销,流量实时监控,余额实时监控,开机自启后台运行,悬浮小窗口等等功能,提供原工程文件,希望能帮助到有相关需求的朋友们!
  • 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 里面可以直接预览,展示效果图如下

    在这里插入图片描述

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

    展开全文
  • 每日优鲜监控系统

    2021-02-03 08:28:00
    每日优鲜监控系统早期情况系统覆盖不全每日优鲜早期只有交易平台存在一套内部的业务监控系统,没有推广到全公司级别。大数据团队与自己的业务监控,运维团队有自己的基础监控。除了交易系统其他业务线的...

    每日优鲜监控系统早期情况

    系统覆盖不全

    每日优鲜早期只有交易平台存在一套内部的业务监控系统,没有推广到全公司级别。大数据团队与自己的业务监控,运维团队有自己的基础监控。除了交易系统其他业务线的业务监控几乎为零,很多时候都是用户告知我们出问题了,而不是我们主动发现出问题了,导致问题发现的时候已经过去很久了。

    监控类型不完善

    监控内容主要是涉及日志中出现的数据统计,所以对PV、UV、JVM相关监控都没有,尤其对自身业务的监控几乎为零,我们无法实时的知道当前接口的访问量,错误率等信息;除此之外我们依赖的zookeeper、mq、redis、数据库等中间件的监控也基本没有,所以很难做到深入的排查。不过好在有一套pinpoint可以帮助故障和性能定位。但是这并不能代替业务监控。

    监控系统选型和实现

    选型

    要实现一套监控系统,必须要保证数据的收集、存储和可视化,然后在基于此实现一套告警系统,最终实现数据的可视化与问题的触达。

    可视化选型

    在做监控系统选型的时候,最优先定下来的是可视化,即Grafana这套开源产品,因为其支持多数据源,同时也支持告警规则,除此之外其提供了一套完备的API,我们通过程序调用其API实现了监控数据可视化的自动化流程。

    存储选型

    第二个定下来的是存储系统,监控的数据基本都带有时序性,所以我们自然而然的朝着时序数据库(TSDB)方向进行选型。最终定下来的存储有两种:存储业务监控数据的OpenTSDB和存储中间件监控数据的Prometheus。 

     

    选择OpenTSDB的原因在于我们的业务数据需要长期保留,比如我们现在业务的监控数据已经存储了一年,大家可以轻易的查到5.17,6.18的历史大盘数据。 

     

    中间件等监控数据不需要保留太长时间,所以单独的采用了另一套存储Prometheus的TSDB,为什么选择它的,原因是Prometheus扩展性非常高,通过相关的exporter可以快速的开发一套针对性的中间件监控,同时社区也已经支持了很大一部分的中间件的exporter(收集服务暴露监控数据接口)。

    数据收集

    监控数据的收集从两方面做的,一方面是提供内存埋点的方式,即我们提供的monitor包,另一方面为了接入了老监控系统能够平滑迁移到新的监控系统上来,我们支持了基于日志的统计,可以统计pv、异常等信息。 

     

    日志收集也兼容原来的方案,即采用flume进行日志采集,kafka进行日志传输,日志统计系统进行日志数据消费、统计。

    告警系统

    为了方便与自研的监控系统实现自动化接入以及与现有的组织人员接入,对告警系统做了自研。 

     

    告警系统自动化接入: 业务接入监控,如果该业务在应用中心已经注册存在,那么监控系统在第一次收到业务发送的监控数据时,会调用告警平台接口创建告警应用,同时告警平台会根据app_code从应用中心拉取该app_code下所有相关研发人员,全程自动化。 

     

    灵活性: 告警平台除了自动化接入,也可以手动接入告警,手动维护告警人员,对外提供了告警接口,业务方可以根据自己的需求接入告警发送、消息通知等功能。

     

    告警方式: 在告警系统上线之处支持短信、邮件、电话三种告警方式,去年年前紧急接入了lark,实现了第一版lark告警功能的接入,到现在告警平台已经对接了多个lark机器人,同时实现了群机器人的告警消息推送。

    监控系统的架构

    监控系统的实现

    业务监控

    业务监控采用sdk和日志收集两种方式进行统计上报,其中monitor中内置了对数据库连接池的监控、JVM监控、dubbo提供者调用监控、dubbo消费监控等。 

    对于JVM监控采用内置的ManagementFactory获取 Dubbo和Http接口的pv和异常监控均采用拦截器的方式,直接集成在monitor中。

    机器监控

    机器监控的基础数据来源于运维团队的Prometheus,通过业务监控上报上来的机器IP拼接PromQL,并将机器的监控与业务监控的大盘集成,业务可以在业务监控大盘中看到自己的应用的资源使用情况。

    中间件监控

    中间件监控分为两种方式,早期的redis管理平台和rocketmq各自基于monitor sdk实现了自己的监控埋点,走的路线跟业务监控相同。 

    监控系统自身依赖的组件,如hdfs、kafka、opentsdb等直接采用prometheus exporter进行收集,组件内部维护了一组exporter。

    监控图像自动生成

    为了监控接入的便捷性,我们实现了监控大盘的自动生成,根据monitor内置的相关埋点进行默认的监控数据上报,如JVM、Dubbo、Http等。通过这些上报数据拼接JSON,同时调用Grafana的创建Dashboard的API接口,自动创建Dashboard,大致流程如下: 

    机器的核心指标(cpu、内存、磁盘、带宽),通过应用上报的指标信息中的host tag,生成promql,通过promql从运维的prometheus数据源中获取,自动添加到大盘监控中。

     

    监控接入全程自动化

    为了方便业务快速接入监控,我们除了对监控自动生成大盘之外,还做了其他的处理,监控系统接入全程自动化,自动化过程如下图所示: 

    1. 监控数据网关触发安装filebeat流程,调用ocean平台的接口进行filebeat推送

      安装,实现wf日志的收集。

    2. 调用告警平台实现大盘对应的告警创建,告警平台根据监控数据网关推送的应用名从应用中心拉取该应用下的相关开发人员,实现告警的自动化设置。

    3. 监控大盘生成,通过业务推送的监控指标数据和告警地址拼接大盘模板,然后调用Grafana的接口实现界面的自动化创建和更新。

    4. 监控数据网关调用异常网关,实现异常网关对wf日志的top5日志统计。

    5. 监控数据网关调用日志统计,实现wf的error和warning的pv统计以及异常统计。

    监控系统的推广历程

    对监控埋点的认知

    最开始推监控的时候大家对埋点的认知还比较浅,所以主要是通过日志方式进行接入,对埋点存在抵触心理。

    监控系统分享

    监控系统在一次分享大会上做过相关分享,主要分享通用的监控系统的架构是什么样,我们的Monitor监控实现是什么样,支持了哪些功能。 

    在分享会上再一次重点的宣讲了一下埋点的重要性,因为只有业务人员对自己所负责的业务最熟悉,所以为了方便第一时间发现问题,以及对自己的业务有全局的监控,那么就需要手动去埋点。以登陆功能为例,我们需要在登陆操作的每一步做埋点,我们需要知道登陆成功的pv,失败的pv,是什么原因失败,失败比例各占多少。

    监控系统方面做的改进

    Grafana改造

    指标分组

    指标分组主要是为了方便大家快速定位自己的埋点位置,比如我们有一组与用户登陆相关的埋点数据,埋点指标名称统一为UserLogin_前缀,那么在上报之后我们会自动进行分组,将UserLogin_xxx分到同一组下。为了快速定位一组埋点,对Grafana前端进行大盘进行了拆解显示,可以通过下拉的方式选择自己的埋点指标组,然后会过滤掉无用的展示,只展示该指标组下的内容。

    指标搜索

    Grafana Git上很多人都对指标查询这个功能有需求,不过官方没有打算做,随着业务指标数量的递增,排查起来非常麻烦,为此,除了可以通过指标分组功能来实现过滤之外,还对指标搜索功能做了实现,可以通过搜索具体的指标来查看具体的单个指标。

    分时段告警

    不通时段的指标的数据、趋势是不同的,有些业务基本上晚上都没有什么量,为了使得告警更准确,实现了第一版的单时段告警,可以实现在指定时间段内才会对指标进行监控。

    这种方式已经满足了大部分的场景,但是业务是多样性的,指标数据、趋势也存在多样性。因此实现了第二个版本,分时段、分策略告警。咋不同时间段可以配置不通的告警策略,从而使得告警更加准确,更加的人性化。

    同环比

    Grafana的指标图根据不同的数据类型,配置、查询方式等都不相同,Grafana的OpenTSDB数据源前端指标图默认无法将不同时间段的数据放在同一个指标图上,为了增加同环比的功能,对OpenTSDB的查询模块在前端做了扩展。做法如下:

    1. 对指标查询做标记,标记是否为同环比查询

    2. 查询时对时间进行计算

    3. 渲染前对时间进行计算

    4. 最终达到将不同时间端的数据展示在同一个指标图上。

    告警分布式

    Grafana官方的告警策略是不支持分布式的,因此扩展了其分布式告警的功能。 

    第一版分布式告警 

    在告警配置数量还在上百个、上千个的时候。在这个阶段,直接在数据库中加了一张锁表,用来处理分布式告警,发送告警前先获取锁,获取成功则继续发送,如果获取失败,取消告警的发送,即谁拿锁谁发送。同时引入了锁检查的任务。

    第二版分布式告警 

    随着接入的应用和指标数达到了一定的量级,配置的告警策略也翻了好几倍,数据库实现的锁表出现一定的瓶颈。因此换了第二版本的实现,即对查询的告警策略数据进行拆分,每个节点跑一部分,实现分布式告警。

    告警平台

    告警回执、告警统计

    针对告警信息做了定制化,添加告警回执、告警处理等功能,实现告警跟踪、溯源。

    异常日志报出来

    直接将出错内容通过告警发出来,业务方可以快速定位问题。默认取出现频率较高的top5异常。

    监控系统未来方向

    当前监控系统数据收集方面还是分钟级别,机器指标是十秒级别,无法发现峰值的qps,因为接下来的方向考虑加入秒级监控,实现分钟和秒级监控的灵活切换,需要的时候开通秒级监控,平时使用分钟级监控即可,当然,因为秒级监控很耗费性能,所以也可能单独的在谛听平台去做。

    引入AI算法,对历史数据进行分析、趋势分析,实现告警的智能化,提前预知告警,防患于未然。

    - END -

    往期回顾

    从技术谈到管理,把系统优化的技术用到企业管理

    从 Lambda 到无 Lambda,领英吸取到的教训

    MySQL中“诡异”的TIMESTAMP数据类型

    展开全文
  • 系统不间断的实时监控:实际上是对系统不间断的实时监控(这就是监控); 实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。 保证服务可靠性...

    目录

    一、监控目标

    二、监控方法

    三、监控核心

    四、监控工具

    五、监控流程

    六、监控指标

    七、监控报警

    八、报警处理

    九、面试监控


    一、监控目标

    每个人由于所在的行业、公司、业务、岗位不同,对监控的理解也不尽相同,但是我们需要注意,监控是需要站在公司的业务角度去考虑,而不是针对某个监控技术的使用。

    1. 对系统不间断的实时监控:实际上是对系统不间断的实时监控(这就是监控);
    2. 实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。
    3. 保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行
    4. 保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。

    二、监控方法

    1.了解监控对象:我们要监控的对象你是否了解呢?比如CPU到底是如何工作的?

    2.性能基准指标:我们要监控这个东西的什么属性?比如CPU的使用率、负载、用户态、内核态、上下文切换。

    3.报警阈值定义:怎么样才算是故障,要报警呢?比如CPU的负载到底多少算高,用户态、内核态分别跑多少算高?

    4.故障处理流程:收到了故障报警,我们怎么处理呢?有什么更高效的处理流程吗?

    三、监控核心

    • 发现问题:当系统发生故障报警,我们会收到故障报警的信息。
    • 定位问题:故障邮件一般都会写某某主机故障、具体故障的内容,我们需要对报警内容进行分析。比如一台服务器连不上,我们就需要考虑是网络问题、还是负载太高导致长时间无法连接,又或者某开发触发了防火墙禁止的相关策略等,我们就需要去分析故障具体原因。
    • 解决问题:当然我们了解到故障的原因后,就需要通过故障解决的优先级去解决该故障。
    • 总结问题:当我们解决完重大故障后,需要对故障原因以及防范进行总结归纳,避免以后重复出现。

    四、监控工具

    下面我们需要选择一款适合公司业务的监控工具进行监控,。这里我对监控工具进行了简单的分类。

    1、老牌监控

    • MRTG(Multi Route Trffic Grapher)是一套可用来绘制网络流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL授权。MRTG最好的版本是1995年推出的,用Perl语言写成,可跨平台使用,数据采集用SNMP协议,MRTG将手机到的数据通过Web页面以GIF或者PNG格式绘制出图像。
    • Ganglia是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网格。它基于分层设计,使用广泛的技术,用RRDtool存储数据。具有可视化界面,适合对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前已有成千上万的集群正在使用这个监控系统,可以轻松地处理2000个节点的集群环境。
    • Cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它通过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模板。在历史数据展示监控方面,其功能相当不错。Cacti通过添加模板,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力(数据的叠加功能)
    • Nagios是一个企业级监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机状态以及服务,同时提供异常告警通知功能等。Nagios可运行在Linux和UNIX平台上。同时提供Web界面,以方便系统管理人员查看网络状态、各种系统问题、以及系统相关日志等。Nagios的功能侧重于监控服务的可用性,能根据监控指标状态触发告警。目前Nagios也占领了一定的市场份额,不过Nagios并没有与时俱进,已经不能满足于多变的监控需求,架构的扩展性和使用的便捷性有待增强,其高级功能集成在商业版Nagios XI中。
    • Smokeping主要用于监视网络性能,包括常规的ping、www服务器性能、DNS查询性能、SSH性能等。底层也是用RRDtool做支持,特点是绘制图非常漂亮,网络丢包和延迟用颜色和阴影来标示,支持将多张图叠放在一起,其作者还开发了MRTG和RRDtll等工具。 Smokeping的站点为:http://tobi.oetiker.cn/hp
    • 开源监控系统OpenTSDB用HBase存储所有时序(无须采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,可以做容量规划,并很容易地接入到现有的告警系统里。OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如Web化、图形化等。

    2、王牌监控

    • Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做得非常优秀。从以上各种监控系统的对比来看,Zabbix都是具有优势的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。
    • 小米的监控系统:Open-Falcon。Open-Falcon的目标是做最开放、最好用的互联网企业级监控产品。

    3、三方监控

    现在市场上有很多不错的第三方监控,比如:监控宝、监控易、听云、还有很多云厂商自带监控,但在这里我不打算着重介绍,如果想了解三方监控可自行上官网咨询。(避免说广告植入)

    五、监控流程

    上面介绍了这么多,到底选择什么监控工具最合适呢?我这里推荐几款开源监控工具:Zabbix、Open-Falcon、LEPUS天兔(专用于监控数据库)。但本文还是基于Zabbix来构建整个监控体系生态圈。 下面我们就来聊聊Zabbix的整个流程:

    1. 数据采集:Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集;
    2. 数据存储:Zabbix存储在MySQL上,也可以存储在其他数据库服务;
    3. 数据分析:当我们事后需要复盘分析故障时,Zabbix能给我们提供图形以及时间等相关信息,方面我们确定故障所在;
    4. 数据展示:Web界面展示、(移动APP、java_php开发一个Web界面也可以);
    5. 监控报警:电话报警、邮件报警、微信报警、短信报警、报警升级机制等(无论什么报警都可以);
    6. 报警处理:当接收到报警,我们需要根据故障的级别进行处理,比如:重要紧急、重要不紧急,等。根据故障的级别,配合相关的人员进行快速处理。

    六、监控指标

    上面了解了监控方法、目标、流程、也了解了监控有哪些工具,可能有人会疑惑,我们具体要监控些什么东西,在这里我进行了分类整理,包含硬件监控、应用监系统监控、网络监控、流量分析、日志监控、安全监控、API监控、性能监控、业务监控。

    1、硬件监控

    早期我们通过机房巡检的方式,查看硬件设备灯光闪烁情况判断是否故障,这样非常浪费人力,并且是重复性无技术含量的工作,大家懂得。

    当然我们现在可以通过IPMI对硬件详细情况进行监控,并对CPU、内存、磁盘、温度、风扇、电压等设置报警设置报警阈值(自行对监控报警内容编写合理的报警范围) 。

    IPMI监控硬件服务参考资料:Zabbix IPMI Interface

    2、系统监控

    中小型企业基本全是Linux服务器,那么我们肯定是要监控起系统资源的使用情况,系统监控是监控体系的基础

    监控主要对象:

    CPU有几个重要的概念:上下文切换、运行队列和使用率。这也是我们CPU监控的几个重点指标。

    通常情况,每个处理器的运行队列不要高于3,CPU 利用率中用“户态/内核态”比例维持在70/30,空闲状态维持在50%,上下文切换要根据系统繁忙程度来综合考量。

    针对CPU常用的工具有:htop、top、vmstat、mpstat、dstat、glances。Zabbix提供系统监控模板:Zabbix Agent Interface。

    CPU整体状态

    上下文切换

    负载状态

    内存:通常我们需要监控内存的使用率、SWAP使用率、同时可以通过Zabbix描绘内存使用率的曲线图形发现某服务内存溢出等。

    针对内存常用的工具有:free、top、vmstat、glances。

    内存使用率

    IO分为磁盘IO和网络IO。除了在做性能调优我们要监控更详细的数据外,日常监控只关注磁盘使用率、磁盘吞吐量、磁盘写入繁忙程度,网络也是监控网卡流量即可。常用工具有:iostat、iotop、df、iftop、sar、glances。

    磁盘使用率

    磁盘读/写吞吐

    网卡进出口流量

    TCP11种状态信息

    其它系统监控还有运行的进程端口、进程数、登陆用户、Open File等(详细查看Zabbix自带OS Linux模板)。

    其它相关监控

    3、应用监控

    把硬件监控和系统监控研究明白后,我们进一步操作是需要登陆到服务器上查看服务器运行了哪些服务,都需要监控起来。

    应用服务监控也是监控体系中比较重要的内容,例如:LVS、HAProxy、Docker、Nginx、PHP、Memcached、Redis、MySQL、RabbitMQ等,相关的服务都需要使用zabbix监控起来。

    nginx_status

    PHP-FPM_status

    Redis_status

    JVM监控

    笔者之前写过服务监控详细的操作过程,这里就不一一展示,详情访问:Zabbix监控各种应用服务。

    • Zabbix提供应用服务监控:Zabbix Agent UserParameter
    • Zabbix提供的Java监控:Zabbix JMX Interface
    • Percona提供MySQL数据库监控:percona-monitoring-plulgins

    4、网络监控

    作为一个针对全国用户的电商网站,时刻掌握各地到机房的网络状态也是必须的。

    网络监控是我们构建监控平台是必须要考虑的,尤其是针对有多个机房的场景,各个机房之间的网络状态,机房和全国各地的网络状态都是我们需要重点关注的对象,那如何掌握这些状态信息呢?我们需要借助于网络监控工具Smokeping。

    Smokeping 是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,www服务器性能,DNS查询性能等,使用rrdtool绘图,而且支持分布式,直接从多个agent进行数据的汇总。

    同时,由于自己监控点比较少,还可以借助很多商业的监控工具,比如监控宝、基调、博瑞等。同时这些服务提供商还可以帮助你监控CDN的状态。

    监控宝

    5、流量分析

    网站流量分析对于运维人员来说,更是一门必须掌握的知识了。比如对于一家电商公司来说:通过对订单来源的统计和分析,可以了解我们在某个网站上的广告投入有没有收到预期的效果。 可以区分不同地区的访问人数、甚至商品交易额等。百度统计、Google分析、站长工具等,只需要在页面嵌入一个js即可。

    但是,数据始终是在对方手中,个性化定制不方便,于是Google出一个叫Piwik的开源分析工具。

    piwik

    百度统计

    6、日志监控

    通常情况下,随着系统的运行,操作系统会产生系统日志,应用程序会产生应用程序的访问日志、错误日志,运行日志,网络日志,我们可以使用ELK来进行日志监控。

    对于日志监控来说,最见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:Logstash(收集)+ElasticSearch(存储+搜索)+Kibana(展示)。

    我们将这三个组合起来的技术称之为ELK Stack,所以说ELK Stack指的是Elasticsearch、Logstash、Kibana技术栈的结合。

    如果收集了日志信息,部署更新有异常出现,可以立即在Kibana上看到。

    ELK日志展示

    当然也可以通过Zabbix过滤错误日志来进行告警。

    Zabbix日志展示

    7、安全监控

    虽然Linux开源的安全产品不少,比如四层iptables,七层WEB防护Nginx+Lua实现WAF,最后将相关的日志都收至ELkstack,通过图形化进行不同的攻击类型展示。但是始终是一件比较耗费时间,并且个人效果并不是很好。这个时候我们可以选择接入第三方服务厂商。

    某某三方安全

    三方厂商提供全面的漏洞库,涵盖服务、后门、数据库、配置检测、CGI、SMTP等多种类型。

    全面检测主机、Web应用漏洞自主挖掘和行业共享相结合第一时间更新0-day漏洞,杜绝最新安全隐患。

    8、API监控

    由于API变得越来越重要,很显然我们也需要这样的数据来分辨我们提供的 API是否能够正常运作。

    监控API接口GET、POST、PUT、DELETE、HEAD、OPTIONS的请求。可用性、正确性、响应时间为三大重性能指标。

    API监控

    三方API监控

    响应时间

    9、性能监控

    全面监控网页性能,DNS响应时间、HTTP建立连接时间、页面性能指数、响应时间、可用率、元素大小等。Zabbix提供URL监控:Zabbix Web 监控。

    Zabbix站点监控

    终端响应时间

    第三方监控监控大盘。各类图表一目了然,全面体现网页性能健康状况。

    10、业务监控

    没有业务指标监控的监控平台,不是一个完善的监控平台,通常在我们的监控系统中,必须将我们重要的业务指标进行监控,并设置阈值进行告警通知。比如电商行业:

    每分钟产生多少订单、每分钟注册多少用户、每天有多少活跃用户、每天有多少推广活动、推广活动引入多少用户、推广活动引入多少流量、推广活动引入多少利润等,重要指标都可以加入Zabbix上,然后通过Screen展示。

    注:由于业务监控图表,涉及到隐私的数据太多,就不截图了。

    七、监控报警

    故障报警通知的方式有很多种,当然最常用的还是短信和邮件。

     

    短信报警

    邮件报警

     

    八、报警处理

    一般报警后故障如何处理,首先我们可以通过告警升级机制先自动处理,比如Nginx服务down了,可以设置告警升级自动启动Nginx。

    但是如果一般业务出现了严重故障,我们通常根据故障的级别、业务,来指派不同的运维人员进行处理。

    当然不同业务形态、不同架构、不同服务可能采用的方式都不同,这个没有一个固定的模式套用。

    九、面试监控

    在运维面试中,常常会被问题监控相关的问题,这个问题到底该如何来回答,我针对本文给大家提供了一个简单的回答思路

    1、硬件监控

    通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做)、服务器的温度以及其它,可以通过IPMI来实现。当然如果没有硬件全都是云,直接跳过这一步骤。

    2、系统监控

    如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode使用率。当然这些都是需要配置触发器,因为默认太低会频繁报警。

    3、服务监控

    比如公司用的LNMP架构,Nginx自带Status模块、PHP也有相关的Status、MySQL的话可以通过Percona官方工具来进行监控。Redis这些通过自身的info获取信息进行过滤等。方法都类似。要么服务自带。要么通过脚本来实现想监控的内容,以及报警和图形功能。

    4、网络监控

    如果是云主机又不是跨机房,那么可以选择不监控网络。当然你说我们是跨机房以及如何如何,推荐使用smokeping来做网络相关的监控,或者直接交给你们的网络工程师来做,因为术业有专攻。

    5、安全监控

    如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。如果是硬件,那么推荐使用硬件防火墙。使用云可以购买防DDOS,避免出现故障导致down机一天。如果是系统,那么权限、密码、备份、恢复等基础方案要做好。Web同时也可以使用Nginx+Lua来实现一个Web层面的防火墙。当然也可以使用集成好的OpenResty。

    6、Web监控

    Web监控的话题其实还是很多。比如可以使用自带的Web监控来监控页面相关的延迟、js响应时间、下载时间、等等。这里我推荐使用专业的商业软件监控宝或听云来实现。毕竟人家全国各地都有机房(如果本身是多机房那就另说了)。

    7、日志监控

    如果是Web的话可以使用监控Nginx的50x、40x的错误日志,PHP的ERROR日志。其实这些需求无非是,收集、存储、查询、展示,我们其实可以使用开源的ELKStack来实现。Logstash(收集)、Elasticsearch(存储+搜索)、Kibana(展示)。

    8、业务监控

    上面做了那么多,其实最终还是保证业务的运行。这样我们做的监控才有意义。所以业务层面这块的监控需要和开发以及总监开会讨论,监控比较重要的业务指标,(需要开会确认)然后通过简单的脚本就可以实现,最后设置触发器即可 。

    9、流量分析

    平时我们分析日志都是拿awk sed xxx一堆工具来实现。这样对我们统计IP、PV、UV不是很方便。那么可以使用百度统计、Google统计、商业,让开发嵌入代码即可。为了避免隐私也可以使用Piwik来做相关的流量分析。

    10、可视化

    通过Screen以及引入一些第三方的库来美化界面,同时我们也需要知道,订单量突然增加、突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,还是被攻击了。可以结合监控平来梳理各个系统之间的业务关系。

    11、自动化监控

    如上我们做了那么多的工作,当然不能是一台一台的来加key实现。可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。

    总结

    真正想做到更完整的监控体系,目前的开源软件确实无法很好地满足,有条件的公司都开始自己开发自己的监控系统,比如小米开源的Open-Falcon。

    也有比较好的开源的监控框架如Sensu等,再加上InfluxDB、Grafana可以用来定制符合自己企业的监控平台。

    展开全文
  • 系统监控程序

    2011-11-17 14:45:23
    系统监控程序 能够很容易地显示出在系统启动或登录时配置运行了什么程序, 并顺序显示出 Windows 处理的项目。这些程序包含在启动文件夹、Run、RunOnce和其它注册表键。 选项“隐藏通过验证的微软项目”可帮助您来...
  • 远程监控系统它集可以远程登陆控制,使用方便灵活,配置简单,功能强大等优点于一身。  在一些重要的单位,例如金融机构的营业网点,为了实现及时地报警,报警装置能够自动拨号报警或人工拨号报警。然而,保安人员...
  • Prometheus 搭建监控系统

    千次阅读 2019-08-27 19:57:15
    Prometheus是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提...使用传统的监控系统 StatsD 和 Graphite 存在大量的局限性,于是他们在 2012 年开始着手开发一套全新的监控系统。Prometheus ...

    Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于做视频分享的 YouTube,由于他们在微服务架构的道路上越走越远,出现了成百上千的服务,使用传统的监控系统 StatsD 和 Graphite 存在大量的局限性,于是他们在 2012 年开始着手开发一套全新的监控系统。Prometheus 的原作者是 Matt T. Proud,他也是在 2012 年加入 SoundCloud 的,实际上,在加入 SoundCloud 之前,Matt 一直就职于 Google,他从 Google 的集群管理器 Borg 和它的监控系统 Borgmon 中获取灵感,开发了开源的监控系统 Prometheus,和 Google 的很多项目一样,使用的编程语言是 Go。

    很显然,Prometheus 作为一个微服务架构监控系统的解决方案,它和容器也脱不开关系。早在 2006 年 8 月 9 日,Eric Schmidt 在搜索引擎大会上首次提出了云计算(Cloud Computing)的概念,在之后的十几年里,云计算的发展势如破竹。在 2013 年,Pivotal 的 Matt Stine 又提出了云原生(Cloud Native)的概念,云原生由微服务架构、DevOps 和以容器为代表的敏捷基础架构组成,帮助企业快速、持续、可靠、规模化地交付软件。为了统一云计算接口和相关标准,2015 年 7 月,隶属于 Linux 基金会的 云原生计算基金会(CNCF,Cloud Native Computing Foundation) 应运而生。第一个加入 CNCF 的项目是 Google 的 Kubernetes,而 Prometheus 是第二个加入的(2016 年)。

    目前 Prometheus 已经广泛用于 Kubernetes 集群的监控系统中,对 Prometheus 的历史感兴趣的同学可以看看 SoundCloud 的工程师 Tobias Schmidt 在 2016 年的 PromCon 大会上的演讲:The History of Prometheus at SoundCloud 。

    一、Prometheus 概述

    我们在 SoundCloud 的官方博客中可以找到一篇关于他们为什么需要新开发一个监控系统的文章 Prometheus: Monitoring at SoundCloud,在这篇文章中,他们介绍到,他们需要的监控系统必须满足下面四个特性:

    • A multi-dimensional data model, so that data can be sliced and diced at will, along dimensions like instance, service, endpoint, and method.
    • Operational simplicity, so that you can spin up a monitoring server where and when you want, even on your local workstation, without setting up a distributed storage backend or reconfiguring the world.
    • Scalable data collection and decentralized architecture, so that you can reliably monitor the many instances of your services, and independent teams can set up independent monitoring servers.
    • Finally, a powerful query language that leverages the data model for meaningful alerting (including easy silencing) and graphing (for dashboards and for ad-hoc exploration).

    简单来说,就是下面四个特性:

    • 多维度数据模型
    • 方便的部署和维护
    • 灵活的数据采集
    • 强大的查询语言

    实际上,多维度数据模型和强大的查询语言这两个特性,正是时序数据库所要求的,所以 Prometheus 不仅仅是一个监控系统,同时也是一个时序数据库。那为什么 Prometheus 不直接使用现有的时序数据库作为后端存储呢?这是因为 SoundCloud 不仅希望他们的监控系统有着时序数据库的特点,而且还需要部署和维护非常方便。纵观比较流行的时序数据库(参见下面的附录),他们要么组件太多,要么外部依赖繁重,比如:Druid 有 Historical、MiddleManager、Broker、Coordinator、Overlord、Router 一堆的组件,而且还依赖于 ZooKeeper、Deep storage(HDFS 或 S3 等),Metadata store(PostgreSQL 或 MySQL),部署和维护起来成本非常高。而 Prometheus 采用去中心化架构,可以独立部署,不依赖于外部的分布式存储,你可以在几分钟的时间里就可以搭建出一套监控系统。

    此外,Prometheus 数据采集方式也非常灵活。要采集目标的监控数据,首先需要在目标处安装数据采集组件,这被称之为 Exporter,它会在目标处收集监控数据,并暴露出一个 HTTP 接口供 Prometheus 查询,Prometheus 通过 Pull 的方式来采集数据,这和传统的 Push 模式不同。不过 Prometheus 也提供了一种方式来支持 Push 模式,你可以将你的数据推送到 Push Gateway,Prometheus 通过 Pull 的方式从 Push Gateway 获取数据。目前的 Exporter 已经可以采集绝大多数的第三方数据,比如 Docker、HAProxy、StatsD、JMX 等等,官网有一份 Exporter 的列表

    除了这四大特性,随着 Prometheus 的不断发展,开始支持越来越多的高级特性,比如:服务发现更丰富的图表展示使用外部存储强大的告警规则和多样的通知方式。下图是 Prometheus 的整体架构图(图片来源):

     

    从上图可以看出,Prometheus 生态系统包含了几个关键的组件:Prometheus server、Pushgateway、Alertmanager、Web UI 等,但是大多数组件都不是必需的,其中最核心的组件当然是 Prometheus server,它负责收集和存储指标数据,支持表达式查询,和告警的生成。接下来我们就来安装 Prometheus server。

    二、安装 Prometheus server

    Prometheus 可以支持多种安装方式,包括 Docker、Ansible、Chef、Puppet、Saltstack 等。下面介绍最简单的两种方式,一种是直接使用编译好的可执行文件,开箱即用,另一种是使用 Docker 镜像,更多的安装方式可以参考 这里

    2.1 开箱即用

    首先从 官网的下载页面 获取 Prometheus 的最新版本和下载地址,目前最新版本是 2.4.3(2018年10月),执行下面的命令下载并解压:

    1

    2

    $ wget https://github.com/prometheus/prometheus/releases/download/v2.4.3/prometheus-2.4.3.linux-amd64.tar.gz

    $ tar xvfz prometheus-2.4.3.linux-amd64.tar.gz

    然后切换到解压目录,检查 Prometheus 版本:

    1

    2

    3

    4

    5

    6

    $ cd prometheus-2.4.3.linux-amd64

    $ ./prometheus --version

    prometheus, version 2.4.3 (branch: HEAD, revision: 167a4b4e73a8eca8df648d2d2043e21bdb9a7449)

      build user:       root@1e42b46043e9

      build date:       20181004-08:42:02

      go version:       go1.11.1

    运行 Prometheus server:

    1

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

    2.2 使用 Docker 镜像

    使用 Docker 安装 Prometheus 更简单,运行下面的命令即可:

    1

    $ sudo docker run -d -p 9090:9090 prom/prometheus

    一般情况下,我们还会指定配置文件的位置:

    1

    2

    3

    $ sudo docker run -d -p 9090:9090 \

        -v ~/docker/prometheus/:/etc/prometheus/ \

        prom/prometheus

    我们把配置文件放在本地 ~/docker/prometheus/prometheus.yml,这样可以方便编辑和查看,通过 -v 参数将本地的配置文件挂载到 /etc/prometheus/ 位置,这是 prometheus 在容器中默认加载的配置文件位置。如果我们不确定默认的配置文件在哪,可以先执行上面的不带 -v 参数的命令,然后通过 docker inspect 命名看看容器在运行时默认的参数有哪些(下面的 Args 参数):

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    $ sudo docker inspect 0c

    [...]

            "Id": "0c4c2d0eed938395bcecf1e8bb4b6b87091fc4e6385ce5b404b6bb7419010f46",

            "Created": "2018-10-15T22:27:34.56050369Z",

            "Path": "/bin/prometheus",

            "Args": [

                "--config.file=/etc/prometheus/prometheus.yml",

                "--storage.tsdb.path=/prometheus",

                "--web.console.libraries=/usr/share/prometheus/console_libraries",

                "--web.console.templates=/usr/share/prometheus/consoles"

            ],

     

    [...]

    2.3 配置 Prometheus

    正如上面两节看到的,Prometheus 有一个配置文件,通过参数 --config.file 来指定,配置文件格式为 YAML。我们可以打开默认的配置文件 prometheus.yml 看下里面的内容:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    /etc/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']

    Prometheus 默认的配置文件分为四大块:

    • global 块:Prometheus 的全局配置,比如 scrape_interval 表示 Prometheus 多久抓取一次数据,evaluation_interval 表示多久检测一次告警规则;
    • alerting 块:关于 Alertmanager 的配置,这个我们后面再看;
    • rule_files 块:告警规则,这个我们后面再看;
    • scrape_config 块:这里定义了 Prometheus 要抓取的目标,我们可以看到默认已经配置了一个名称为 prometheus 的 job,这是因为 Prometheus 在启动的时候也会通过 HTTP 接口暴露自身的指标数据,这就相当于 Prometheus 自己监控自己,虽然这在真正使用 Prometheus 时没啥用处,但是我们可以通过这个例子来学习如何使用 Prometheus;可以访问 http://localhost:9090/metrics 查看 Prometheus 暴露了哪些指标;

    更多的配置参数可以参考 这里

    三、学习 PromQL

    通过上面的步骤安装好 Prometheus 之后,我们现在可以开始体验 Prometheus 了。Prometheus 提供了可视化的 Web UI 方便我们操作,直接访问 http://localhost:9090/ 即可,它默认会跳转到 Graph 页面:

    prometheus-index.jpg

    第一次访问这个页面可能会不知所措,我们可以先看看其他菜单下的内容,比如:Alerts 展示了定义的所有告警规则,Status 可以查看各种 Prometheus 的状态信息,有 Runtime & Build Information、Command-Line Flags、Configuration、Rules、Targets、Service Discovery 等等。

    实际上 Graph 页面才是 Prometheus 最强大的功能,在这里我们可以使用 Prometheus 提供的一种特殊表达式来查询监控数据,这个表达式被称为 PromQL(Prometheus Query Language)。通过 PromQL 不仅可以在 Graph 页面查询数据,而且还可以通过 Prometheus 提供的 HTTP API 来查询。查询的监控数据有列表和曲线图两种展现形式(对应上图中 Console 和 Graph 这两个标签)。

    我们上面说过,Prometheus 自身也暴露了很多的监控指标,也可以在 Graph 页面查询,展开 Execute 按钮旁边的下拉框,可以看到很多指标名称,我们随便选一个,譬如:promhttp_metric_handler_requests_total,这个指标表示 /metrics 页面的访问次数,Prometheus 就是通过这个页面来抓取自身的监控数据的。在 Console 标签中查询结果如下:

    prometheus-console.jpg

    上面在介绍 Prometheus 的配置文件时,可以看到 scrape_interval 参数是 15s,也就是说 Prometheus 每 15s 访问一次 /metrics 页面,所以我们过 15s 刷新下页面,可以看到指标值会自增。在 Graph 标签中可以看得更明显:

    prometheus-graph.jpg

    3.1 数据模型

    要学习 PromQL,首先我们需要了解下 Prometheus 的数据模型,一条 Prometheus 数据由一个指标名称(metric)和 N 个标签(label,N >= 0)组成的,比如下面这个例子:

    1

    promhttp_metric_handler_requests_total{code="200",instance="192.168.0.107:9090",job="prometheus"} 106

    这条数据的指标名称为 promhttp_metric_handler_requests_total,并且包含三个标签 codeinstance 和 job,这条记录的值为 106。上面说过,Prometheus 是一个时序数据库,相同指标相同标签的数据构成一条时间序列。如果以传统数据库的概念来理解时序数据库,可以把指标名当作表名,标签是字段,timestamp 是主键,还有一个 float64 类型的字段表示值(Prometheus 里面所有值都是按 float64 存储)。

    这种数据模型和 OpenTSDB 的数据模型是比较类似的,详细的信息可以参考官网文档 Data model。另外,关于指标和标签的命名,官网有一些指导性的建议,可以参考 Metric and label naming 。

    虽然 Prometheus 里存储的数据都是 float64 的一个数值,但如果我们按类型来分,可以把 Prometheus 的数据分成四大类:

    • Counter
    • Gauge
    • Histogram
    • Summary

    Counter 用于计数,例如:请求次数、任务完成数、错误发生次数,这个值会一直增加,不会减少。Gauge 就是一般的数值,可大可小,例如:温度变化、内存使用变化。Histogram 是直方图,或称为柱状图,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 的功能。Summary 和 Histogram 十分相似,也用于跟踪事件发生的规模,不同之处是,它提供了一个 quantiles 的功能,可以按百分比划分跟踪的结果。例如:quantile 取值 0.95,表示取采样值里面的 95% 数据。更多信息可以参考官网文档 Metric types,Summary 和 Histogram 的概念比较容易混淆,属于比较高阶的指标类型,可以参考 Histograms and summaries 这里的说明。

    这四种类型的数据只在指标的提供方作区分,也就是上面说的 Exporter,如果你需要编写自己的 Exporter 或者在现有系统中暴露供 Prometheus 抓取的指标,你可以使用 Prometheus client libraries,这个时候你就需要考虑不同指标的数据类型了。如果你不用自己实现,而是直接使用一些现成的 Exporter,然后在 Prometheus 里查查相关的指标数据,那么可以不用太关注这块,不过理解 Prometheus 的数据类型,对写出正确合理的 PromQL 也是有帮助的。

    3.2 PromQL 入门

    我们从一些例子开始学习 PromQL,最简单的 PromQL 就是直接输入指标名称,比如:

    1

    2

    # 表示 Prometheus 能否抓取 target 的指标,用于 target 的健康检查

    up

    这条语句会查出 Prometheus 抓取的所有 target 当前运行情况,譬如下面这样:

    1

    2

    3

    4

    up{instance="192.168.0.107:9090",job="prometheus"}    1

    up{instance="192.168.0.108:9090",job="prometheus"}    1

    up{instance="192.168.0.107:9100",job="server"}    1

    up{instance="192.168.0.108:9104",job="mysql"}    0

    也可以指定某个 label 来查询:

    1

    up{job="prometheus"}

    这种写法被称为 Instant vector selectors,这里不仅可以使用 = 号,还可以使用 !==~!~,比如下面这样:

    1

    2

    3

    up{job!="prometheus"}

    up{job=~"server|mysql"}

    up{job=~"192\.168\.0\.107.+"}

    =~ 是根据正则表达式来匹配,必须符合 RE2 的语法

    和 Instant vector selectors 相应的,还有一种选择器,叫做 Range vector selectors,它可以查出一段时间内的所有数据:

    1

    http_requests_total[5m]

    这条语句查出 5 分钟内所有抓取的 HTTP 请求数,注意它返回的数据类型是 Range vector,没办法在 Graph 上显示成曲线图,一般情况下,会用在 Counter 类型的指标上,并和 rate() 或 irate() 函数一起使用(注意 rate 和 irate 的区别)。

    1

    2

    3

    4

    5

    6

    7

    # 计算的是每秒的平均值,适用于变化很慢的 counter

    # per-second average rate of increase, for slow-moving counters

    rate(http_requests_total[5m])

     

    # 计算的是每秒瞬时增加速率,适用于变化很快的 counter

    # per-second instant rate of increase, for volatile and fast-moving counters

    irate(http_requests_total[5m])

    此外,PromQL 还支持 countsumminmaxtopk 等 聚合操作,还支持 rateabsceilfloor 等一堆的 内置函数更多的例子,还是上官网学习吧。如果感兴趣,我们还可以把 PromQL 和 SQL 做一个对比,会发现 PromQL 语法更简洁,查询性能也更高。

    3.3 HTTP API

    我们不仅仅可以在 Prometheus 的 Graph 页面查询 PromQL,Prometheus 还提供了一种 HTTP API 的方式,可以更灵活的将 PromQL 整合到其他系统中使用,譬如下面要介绍的 Grafana,就是通过 Prometheus 的 HTTP API 来查询指标数据的。实际上,我们在 Prometheus 的 Graph 页面查询也是使用了 HTTP API。

    我们看下 Prometheus 的 HTTP API 官方文档,它提供了下面这些接口:

    • GET /api/v1/query
    • GET /api/v1/query_range
    • GET /api/v1/series
    • GET /api/v1/label/<label_name>/values
    • GET /api/v1/targets
    • GET /api/v1/rules
    • GET /api/v1/alerts
    • GET /api/v1/targets/metadata
    • GET /api/v1/alertmanagers
    • GET /api/v1/status/config
    • GET /api/v1/status/flags

    从 Prometheus v2.1 开始,又新增了几个用于管理 TSDB 的接口:

    • POST /api/v1/admin/tsdb/snapshot
    • POST /api/v1/admin/tsdb/delete_series
    • POST /api/v1/admin/tsdb/clean_tombstones

    四、安装 Grafana

    虽然 Prometheus 提供的 Web UI 也可以很好的查看不同指标的视图,但是这个功能非常简单,只适合用来调试。要实现一个强大的监控系统,还需要一个能定制展示不同指标的面板,能支持不同类型的展现方式(曲线图、饼状图、热点图、TopN 等),这就是仪表盘(Dashboard)功能。因此 Prometheus 开发了一套仪表盘系统 PromDash,不过很快这套系统就被废弃了,官方开始推荐使用 Grafana 来对 Prometheus 的指标数据进行可视化,这不仅是因为 Grafana 的功能非常强大,而且它和 Prometheus 可以完美的无缝融合。

    Grafana 是一个用于可视化大型测量数据的开源系统,它的功能非常强大,界面也非常漂亮,使用它可以创建自定义的控制面板,你可以在面板中配置要显示的数据和显示方式,它 支持很多不同的数据源,比如:Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus 等,而且它也 支持众多的插件

    下面我们就体验下使用 Grafana 来展示 Prometheus 的指标数据。首先我们来安装 Grafana,我们使用最简单的 Docker 安装方式

    1

    $ docker run -d -p 3000:3000 grafana/grafana

    运行上面的 docker 命令,Grafana 就安装好了!你也可以采用其他的安装方式,参考 官方的安装文档。安装完成之后,我们访问 http://localhost:3000/ 进入 Grafana 的登陆页面,输入默认的用户名和密码(admin/admin)即可。

    grafana-home.jpg

    要使用 Grafana,第一步当然是要配置数据源,告诉 Grafana 从哪里取数据,我们点击 Add data source 进入数据源的配置页面:

    grafana-datasource-config.jpg

    我们在这里依次填上:

    要注意的是,这里的 Access 指的是 Grafana 访问数据源的方式,有 Browser 和 Proxy 两种方式。Browser 方式表示当用户访问 Grafana 面板时,浏览器直接通过 URL 访问数据源的;而 Proxy 方式表示浏览器先访问 Grafana 的某个代理接口(接口地址是 /api/datasources/proxy/),由 Grafana 的服务端来访问数据源的 URL,如果数据源是部署在内网,用户通过浏览器无法直接访问时,这种方式非常有用。

    配置好数据源,Grafana 会默认提供几个已经配置好的面板供你使用,如下图所示,默认提供了三个面板:Prometheus Stats、Prometheus 2.0 Stats 和 Grafana metrics。点击 Import 就可以导入并使用该面板。

    grafana-datasource-dashboards.jpg

    我们导入 Prometheus 2.0 Stats 这个面板,可以看到下面这样的监控面板。如果你的公司有条件,可以申请个大显示器挂在墙上,将这个面板投影在大屏上,实时观察线上系统的状态,可以说是非常 cool 的。

    grafana-prometheus-stats.jpg

    五、使用 Exporter 收集指标

     

    目前为止,我们看到的都还只是一些没有实际用途的指标,如果我们要在我们的生产环境真正使用 Prometheus,往往需要关注各种各样的指标,譬如服务器的 CPU负载、内存占用量、IO开销、入网和出网流量等等。正如上面所说,Prometheus 是使用 Pull 的方式来获取指标数据的,要让 Prometheus 从目标处获得数据,首先必须在目标上安装指标收集的程序,并暴露出 HTTP 接口供 Prometheus 查询,这个指标收集程序被称为 Exporter,不同的指标需要不同的 Exporter 来收集,目前已经有大量的 Exporter 可供使用,几乎囊括了我们常用的各种系统和软件,官网列出了一份 常用 Exporter 的清单,各个 Exporter 都遵循一份端口约定,避免端口冲突,即从 9100 开始依次递增,这里是 完整的 Exporter 端口列表。另外值得注意的是,有些软件和系统无需安装 Exporter,这是因为他们本身就提供了暴露 Prometheus 格式的指标数据的功能,比如 Kubernetes、Grafana、Etcd、Ceph 等。

    这一节就让我们来收集一些有用的数据。

    5.1 收集服务器指标

    首先我们来收集服务器的指标,这需要安装 node_exporter,这个 exporter 用于收集 *NIX 内核的系统,如果你的服务器是 Windows,可以使用 WMI exporter

    和 Prometheus server 一样,node_exporter 也是开箱即用的:

    1

    2

    3

    4

    $ wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz

    $ tar xvfz node_exporter-0.16.0.linux-amd64.tar.gz

    $ cd node_exporter-0.16.0.linux-amd64

    $ ./node_exporter

    node_exporter 启动之后,我们访问下 /metrics 接口看看是否能正常获取服务器指标:

    1

    $ curl http://localhost:9100/metrics

    如果一切 OK,我们可以修改 Prometheus 的配置文件,将服务器加到 scrape_configs 中:

    1

    2

    3

    4

    5

    6

    7

    scrape_configs:

      - job_name: 'prometheus'

        static_configs:

          - targets: ['192.168.0.107:9090']

      - job_name: 'server'

        static_configs:

          - targets: ['192.168.0.107:9100']

    修改配置后,需要重启 Prometheus 服务,或者发送 HUP 信号也可以让 Prometheus 重新加载配置:

    1

    $ killall -HUP prometheus

    在 Prometheus Web UI 的 Status -> Targets 中,可以看到新加的服务器:

    prometheus-targets.jpg

    在 Graph 页面的指标下拉框可以看到很多名称以 node 开头的指标,譬如我们输入 node_load1 观察服务器负载:

    prometheus-node-load1.jpg

     

    如果想在 Grafana 中查看服务器的指标,可以在 Grafana 的 Dashboards 页面 搜索 node exporter,有很多的面板模板可以直接使用,譬如:Node Exporter Server Metrics 或者 Node Exporter Full 等。我们打开 Grafana 的 Import dashboard 页面,输入面板的 URL(https://grafana.com/dashboards/405)或者 ID(405)即可。

    grafana-node-exporter.jpg

     

    注意事项

    一般情况下,node_exporter 都是直接运行在要收集指标的服务器上的,官方不推荐用 Docker 来运行 node_exporter。如果逼不得已一定要运行在 Docker 里,要特别注意,这是因为 Docker 的文件系统和网络都有自己的 namespace,收集的数据并不是宿主机真实的指标。可以使用一些变通的方法,比如运行 Docker 时加上下面这样的参数:

    1

    2

    3

    4

    5

    6

    docker run -d \

      --net="host" \

      --pid="host" \

      -v "/:/host:ro,rslave" \

      quay.io/prometheus/node-exporter \

      --path.rootfs /host

    关于 node_exporter 的更多信息,可以参考 node_exporter 的文档 和 Prometheus 的官方指南 Monitoring Linux host metrics with the Node Exporter,另外,Julius Volz 的这篇文章 How To Install Prometheus using Docker on Ubuntu 14.04 也是很好的入门材料。

    5.2 收集 MySQL 指标

    mysqld_exporter 是 Prometheus 官方提供的一个 exporter,我们首先 下载最新版本 并解压(开箱即用):

    1

    2

    3

    $ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz

    $ tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

    $ cd mysqld_exporter-0.11.0.linux-amd64/

    mysqld_exporter 需要连接到 mysqld 才能收集它的指标,可以通过两种方式来设置 mysqld 数据源。第一种是通过环境变量 DATA_SOURCE_NAME,这被称为 DSN(数据源名称),它必须符合 DSN 的格式,一个典型的 DSN 格式像这样:user:password@(host:port)/

    1

    2

    $ export DATA_SOURCE_NAME='root:123456@(192.168.0.107:3306)/'

    $ ./mysqld_exporter

    另一种方式是通过配置文件,默认的配置文件是 ~/.my.cnf,或者通过 --config.my-cnf 参数指定:

    1

    $ ./mysqld_exporter --config.my-cnf=".my.cnf"

    配置文件的格式如下:

    1

    2

    3

    4

    5

    6

    $ cat .my.cnf

    [client]

    host=localhost

    port=3306

    user=root

    password=123456

    如果要把 MySQL 的指标导入 Grafana,可以参考 这些 Dashboard JSON

    注意事项

    这里为简单起见,在 mysqld_exporter 中直接使用了 root 连接数据库,在真实环境中,可以为 mysqld_exporter 创建一个单独的用户,并赋予它受限的权限(PROCESS、REPLICATION CLIENT、SELECT),最好还限制它的最大连接数(MAX_USER_CONNECTIONS)。

    1

    2

    CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;

    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

    5.3 收集 Nginx 指标

    官方提供了两种收集 Nginx 指标的方式。第一种是 Nginx metric library,这是一段 Lua 脚本(prometheus.lua),Nginx 需要开启 Lua 支持(libnginx-mod-http-lua 模块)。为方便起见,也可以使用 OpenResty 的 OPM(OpenResty Package Manager) 或者 luarocks(The Lua package manager) 来安装。第二种是 Nginx VTS exporter,这种方式比第一种要强大的多,安装要更简单,支持的指标也更丰富,它依赖于 nginx-module-vts 模块,vts 模块可以提供大量的 Nginx 指标数据,可以通过 JSON、HTML 等形式查看这些指标。Nginx VTS exporter 就是通过抓取 /status/format/json 接口来将 vts 的数据格式转换为 Prometheus 的格式。不过,在 nginx-module-vts 最新的版本中增加了一个新接口:/status/format/prometheus,这个接口可以直接返回 Prometheus 的格式,从这点这也能看出 Prometheus 的影响力,估计 Nginx VTS exporter 很快就要退役了(TODO:待验证)。

    除此之外,还有很多其他的方式来收集 Nginx 的指标,比如:nginx_exporter 通过抓取 Nginx 自带的统计页面 /nginx_status 可以获取一些比较简单的指标(需要开启 ngx_http_stub_status_module 模块);nginx_request_exporter 通过 syslog 协议 收集并分析 Nginx 的 access log 来统计 HTTP 请求相关的一些指标;nginx-prometheus-shiny-exporter 和 nginx_request_exporter 类似,也是使用 syslog 协议来收集 access log,不过它是使用 Crystal 语言 写的。还有 vovolie/lua-nginx-prometheus 基于 Openresty、Prometheus、Consul、Grafana 实现了针对域名和 Endpoint 级别的流量统计。

    有需要或感兴趣的同学可以对照说明文档自己安装体验下,这里就不一一尝试了。

    5.4 收集 JMX 指标

    最后让我们来看下如何收集 Java 应用的指标,Java 应用的指标一般是通过 JMX(Java Management Extensions) 来获取的,顾名思义,JMX 是管理 Java 的一种扩展,它可以方便的管理和监控正在运行的 Java 程序。

    JMX Exporter 用于收集 JMX 指标,很多使用 Java 的系统,都可以使用它来收集指标,比如:Kafaka、Cassandra 等。首先我们下载 JMX Exporter:

    1

    $ wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

    JMX Exporter 是一个 Java Agent 程序,在运行 Java 程序时通过 -javaagent 参数来加载:

    1

    $ java -javaagent:jmx_prometheus_javaagent-0.3.1.jar=9404:config.yml -jar spring-boot-sample-1.0-SNAPSHOT.jar

    其中,9404 是 JMX Exporter 暴露指标的端口,config.yml 是 JMX Exporter 的配置文件,它的内容可以 参考 JMX Exporter 的配置说明。然后检查下指标数据是否正确获取:

    1

    $ curl http://localhost:9404/metrics

    六、告警和通知

    至此,我们能收集大量的指标数据,也能通过强大而美观的面板展示出来。不过作为一个监控系统,最重要的功能,还是应该能及时发现系统问题,并及时通知给系统负责人,这就是 Alerting(告警)。Prometheus 的告警功能被分成两部分:一个是告警规则的配置和检测,并将告警发送给 Alertmanager,另一个是 Alertmanager,它负责管理这些告警,去除重复数据,分组,并路由到对应的接收方式,发出报警。常见的接收方式有:Email、PagerDuty、HipChat、Slack、OpsGenie、WebHook 等。

    6.1 配置告警规则

    我们在上面介绍 Prometheus 的配置文件时了解到,它的默认配置文件 prometheus.yml 有四大块:global、alerting、rule_files、scrape_config,其中 rule_files 块就是告警规则的配置项,alerting 块用于配置 Alertmanager,这个我们下一节再看。现在,先让我们在 rule_files 块中添加一个告警规则文件:

    1

    2

    rule_files:

      - "alert.rules"

    然后参考 官方文档,创建一个告警规则文件 alert.rules

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    groups:

    - name: example

      rules:

     

      # Alert for any instance that is unreachable for >5 minutes.

      - alert: InstanceDown

        expr: up == 0

        for: 5m

        labels:

          severity: page

        annotations:

          summary: "Instance {{ $labels.instance }} down"

          description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

     

      # Alert for any instance that has a median request latency >1s.

      - alert: APIHighRequestLatency

        expr: api_http_request_latencies_second{quantile="0.5"} > 1

        for: 10m

        annotations:

          summary: "High request latency on {{ $labels.instance }}"

          description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

    这个规则文件里,包含了两条告警规则:InstanceDown 和 APIHighRequestLatency。顾名思义,InstanceDown 表示当实例宕机时(up === 0)触发告警,APIHighRequestLatency 表示有一半的 API 请求延迟大于 1s 时(api_http_request_latencies_second{quantile="0.5"} > 1)触发告警。配置好后,需要重启下 Prometheus server,然后访问 http://localhost:9090/rules 可以看到刚刚配置的规则:

    prometheus-rules.jpg

    访问 http://localhost:9090/alerts 可以看到根据配置的规则生成的告警:

    prometheus-alerts.jpg

     

    这里我们将一个实例停掉,可以看到有一条 alert 的状态是 PENDING,这表示已经触发了告警规则,但还没有达到告警条件。这是因为这里配置的 for 参数是 5m,也就是 5 分钟后才会触发告警,我们等 5 分钟,可以看到这条 alert 的状态变成了 FIRING

    6.2 使用 Alertmanager 发送告警通知

    虽然 Prometheus 的 /alerts 页面可以看到所有的告警,但是还差最后一步:触发告警时自动发送通知。这是由 Alertmanager 来完成的,我们首先 下载并安装 Alertmanager,和其他 Prometheus 的组件一样,Alertmanager 也是开箱即用的:

    1

    2

    3

    4

    $ wget https://github.com/prometheus/alertmanager/releases/download/v0.15.2/alertmanager-0.15.2.linux-amd64.tar.gz

    $ tar xvfz alertmanager-0.15.2.linux-amd64.tar.gz

    $ cd alertmanager-0.15.2.linux-amd64

    $ ./alertmanager

    Alertmanager 启动后默认可以通过 http://localhost:9093/ 来访问,但是现在还看不到告警,因为我们还没有把 Alertmanager 配置到 Prometheus 中,我们回到 Prometheus 的配置文件 prometheus.yml,添加下面几行:

    1

    2

    3

    4

    5

    6

    alerting:

      alertmanagers:

      - scheme: http

        static_configs:

        - targets:

          - "192.168.0.107:9093"

    这个配置告诉 Prometheus,当发生告警时,将告警信息发送到 Alertmanager,Alertmanager 的地址为 http://192.168.0.107:9093。也可以使用命名行的方式指定 Alertmanager:

    1

    $ ./prometheus -alertmanager.url=http://192.168.0.107:9093

    这个时候再访问 Alertmanager,可以看到 Alertmanager 已经接收到告警了:

    alertmanager-alerts.jpg

    下面的问题就是如何让 Alertmanager 将告警信息发送给我们了,我们打开默认的配置文件 alertmanager.ym

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    global:

      resolve_timeout: 5m

     

    route:

      group_by: ['alertname']

      group_wait: 10s

      group_interval: 10s

      repeat_interval: 1h

      receiver: 'web.hook'

    receivers:

    - name: 'web.hook'

      webhook_configs:

      - url: 'http://127.0.0.1:5001/'

    inhibit_rules:

      - source_match:

          severity: 'critical'

        target_match:

          severity: 'warning'

        equal: ['alertname', 'dev', 'instance']

    参考 官方的配置手册 了解各个配置项的功能,其中 global 块表示一些全局配置;route 块表示通知路由,可以根据不同的标签将告警通知发送给不同的 receiver,这里没有配置 routes 项,表示所有的告警都发送给下面定义的 web.hook 这个 receiver;如果要配置多个路由,可以参考 这个例子

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    routes:

    - receiver: 'database-pager'

      group_wait: 10s

      match_re:

        service: mysql|cassandra

     

    - receiver: 'frontend-pager'

      group_by: [product, environment]

      match:

        team: frontend

    紧接着,receivers 块表示告警通知的接收方式,每个 receiver 包含一个 name 和一个 xxx_configs,不同的配置代表了不同的接收方式,Alertmanager 内置了下面这些接收方式:

    • email_config
    • hipchat_config
    • pagerduty_config
    • pushover_config
    • slack_config
    • opsgenie_config
    • victorops_config
    • wechat_configs
    • webhook_config

    虽然接收方式很丰富,但是在国内,其中大多数接收方式都很少使用。最常用到的,莫属 email_config 和 webhook_config,另外 wechat_configs 可以支持使用微信来告警,也是相当符合国情的了。

    其实告警的通知方式是很难做到面面俱到的,因为消息软件各种各样,每个国家还可能不同,不可能完全覆盖到,所以 Alertmanager 已经决定不再添加新的 receiver 了,而是推荐使用 webhook 来集成自定义的接收方式。可以参考 这些集成的例子,譬如 将钉钉接入 Prometheus AlertManager WebHook

    七、学习更多

    到这里,我们已经学习了 Prometheus 的大多数功能,结合 Prometheus + Grafana + Alertmanager 完全可以搭建一套非常完整的监控系统。不过在真正使用时,我们会发现更多的问题。

    7.1 服务发现

    由于 Prometheus 是通过 Pull 的方式主动获取监控数据,所以需要手工指定监控节点的列表,当监控的节点增多之后,每次增加节点都需要更改配置文件,非常麻烦,这个时候就需要通过服务发现(service discovery,SD)机制去解决。Prometheus 支持多种服务发现机制,可以自动获取要收集的 targets,可以参考 这里,包含的服务发现机制包括:azure、consul、dns、ec2、openstack、file、gce、kubernetes、marathon、triton、zookeeper(nerve、serverset),配置方法可以参考手册的 Configuration 页面。可以说 SD 机制是非常丰富的,但目前由于开发资源有限,已经不再开发新的 SD 机制,只对基于文件的 SD 机制进行维护。

    关于服务发现网上有很多教程,譬如 Prometheus 官方博客中这篇文章 Advanced Service Discovery in Prometheus 0.14.0 对此有一个比较系统的介绍,全面的讲解了 relabeling 配置,以及如何使用 DNS-SRV、Consul 和文件来做服务发现。另外,官网还提供了 一个基于文件的服务发现的入门例子,Julius Volz 写的 Prometheus workshop 入门教程中也 使用了 DNS-SRV 来当服务发现

    7.2 告警配置管理

    无论是 Prometheus 的配置还是 Alertmanager 的配置,都没有提供 API 供我们动态的修改。一个很常见的场景是,我们需要基于 Prometheus 做一套可自定义规则的告警系统,用户可根据自己的需要在页面上创建修改或删除告警规则,或者是修改告警通知方式和联系人,正如在 Prometheus Google Groups 里的 这个用户的问题:How to dynamically add alerts rules in rules.conf and prometheus yml file via API or something?不过遗憾的是,Simon Pasquier 在下面说到,目前并没有这样的 API,而且以后也没有这样的计划来开发这样的 API,因为这样的功能更应该交给譬如 Puppet、Chef、Ansible、Salt 这样的配置管理系统。

    7.3 使用 Pushgateway

    Pushgateway 主要用于收集一些短期的 jobs,由于这类 jobs 存在时间较短,可能在 Prometheus 来 Pull 之前就消失了。官方对 什么时候该使用 Pushgateway 有一个很好的说明。

    总结

    这篇博客参考了网络上大量关于 Prometheus 的中文资料,有文档,也有博客,比如 1046102779 的 Prometheus 非官方中文手册宋佳洋的电子书《Prometheus 实战》,在这里对这些原作者表示敬意。在 Prometheus 官方文档的 Media 页面,也提供了很多学习资源。

    关于 Prometheus,还有非常重要的一部分内容这篇博客没有涉及到,正如博客一开头所讲的,Prometheus 是继 Kubernetes 之后第二个加入 CNCF 的项目,Prometheus 和 Docker、Kubernetes 的结合非常紧密,使用 Prometheus 作为 Docker 和 Kubernetes 的监控系统也越来越主流。关于 Docker 的监控,可以参考官网的一篇指南:Monitoring Docker container metrics using cAdvisor,它介绍了如何使用 cAdvisor来对容器进行监控;不过 Docker 现在也开始原生支持 Prometheus 的监控了,参考 Docker 的官方文档 Collect Docker metrics with Prometheus;关于 Kubernetes 的监控,Kubernetes 中文社区 里有不少关于 Promehtheus 的资源,另外,《如何以优雅的姿势监控 Kubernetes》这本电子书也对 Kubernetes 的监控有一个比较全面的介绍。

    最近两年 Prometheus 的发展非常迅速,社区也非常活跃,国内研究 Prometheus 的人也越来越多。随着微服务,DevOps,云计算,云原生等概念的普及,越来越多的企业开始使用 Docker 和 Kubernetes 来构建自己的系统和应用,像 Nagios 和 Cacti 这样的老牌监控系统会变得越来越不适用,相信 Prometheus 最终会发展成一个最适合云环境的监控系统。

    附录:什么是时序数据库?

    上文提到 Prometheus 是一款基于时序数据库的监控系统,时序数据库常简写为 TSDB(Time Series Database)。很多流行的监控系统都在使用时序数据库来保存数据,这是因为时序数据库的特点和监控系统不谋而合。

    • 增:需要频繁的进行写操作,而且是按时间排序顺序写入
    • 删:不需要随机删除,一般情况下会直接删除一个时间区块的所有数据
    • 改:不需要对写入的数据进行更新
    • 查:需要支持高并发的读操作,读操作是按时间顺序升序或降序读,数据量非常大,缓存不起作用

    DB-Engines 上有一个关于时序数据库的排名,下面是排名靠前的几个(2018年10月):

    另外,liubin 在他的博客上写了一个关于时序数据库的系列文章:时序列数据库武斗大会,推荐。

    参考

    1. Prometheus 官方文档【英文】
    2. Prometheus 官方文档【中文】
    3. The History of Prometheus at SoundCloud
    4. Prometheus: Monitoring at SoundCloud
    5. Google And Friends Add Prometheus To Kubernetes Platform
    6. 云原生架构概述
    7. 还不了解 CNCF?关于 CNCF 的三问三答!
    8. 时序列数据库武斗大会之什么是TSDB
    9. 时序列数据库武斗大会之TSDB名录 Part 1
    10. Prometheus 入门
    11. Prometheus 初探
    12. 监控利器之 Prometheus
    13. 使用Prometheus+Grafana监控MySQL实践
    14. 使用Prometheus+grafana打造高逼格监控平台
    15. 初试 Prometheus + Grafana 监控系统搭建并监控 Mysql
    16. 使用Prometheus和Grafana监控Mysql服务器性能
    17. 使用Prometheus监控服务器
    18. Prometheus 入门与实践
    19. 基于Prometheus的分布式在线服务监控实践
    20. grafana+ prometheus+php 监控系统实践
    21. Grafana+prometheus+php 自动创建监控图
    22. Prometheus+Grafana监控部署实践
    23. How To Install Prometheus using Docker on Ubuntu 14.04

    原文链接https://www.aneasystone.com/archives/2018/11/prometheus-in-action.html

    展开全文
  • 前段时间自己用两台工作站搭建...Ganglia 是一款为HPC(高性能计算) 集群设计的可扩展性的分布式监控系统,它可以监视和显示集群中节点的各种状态信息,它由运行在各个节点上的守护进程gmond 采集 CPU、内存、磁盘利...
  • 微服务系统监控体系

    2021-01-06 21:13:11
    监控是为服务治理的关键环节,监控系统的完善程度,直接影响整个微服务系统质量的好坏,我们微服务在线上运行的时候,有没有一套完善的监控体系,能够实时了解它的健康情况,对整个系统的可靠性和稳定性是非常重要的...
  • 前几个星期在写一个微博监控系统可谓是一波三折啊获取到微博后因为一些字符编码问题导致心态爆炸开发中断但是就在昨天发现了另外一个微博的接口 一个手机微博的接口经过一番测试后认为这个接口满足我的要求就继续...
  • Storm系统监控脚本

    2015-09-22 16:44:33
    该文档为storm相关脚本说明文档,包括集群免登陆脚本,操作ZK集群,及最重要的nimbus监控重启脚本。该部分附有源代码。
  • cockpit监控系统

    千次阅读 2019-06-18 08:20:13
    一.Cockpit简介1.1基本介绍 Cockpit是一个免费且开源的基于web的管理工具,系统管理员可以执行诸如存储管理、网络配置、检查日志、管理容器等任务。通过Cockpit提...
  • 煤矿安全实时监控系统(简单新闻发布系统) 这个程序主要功能是信息发布,留言本,信息分类。 主页上的登陆是ajax的,下面那个年份查询是自动生成图片,大家可以研究一下。 整个程序是struts1.2的版本构架,数据库是...
  • 在linux系统的环境下,由于可以多用户进行登录,有时候会出现一些混乱,有时候会误删一些数据,如果想查出恶意进攻的用户及IP地址,这就需要我们对远程连接的用户进行监控。下面给出具体实现方法。 通过在/etc/...
  • Zabbix监控系统系列之八:日志监控

    千次阅读 2019-08-13 22:40:21
    [日志监控介绍] 之前,我介绍过 [ Windows环境监控RMAN备份并发送邮件BAT脚本 ] 的脚本监控方法。这次我们来说说Zabbix监控日志如何实现。日志文件监控,它最主要的是监控日志文件中有没有某个字符串的表达式。 如下...
  • 手机视频监控系统

    千次阅读 2012-07-21 16:56:30
    手机视频监控系统是通过用户的手机随时随地来观看远程监控点的视频。那么手机视频监控是如何实现的呢?整套系统是基于互联网而运行的,通过在某个地方安置的监控摄像机拍摄,并将拍摄的视频画面经过视频服务器压缩...
  • 1 案例1:常用系统监控命令 1.1 问题 本案例要求熟悉查看Linux系统状态的常用命令,为进一步执行具体的监控任务做准备: 查看内存信息查看交换分区信息查看磁盘信息查看CPU信息查看网卡信息查看端口信息查看网络连接...
  • 1、登陆用户数 2、CPU负载 3、服务探测 4、硬盘空间(根分区、应用分区、备份分区) 5、内存资源 短信接口、邮件接口 格式上传至附件 脚本: #!/bin/bash #监控用户登录 Usermonitor () { LoginUser=`uptime | awk...
  • Amazon Spider亚马逊商品信息抓取系统,包含商品监控模块,商品评价监控模块,商品库存监控系统,评论词云模块,用户管理模块 初始版本说明,爬虫采用Selenium,预先设计不够完善,需要手动增加代理IP。 最新版本...
  • 新能源汽车远程监控系统具有实时监控车辆的电池信息,电机控制器信息,整车信息车辆运行状态信息、故障信息、电池信息等的显示、查询和存储功能,用户能够实时掌握电动车辆的运行情况,使人、车、路三者紧密协调,为...
  • 源码安装Zabbix5.0监控系统

    千次阅读 2020-08-05 00:09:50
    Zabbix5.0监控系统简介Zabbix监控组件及流程三级目录 简介 Zabbix是一个基于WEB界面的提供分布式系统监控的企业级的开源解决方案,Zabbix能监视各种网络参数,保证服务器系统的安全稳定的运行,并提供灵活的通知机制...
  • 导读:随着工业4.0的不断普及与发展,中易云针对供暖公司换热站开发完成一套集监管、控制、预警、报警于一体的供暖换热站智能监控系统,实现全天候24小时在线监测,每天超过4000次状态巡检,保障供暖换热站的良好...
  • 1、监控是什么 实现系统从存活性到性能及关键业务数据波动异常的全景监控 2、为什么要做监控 3、监控系统的架构 4、监控系统为什么要分级 5、应用监控 6、要解决的问题
  • 齐鹏的java信息发布系统(煤矿安全实时监控系统web)(struts1.2 mysql) 煤矿安全实时监控系统(简单新闻发布系统) 作者:齐鹏 这个程序是本人的毕业设计,主要功能是信息发布,留言本,信息分类。 主页上的登陆是...
  • 幼儿园视频监控系统设计方案 随着监控技术的不断发展,已经有越来越多的幼儿园开始采用监控系统作为学校的辅助设备。采用监控系统已成为许多幼儿园智能化管理的新趋势。通过认真分析幼儿园视频监控需求,我们在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,338
精华内容 21,335
关键字:

怎样登录监控系统