前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0832-如何安装及使用Prometheus

0832-如何安装及使用Prometheus

作者头像
Fayson
发布2021-04-19 16:03:28
2.1K1
发布2021-04-19 16:03:28
举报
文章被收录于专栏:Hadoop实操Hadoop实操

1.Prometheus简介

Prometheus 是一个具有维度数据模型,灵活的查询语言,高效的时间序列数据库和现代警报方法的开源监视系统。

架构图如下:

主要组件功能组件如下:

Prometheus 的生态系统包括多个组件,大部分的组件都是用 Go 语言编写的,因此部署非常方便,而这些组件大部分都是可选的,主要组件介绍如下:

  • Prometheus Server

Prometheus Server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用 Service Discovery 的方式动态管理监控目标,并从这些监控目标中获取数据。

Prometheus Server 需要对采集到的监控数据进行存储,Prometheus Server 本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。

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

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

Retrieval 模块定时拉取数据,并通过 Storage 模块保存数据。PromQL 为 Prometheus 提供的查询语法,PromQL 模块通过解析语法树,调用 Storage 模块查询接口获取监控数据。

  • 推送网关(Pushgateway )

主要是实现接收由 Client push 过来的指标数据,在指定的时间间隔,由主程序来抓取。

由于 Prometheus 数据采集基于 Pull 模型进行设计,因此在网络环境的配置上必须要让 Prometheus Server 能够直接与 Exporter 进行通信。当这种网络需求无法直接满足时,就可以利用 Pushgateway 来进行中转。可以通过 Pushgateway 将内部网络的监控数据主动 Push 到 Gateway 当中。而 Prometheus Server 则可以采用同样 Pull 的方式从 Pushgateway 中获取到监控数据。

  • Exporter

主要用来采集数据,并通过 HTTP 服务的形式暴露给 Prometheus Server,Prometheus Server 通过访问该 Exporter 提供的接口,即可获取到需要采集的监控数据。常见的Exporter有很多,例如node_exporter、mysqld_exporter、haproxy_exporter 等,支持如 HAProxy、StatsD、Graphite、Redis 此类的服务监控等;

  • 告警管理器( Alertmanager)

管理告警,主要是负责实现报警功能。在 Prometheus Server 中支持基于 PromQL 创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由 Alertmanager进行管理。

在 Alertmanager中我们可以与邮件,Slack 等等内置的通知方式进行集成,也可以通过 Webhook 自定义告警处理方式。Alert Manager 即 Prometheus 体系中的告警处理中心。

2.下载及安装

1. Prometheus安装包下载

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

由于笔者的操作系统为Redhat7 ,x86的机器,下载的版本如下图所示 ,当前最新版本为2.25

可以离线下载后解压或者如下:

代码语言:javascript
复制
wget https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz
#解压
tar xvfz prometheus-*.tar.gz cd prometheus-*
#查看帮助
./prometheus --help

配置Prometheus,默认配置如下

Prometheus配置为YAML,Prometheus附带了一个示例配置prometheus.yml,

删除多余的注释后如下:

代码语言:javascript
复制
global:   scrape_interval:     15s   evaluation_interval: 15s  rule_files:   # - "first.rules"   # - "second.rules"  scrape_configs:   - job_name: prometheus     static_configs:       - targets: ['localhost:9090']

示例配置文件中配置的三个模块:global,rule_files,和scrape_configs。global模块块控制Prometheus服务器的全局配置,有两个配置项。

第一个scrape_interval控制,Prometheus多久收集一次目标数据。可以为单个目标覆盖此目标。在这种情况下,全局设置是每15收集一次。

evaluation_interval选项控制Prometheus多久评估一次规则。Prometheus使用规则来创建新的时间序列并生成警报。rule_files模板块指定了我们希望Prometheus服务器加载的任何规则的位置。默认没有任何规则。 scrape_configs模块控制Prometheus监控哪些资源。由于Prometheus 将有关自身服务的数据公开为HTTP端点,因此它可以抓取并监视其自身的运行状况。在默认配置中,job 名为prometheus的作业,会收集Prometheus服务器公开的时间序列数据。该作业包含一个静态配置的目标localhost 端口9090。Prometheus希望指标可用于路径上的目标/metrics,因此,此默认作业是通过http://localhost:9090/metrics网址进行抓取,返回的时间序列数据将详细说明Prometheus服务器的状态和性能。

2.启动prometheus

代码语言:javascript
复制
./prometheus --config.file="prometheus.yml" 
#如果默认的9090 端口被占用,可以修改prometheus.yml配置文件中的#targets 的端口,并使用如下方式指定端口启动
./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9300"

3.访问Grafana web页面,默认端口为9090

代码语言:javascript
复制
http://192.168.0.99:9090/

命名为Prometheus导出的有关其自身的一个指标(两次目标采集之间的实际时间间隔,默认设置为15S)。在表达式控制台中输入以下内容,然后单击“执行”:如下图

代码语言:javascript
复制
prometheus_target_interval_length_seconds

默认使用表格展示,可以选择图表暂时如下:

3.Node Exporter 使用及配置

代码语言:javascript
复制
#下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
#解压
tar -xzvf node_exporter-*.*.tar.gz cd node_exporter-*.*
#启动,默认端口为9100,同样可以使用--web.listen-address #xx.xx.xx.xx:port 来修改默认启动端口
./node_exporter

修改prometheus.yml配置,在scrape_configs添加一个server job,用于监控集群内4台主机的配置

代码语言:javascript
复制
- job_name: 'server'
    static_configs:
    - targets: ['192.168.0.100:9100','192.168.0.99:9100','192.168.0.117:9100','192.168.0.118:9100']

或者如下格式亦可

然后重新启动Prometheus,到界面查看监控的目标,显示为绿色的UP表示已成功监控,黄色UNKNOWN 表示暂未采集到数据,红色DOWN 表示采集失败,需要检查服务状态

然后到浏览器验证Prometheus现在是否具有有关Node Exporter公开的时间序列的信息,例如node_cpu_seconds_total

4.集成Grafana展示

虽然在Prometheus的WebUI 中有图表展示,但通常我们使用Grafana 展示或者通过API 采集数据到其他展示平台,下面举例说明如何在Grafana中展示Node Exporter的数据信息,关于如何下载安装Grafana,在之前的《0707-如何安装Grafana并使用Cloudera Manager datasource插件》有详细介绍。

首先在Grafana > Data Source 中添加Prometheus的数据源,如下图所示,在URL中添加Prometheus的地址http://192.168.0.99:9090

然后到Grafana 官网推荐的dashboard中下载一个展示样例模板来展示 Node Exporter的信息,下载地址https://grafana.com/grafana/dashboards

本文举例使用https://grafana.com/grafana/dashboards/8919,中文版本的Node Exporter 展示模板

然后导入Grafana,如果有连接外网可以使用id 方式,离线可以通过下载JSON文件的方式导入

导入后选择刚刚添加的Prometheus数据源,然后执行导入

然后就可以看到中文版本的Node Exporter 展示页面,相比Prometheus web界面展示,有更多的可操作空间也更加美观

5.总结

Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视,在微服务中,它对多维数据收集和查询的支持也有较大的优势,并且能够很方便的集成Grafana用于直观展示。

Prometheus具有非常好的可靠性,可让我们快速诊断问题,如大数据集群中的服务器问题等。并且每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,依旧可以依靠它,并且无需设置广泛的基础结构即可使用。

但如果需要100%的准确性(例如按请求计费),则Prometheus并不是好的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他更专业系统来收集和分析数据以进行计费,并使用Prometheus进行额外的监控。

Prometheus在大数据中也有很大的辅助监控的作用,再下次文档中将详细介绍如何使用Prometheus监控大数据组件服务。

相关链接:

Prometheus官网:https://prometheus.io/

Grafana 官网:https://grafana.com/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档