Prometheus 学习笔记

2019-08-19  本文已影响0人  华阳_3bcf

什么是 Prometheus

Prometheus 是开源监控告警解决方案,CNCF(Cloud Native Computing Foundation) 成员。

主要特点

它不是什么:

核心组件

基础架构

官方的架构图

architecture.png


关于架构的说明:

Prometheus vs Zabbix

Zabbix Prometheus
更适合监控物理机环境。 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。
安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。 安装相对复杂,监控、告警和界面都分属于不同的组件。
图形化界面比较成熟,界面上基本上能完成全部的配置操作。 界面相对较弱,很多配置需要修改配置文件。

最核心的一点,Prometheus对云环境支持更好,如果监控物理机还是用Zabbix。

OpenShift 提供了基于 Prometheus + Grafana 的监控系统。针对每个需要被监控的目标(target),都利用了Prometheus提供的某个功能来实现对它的监控。也就是说,有现成的解决方案,不需要我们单独配置。

安装

Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动Prometheus Server。

我用二进制方式,在CentOS测试,下载地址从官网获取

$ wget https://github.com/prometheus/prometheus/releases/download/v2.12.0-rc.0/prometheus-2.12.0-rc.0.linux-amd64.tar.gz
$ tar zxf prometheus-2.12.0-rc.0.linux-amd64.tar.gz
$ cd prometheus-2.12.0-rc.0.linux-amd64
$ ./prometheus --config.file=prometheus.yml
level=info ts=2019-08-15T07:14:35.171Z caller=main.go:293 msg="no time or size retention was set so using the default time retention" duration=15d
level=info ts=2019-08-15T07:14:35.171Z caller=main.go:329 msg="Starting Prometheus" version="(version=2.12.0-rc.0, branch=HEAD, revision=eaf81808d5aa19ee4b9b8980ac5feeaec51408ac)"
...

查看

当 Prometheus 启动后,通过浏览器来访问 http://IP:9090,将看到如下页面

1565855140014.png

​ 我们现在可以使用 PromQL (Prometheus Query Language)来查看,如果不知道怎么写,可以查看 http://IP:9090/metrics 选择一个metric 填进去(也可以从Execute按钮旁边的下拉菜单选一个)。

1565855471420.png

还可以选旁边的Graph(如下图)看图形界面。

1565855577724.png

如果要查询99%的情况下如何,查询语句改成

prometheus_target_interval_length_seconds{quantile="0.99"}

在console 的value 部分可以看到结果。

通过PromQL可以轻松回答类似于以下问题:

更多的PromQL用法,参考这里

配置一个数据源(Go client library target)

去一个新VM(10.0.0.5)

Pometheus鼓励用户监控服务的内部状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。这本质上是白盒监控。

安装Go 编译器并配置

$ wget https://dl.google.com/go/go1.12.8.linux-amd64.tar.gz
$ sudo tar zxf go1.12.8.linux-amd64.tar.gz -C /usr/local
$ export PATH=$PATH:/usr/local/go/bin
$ export GOPATH=/usr/local/go

下载Go client lib,运行几个测试

$ git clone https://github.com/prometheus/client_golang.git
$ cd client_golang/examples/random
$ sudo /usr/local/go/bin/go get -d
$ sudo /usr/local/go/bin/go build
$ ./random -listen-address=:8080 &
$ ./random -listen-address=:8081 &
$ ./random -listen-address=:8082 &

服务器端查看新的数据源(target)

更新 prometheus.yml 文件的scrape_configs 部分,加上新的target

scrape_configs:
  - job_name:       'example-random'
    scrape_interval: 5s

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

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

重启Prometheus,网页查看,能找到新的机器。

1565936113808.png

选择 Status-> Targets 查看,更直观一些

1565938394235.png

手工把target的进程停掉,再查看,它们是DOWN的状态。

1565938185143.png

配置规则(rules)把收集到的数据放到新的时序中

创建新的规则文件 prometheus.rules.yml

groups:
- name: example
  rules:
  - record: job_service:rpc_durations_seconds_count:avg_rate5m
    expr: avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

修改主配置文件 prometheus.yml 让它读取规则

rule_files:
  - "prometheus.rules.yml"

重启,新的时序 job_service:rpc_durations_seconds_count:avg_rate5m可以查询了。

网页的Rules 也可以看到:

1565939821599.png

配置Node Exporter

这是最常见的组件,在vm 上安装,负债监控常规数据(CPU,Memory,network,disk 等)

在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。

客户端安装运行

Node Exporter同样采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。文件来源(Prometheus downloads page

$ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
$ tar zxf node_exporter-0.18.1.linux-amd64.tar.gz
$ cd node_exporter-0.18.1.linux-amd64/
$ ./node_exporter &
$ curl http://localhost:9100/metrics

服务器端配置

为了能够让Prometheus Server能够从当前node exporter获取到监控数据,这里需要修改Prometheus配置文件 prometheus.yml

scrape_configs:
- job_name: 'node'
  static_configs:
  - targets: ['10.0.0.5:9100']

重启服务。

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

网页查看

1566200801839.png

Targets 中,也能找到新的node

1566200896478.png

与Grafana集成

Prometheus 自带的 Web 界面比较简单,因为它的目的是为了及时查询数据,方便 PromeQL 调试。

而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

Grafana安装

安装方式参考官网 official Grafana documentation.

wget https://dl.grafana.com/oss/release/grafana-6.3.3-1.x86_64.rpm 
sudo yum localinstall grafana-6.3.3-1.x86_64.rpm 

启动服务

$ sudo systemctl daemon-reload
$ sudo systemctl start grafana-server
$ sudo systmctl status grafana-server

网页配置Prometheus源

访问http://localhost:3000就可以进入到Grafana的界面中,默认情况下使用账户admin/admin进行登录。在Grafana首页中显示默认的使用向导,包括:安装、添加数据源、创建Dashboard、邀请成员、以及安装应用和插件等主要流程:

1565941162697.png 1565941235246.png 1566180458181.png

生成Dashboard

回首页,再创建 Dashboard

1565941675253.png

Dashboard 中新的panel,使用query 方式,来源是Prometheus,metrics 是我们之前用过的 prometheus_target_interval_length_seconds

1565942462384.png

类似的方法,我们再添加 job_service:rpc_durations_seconds_count:avg_rate5m

最后得到:

1565942690483.png

导入Dashboard

上面的方法,每个metrics都要自己填写,panel的排列也要自己调整,很麻烦。更简单的方式就是使用别人现成的模板,模板可以从Grafana官网去找,

1566203408160.png

针对Node Exporter 从上面的页面找到Dashboard ID,用于之后的导入。

1566203123822.png 1566204442804.png

看起来很专业的监控图表就出现了。


1566203704016.png

参考文档

Prometheus实战

Prometheus Getting Start

Prometheus 对比 Zabbix

Prometheus 入门与实践

https://www.cnblogs.com/sammyliu/p/10155442.html
https://yunlzheng.gitbook.io/prometheus-book/

上一篇下一篇

猜你喜欢

热点阅读