• 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

     

  • 相关阅读:
    drag element
    时间会改变一切
    Windows下MySQL的my.ini文件字符集测试(二)
    Windows下MySQL的my.ini文件字符集测试
    SQL Server和MySQL主外键写法对比
    SQL Server外键约束
    [SQL Server]重命名数据库【转】
    SQL Server 2008 R2链接MySQL 5.6
    空值的日期类型和update 中的null
    删除数据库中所有表
  • 原文地址:https://www.cnblogs.com/xysr-tom/p/13389650.html
Copyright © 2020-2023  润新知