zoukankan      html  css  js  c++  java
  • Prometheus监控系统的从无到有

     

    Prometheus是什么

    Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,

    拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算

    基金会(CNCF),成为继Kubernetes之后的第二个托管项目。

     

    https://prometheus.io

    https://github.com/prometheus

     

    Prometheus特点:

    • 多维数据模型:由度量名称和键值对标识的时间序列数据

    • PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询

    • 不依赖分布式存储,单个服务器节点可直接工作

    • 基于HTTP的pull方式采集时间序列数据

    • 推送时间序列数据通过PushGateway组件支持

    • 通过服务发现或静态配置发现目标

    • 多种图形模式及仪表盘支持(grafana)

    Prometheus组成及架构

     

    • Prometheus Server:收集指标和存储时间序列数据,并提供查询接口

    • ClientLibrary:客户端库

    • Push Gateway:短期存储指标数据。主要用于临时性的任务

    • Exporters:采集已有的第三方服务监控指标并暴露metrics

    • Alertmanager:告警

    • Web UI:简单的Web控制台

     

    1、首先,核心是一个Prometheus Server服务端,然后它默认会定时的通过http的方式去拉取客户端的数据,或者对于一些短期的任务可以通过Push Gateway组件由客户端推送到Push Gateway,然后server端去拉取Push Gateway的存储的数据。

    2、再接收到数据后,普罗米会把数据存储在TSDB(时间序列数据库)中,不需要依赖于其他存储,当然,在大规模的应用中,其本身的存储是远远不够的,所以我们需要配置存储路径来存储数据。--storage.tsdb.path=/data/prometheus/prometheus/data/   在启动普罗米时用这个参数配置存储路径

    3、对于普罗米的服务发现功能(service discovery),普罗米内置了很多配置可以帮助我们更好的去监控我们的客户端,比如说file_sd,可以通过文件去发现主机,并打上各种标签便于管理和区分。目前,普罗米对于kubernetes是市面上最为兼容的监控器,我们可以通过简单地配置就可以管理上kubernetes里的所有主机,这也普罗米兴起的一个重要原因。

    4、普罗米内置了很多http api,其他产品都可以通过api来获取普罗米的数据,比如说grafana通过PromSQL去获取数据以便展示。

    5、普罗米在获取了数据后,我们需要有个机器人能帮助我们一直监控这些数据的健康状态,那么就需要一个报警组件altermanager,通过2遍的配置对接后,alertmanager对数据进行监控,并可以通过邮件、微信等方式发送告警。

    监控系统的搭建

    服务器配置:

    系统:centos 7.x

    Cpu:4核

    内存:16G

    主目录:/data/prometheus/

    prometheus

    1、安装

    二进制部署:https://prometheus.io/docs/prometheus/latest/getting_started/

    Docker部署:https://prometheus.io/docs/prometheus/latest/installation/

    访问Web:http://localhost:9090

    cat prometheus.yml

     

    scrape_interval:收集数据间隔

    evaluation_interval:评估规则间隔

    alerting:配置连接alertmanager

    rule_files:监控规则文件的目录

    scrape_configs:定义监控的项目及配置

    file_sd_config:基于文件发现规则

    2、配置后台服务

    vim /usr/lib/systemd/system/prometheus.service

    ########################################

    [Unit]

    Description=Prometheus server daemon

    [Service]

    ExecStart=/data/prometheus/prometheus/prometheus --config.file=/data/prometheus/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/prometheus/data/

    Restart=on-failure

    [Install]

    WantedBy=multi-user.target

    ###########################################

    systemctl daemon-reload

    systemctl start Prometheus

    安装grafana展示数据

    1、安装

    https://grafana.com/grafana/download

    2、添加data sources

     

     

    3、添加或创建展示页

    这里我用的是别人创建好的页面(id:8919),如果不满意,我们可以把这个导出json格式,然后修改再导进去生成新的展示页

     

     

    3、     用PromSQL创建我们想要展示的数据

    node_online_keepalive{instance=~"$node"}

     

    安装alertmanager

    1、安装

    地址1:https://prometheus.io/download/

    地址2:https://github.com/prometheus/alertmanager/releases

    2、配置后台服务,与普罗米一样,看前面

    /data/prometheus/alertmanager/alertmanager --config.file=/data/prometheus/alertmanager/alertmanager.yml

    3、配置文件

    Alertermanager配置路由和接收者

     

     

    Prometheus配置告警规则

     

    4、配置普罗米与alertmanager通信

     

    普罗米定义监控规则,把告警传给alertmanager,alertmanager根据路由选择发送方式

    5、告警状态

    • Inactive:这里什么都没有发生。

    • Pending:已触发阈值,但未满足告警持续时间

    • Firing:已触发阈值且满足告警持续时间。警报发送给接受者

     

    6、告警收敛(分组,抑制,静默)

    分组(group):将类似性质的警报分类为单个通知

    抑制(Inhibition):当警报发出后,停止重复发送由此警报引发的其他警报

    静默(Silences):是一种简单的特定时间静音提醒的机制

    客户端数据的采集方案

    需求:由于项目需求,我们往往需要采集exporter不能采集到的数据,那么用go在短时间内定制exporter和后期交接的维护都会存在时间成本,所有我们可以用通过node_exporter --collector.textfile.directory参数,用shell或者python来收集数据。

    流程:

    1、所有客户端都安装一个node_exporter,我们通过node的接口让普罗米来拉数据

    /data/prometheus/node_exporter/node_exporter --collector.textfile.directory=/data/prometheus/node_exporter/textfile_collector --web.listen-address=:9999

    2、新建数据采集脚本(不能带有exit等退出的语句,原因后期讲到)

    cd /data/prometheus/node_exporter/textfile_scpripts/

    vim node_online_keepalive

     

    3、创建调度

    vim /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common

     

    #如果搭服后调度没运行了,那么把下面几步都加在搭服脚本中吧

    chown root:root cron_node_exporter_textfile_common chmod 644 cron_node_exporter_textfile_common

    ln -s /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common /etc/cron.d

    systemctl restart crond

    4、创建runner脚本批量运行采集脚本

    cat /data/prometheus/node_exporter/textfile_scpripts/runner

     

     

    5、查看有无收集到数据

    cat /data/prometheus/node_exporter/textfile_collector/node_online_keepalive.prom

     

    web界面查看metrics

     

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/xysr-tom/p/13389650.html
Copyright © 2011-2022 走看看