Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

介绍

什么是Prometheus

Prometheus是一个开源监控系统,前身是SoundCloud的告警插件。

从2012年开始,Prometheus逐渐被大量公司使用。该项目的社区也便跃起来,收到越来越多的贡献。在2016年继Kurberntes之后,Prometheus加入了Cloud Native Computing Foundation。

 资源放送

2021新版Linux运维高级云计算-红帽RHCE实战课程合集,扫描下方二维码即可领取!

Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

如果有朋友需要自学,或者没有很好的学习途径,那么可以看一下这个视频:

Linux运维高级云计算-红帽RHCE实战课程合集

这是一个零基础入门的教程,对于刚开始接触Linux运维的同学还是很友好的,希望对你有帮助。

 

特征

  • 多维度数据模型。

  • 不依赖分布式存储,单个服务器节点是自主的。

  • 以HTTP方式,通过pull模型拉去时间序列数据。

  • 灵活的查询语言。

  • 也通过中间网关支持push模型。

  • 通过服务发现或者静态配置,来发现目标服务对象。

  • 支持多种多样的图表和界面展示,prometheus和grafana是部署监控的最佳实践。

组件

Prometheus生态包括了很多组件,它们中的一些是可选的:

  • 主服务Prometheus Server负责抓取和存储时间序列数据。

  • 客户库负责检测应用程序代码。

  • 支持短生命周期的PUSH网关。

  • 基于Rails/SQL仪表盘构建器的GUI。

  • 多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的。

  • 数据存储格式。

  • 警告管理器。

  • 命令行查询工具。

  • 其他各种支撑工具。

多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署。

构架

下面这张图说明了Prometheus的整体架构,以及生态中的一些组件作用:

Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

Prometheus服务,可以直接通过目标拉取数据,或者间接地通过中间网关拉取数据。

它在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中,PromQL和其他API可视化地展示收集的数据。

适用场景

Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。

Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。

不适用场景

Prometheus,它的价值在于可靠性。甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。

如果你对统计数据需要100%的精确,它并不适用。例如:它不适用于实时计费系统。

安装

使用预编译二进制文件。

我们为Prometheus大多数的官方组件,提供了预编译二进制文件。可用版本下载列表源码安装。

如果要从源码安装Prometheus的官方组件,可以查看各个项目源码目录下的Makefile。

注意点:在web上的文档指向最新的稳定版(不包括预发布版)。下一个版本指向master分支还没有发布的版本。

Docker安装

所有Prometheus服务的Docker镜像在官方组织prom下,都是可用的。

在Docker上运行Prometheus服务,只需要简单地执行docker run -p 9090:9090 prom/prometheus命令行即可。这条命令会启动Prometheus服务,使用的是默认配置文件,并对外界暴露9090端口。

Prometheus镜像使用docker中的volumn卷存储实际度量指标。在生产环境上使用容器卷模式, 可以在Prometheus更新和升级时轻松管理Prometheus数据, 这种使用docker volumn卷方式存储数据,是被docker官方强烈推荐的。

通过几个选项,可以达到使用自己的配置的目的。下面有两个例子。

卷&绑定挂载

在运行Prometheus服务的主机上,做一个本地到docker容器的配置文件关系映射:

docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

或者为这个配置文件使用一个独立的volumn:

docker run -p 9090:9090 -v /prometheus-data
prom/prometheus -config.file=/prometheus-data/prometheus.yml

自定义镜像

为了避免在主机上与docker映射配置文件,我们可以直接将配置文件拷贝到docker镜像中。如果Prometheus配置是静态的,并且在所有服务器上的配置相同,这种把配置文件直接拷贝到镜像中的方式是非常好的。

例如:利用Dockerfile创建一个Prometheus配置目录, Dockerfile应该这样写:

FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/

然后编译和运行它:

docker build -t my-prometheus .
docker run -p 9090:9090 my-prometheus

一个更高级的选项是可以通过一些工具动态地渲染配置,甚至后台定期地更新配置。

使用配置管理系统:

如果你喜欢使用配置管理系统,你可能对下面地第三方库感兴趣:

Ansible:

  • griggheo/ansible-prometheus

  • William-Yeh/ansible-prometheus

Chef:

  • rayrod2030/chef-prometheus

SaltStack:

  • bechtoldt/saltstack-prometheus-formula

启动

入门教程:

本篇是一篇hello,world风格的入门指南,使用一个简单的例子,向大家演示怎么样安装、配置和使用Prometheus。

你可以下载和本地运行Prometheus服务,通过配置文件收集Prometheus服务自己产生的数据,并在这些收集数据的基础上,进行查询、制定规则和图表化显示所关心的数据。

下载和运行Prometheus

tar xvfz prometheus-*.tar.gz
cd prometeus-*

在运行Prometheus服务之前,我们需要指定一个该服务运行所需要的配置文件。

配置Prometheus服务监控本身:

Prometheus通过Http方式拉取目标机上的度量指标。Prometheus服务也暴露自己运行所产生的数据,它能够抓取和监控自己的健康状况。

实际上,Prometheus服务收集自己运行所产生的时间序列数据,是没有什么意义的。但是它是一个非常好的入门级教程。保存一下的Prometheus配置到文件中,并自定义命名该文件名,如:prometheus.yml

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here its 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'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

启动Prometheus服务

cd到Prometheus服务目录,并指定刚刚自定义好的配置文件,并启动Prometheus服务, 如下所示:

start Prometheus.

By default, Prometheus stores its database in ./data (flag -storage.local.path).

./prometheus -config.file={$dir}/prometheus.yml # $dir = absolutely/relative path

Prometheus服务启动成功后,然后再打开浏览器在页面上数据http://localhost:9090. 服务运行几秒后,会开始收集自身的时间序列数据。

你也可以通过在浏览器输入http://localhost:9090/metrics,直接查看Prometheus服务收集到的自身数据。

Prometheus服务执行的操作系统线程数量由GOMAXPROCS环境变量控制。从Go 1.5开始,默认值是可用的CPUs数量。

盲目地设置GOMAXPROCS到一个比较高德值,有可能会适得其反。见Go FAQs。

注意:Prometheus服务默认需要3GB的内存代销。如果你的机器内存比较小, 你可以调整Prometheus服务使用更少的内存。

使用表达式浏览器

我们试着查看一些Prometheus服务自身产生的数据。为了使用Prometheus内置表达式浏览器,可以在浏览器中数据http://localhost:9090/graph。选择"Console"视图,同一层级还有"Graph"tab。

如果你可以从http://localhost:9090/metrics查看到收集的度量指标数据,那么其中有一个指标数据名称为prometheus_target_interval_length_seconds(两次抓取数据之间的时间差)可以被提取出来,可以在表达式控制框中输入:

prometheus_target_interval_length_seconds

它应该会返回带有prometheus_target_interval_length_seconds度量指标的许多时间序列数据,只是带有不能标签, 这些标签有不同的延迟百分比和目标群组之间的间隔。

如果我们仅仅对p99延迟感兴趣,我们使用下面的查询表达式收集该信息:

prometheus_target_interval_length_seconds{quantile=“0.99”}

为了统计时间序列数据记录的总数量,你可以写:

count(prometheus_target_interval_length_seconds)
更多的表达式语言,详见表达式语言文档

使用图形界面

使用http://localhost:9090/graph链接,查看图表"Graph"。

例如:输入下面的表达式,绘制在Prometheus服务中每秒存储的速率:

rate(prometheus_local_storage_chunk_ops_total[1m])

启动一些样本目标机

我们更感兴趣的是Prometheus服务抓取其他目标机的数据采样,并非自己的时间序列数据。Go客户库有一个例子,它会产生一些自己造的RPC延迟。启动三个带有不同的延时版本。

首先需要确保你有Go的环境。

下载Go的Prometheus客户端,并运行下面三个服务:

# Fetch the client library code and compile example.
git clone https://github.com/prometheus/client_golang.git
cd client_golang/examples/random
go get -d
go build

# Start 3 example targets in separate terminals:
./random -listen-address=:8080
./random -listen-address=:8081
./random -listen-address=:8082

配置Prometheus服务,监听样本目标实例

现在我们将配置Prometheus服务,收集这三个例子的度量指标数据。

我们把这三个服务实例命名为一个任务称为example-random, 并把8080端口服务和8081端口服务作为生产目标group,8082端口成为canary group。

为了在Prometheus服务中建模这个,我们需要添加两个群组到这个任务中,增加一些标签到不同的目标群组中。在这个例子中,我们会增加group="production"标签到带个目标组中,另外一个则是group=“canary”。

为了达到这个目的,在prometheus.yml配置文件中,增加下面任务定义到scrape_config区域中, 并重启Prometheus服务:

scrape_configs:
  - job_name:       'example-random'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8080', 'localhost:8081']
        labels:
          group: 'production'

      - targets: ['localhost:8082']
        labels:
          group: 'canary'

聚集抓取数据

为聚集到抓取的数据,设置规则并写入到新的时间序列中。

当计算ad-hoc时,如果在累计到上千个时间序列数据的查询,可能会变慢。为了使这种多时间序列数据点查询更有效率,我们允许通过使用配置的记录规则,把预先记录表达式实时收集的数据存入到新的持久时间序列中。

该例子中,如果我们对每秒RPCs数量(rpc_durations_seconds_count)的5分钟窗口流入的统计数量感兴趣的话。我们可以下面的表达式:

avg(rate(rpc_durations_seconds_count)[5m]) by (job, service)

试着使用图形化这个表达式。

为了存储这个表达式所统计到的数据,我们可以使用新的度量指标,如job_service:rpc_durations_seconds_count:avg_rate5m,创建一个配置规则文件,并把该文件保存为prometheus.rules:

job_service:rpc_durations_seconds_count:avg_rate5m = avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

为了使Prometheus服务使用这个新的规则,在prometheus.yml配置文件的global配置区域添加一个rule_files语句。这个配置应该向下面这样写:

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # Evaluate rules every 15 seconds.

  # Attach these extra labels to all timeseries collected by this Prometheus instance.
  external_labels:
    monitor: 'codelab-monitor'

rule_files:
  - 'prometheus.rules'

scrape_configs:
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

  - job_name:       'example-random'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8080', 'localhost:8081']
        labels:
          group: 'production'

      - targets: ['localhost:8082']
        labels:
          group: 'canary'

指定这个新的配置文件,并重启Prometheus服务。验证新的时间序列度量指标job_service:rpc_durations_seconds_count:avg_rate5m是否能够在Console控制框中查找出时间序列数据。

Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

推荐阅读

>>>新手必备-Linux最常用的20个命令(上)

>>>新手必备-Linux最常用的20个命令(下)

>>>新手必备-Linux【yum】命令

>>>当我自学Linux的时候,我在想什么?

>>>人到中年,能否顺利转型运维工程师

运维界升职加薪必备的云计算技术,你学了吗?

学完高级运维云计算课程之后,你可以:

  • 跨越90%企业的招聘硬门槛

  • 增加70%就业机会

  • 拿下BAT全国TOP100大厂敲门砖

  • 体系化得到运维技术硬实力

  • 技术大佬年薪可达30w+

资源放送

2021新版Linux运维高级云计算-红帽RHCE实战课程合集,扫描下方二维码即可领取!

Linux运维-红帽认证解析之Prometheus入门终极指南(一),别再说不会用Prometheus了(长文更新,速速关注)

文章来源网络  侵删

最后,如果有朋友需要自学,或者没有很好的学习途径,那么可以看一下这个视频:

Linux运维高级云计算-红帽RHCE实战课程合集

这是一个零基础入门的教程,对于刚开始接触Linux运维的同学还是很友好的,希望对你有帮助。

上一篇:假设一棵树的存储结构采用双亲表示法,双亲指针数组为int parent[MaxSize],其中MaxSize表示双亲指针数组的最大结点个数。树中各个结点按先根遍历次序存放,根结点存于parent[0]


下一篇:prometheus全局配置解释