Prometheus监控⼊门级使⽤教程
什么是Prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使⽤Go语⾔开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基⾦会旗下的原⽣云基⾦会(Cloud Native Computing Foundation), 将Prometheus纳⼊其下第⼆⼤开源项⽬。
Prometheus和Heapster(Heapster是K8S的⼀个⼦项⽬,⽤于获取集的性能数据。)相⽐功能更完善、更全⾯。Prometheus性能也⾜够⽀撑上万台规模的集。
Prometheus的特点
多维度数据模型。
灵活的查询语⾔。
不依赖分布式存储,单个服务器节点是⾃主的。
通过基于HTTP的pull⽅式采集时序数据。
可以通过中间⽹关进⾏时序列数据推送。
通过服务发现或者静态配置来发现⽬标服务对象。
⽀持多种多样的图表和界⾯展⽰,⽐如Grafana等。
架构图:
基本原理
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接⼝就可以接⼊监控。不需要任何SDK或者其他的集成过程。这样做⾮常适合做虚拟化环境监控系统,⽐如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP 接⼝被叫做exporter 。⽬前互联⽹公司常⽤的组件⼤部分都有exporter可以直接使⽤,⽐如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、⽹络等等)。
服务过程
go语言安装教程
Prometheus Daemon负责定时去⽬标上抓取metrics(指标)数据,每个抓取⽬标需要暴露⼀个http服务的接⼝给它定时抓取。
Prometheus⽀持通过配置⽂件、⽂本⽂件、Zookeeper、Consul、DNS SRV Lookup等⽅式指定抓取⽬标。Prometheus采⽤PULL的⽅式进⾏监控,即服务器可以直接通过⽬标PULL数据或者间接地通过中间⽹关来Push数据。
Prometheus在本地存储抓取的所有数据,并通过⼀定规则进⾏清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展⽰收集的数据。Prometheus⽀持很多⽅式的图表可视化,例如Grafana、⾃带的Promdash以及⾃⾝提供的模版引擎等等。Prometheus还提供HTTP API的查询⽅式,⾃定义所需要的输出。
运⾏
docker rm -f prometheus
docker run --name=prometheus -d \
-p 9090:9090 \
-v /home/chenqionghe/promethues/l:/etc/l \ -v /home/chenqionghe/promethues/l:/etc/l \
prom/prometheus:v2.7.2 \
--config.file=/etc/l \
--able-lifecycle
我们配置了9090端⼝,默认prometheus会抓取⾃⼰的/metrics接⼝
在Graph选项已经可以看到监控的数据
⼆.安装客户端提供metrics接⼝
1.通过golang客户端提供metrics
mkdir -p /home/chenqionghe/promethues/client/golang/src
cd !$
export GOPATH=/home/chenqionghe/promethues/client/golang/
#克隆项⽬
git clone github/prometheus/client_golang.git
#安装需要的第三⽅包
mkdir -p $GOPATH//x/
cd !$
git clone github/golang/net.git
git clone github/golang/sys.git
git clone github/golang/tools.git
#安装必要软件包
go get -u -v github/prometheus/client_golang/prometheus
#编译
cd $GOPATH/src/client_golang/examples/random
go build -o
运⾏3个⽰例metrics接⼝
./random -listen-address=:8080 &
./random -listen-address=:8081 &
./random -listen-address=:8082 &
2.通过node exporter提供metrics
docker run -d \
--name=node-exporter \
-p 9100:9100 \
prom/node-exporter
global:
scrape_interval: 15s # 默认抓取间隔, 15秒向⽬标抓取⼀次数据。
external_labels:
monitor: 'codelab-monitor'
rule_files:
#- 'prometheus.rules'
# 这⾥表⽰抓取对象的配置
scrape_configs:
#这个配置是表⽰在这个配置内的时间序例,每⼀条都会⾃动添加上这个{job_name:"prometheus"}的标签 - job_name: 'prometheus'
- job_name: 'prometheus'
scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒
static_configs:
- targets: ['localhost:9090']
- targets: ['10.211.55.25:8080', '10.211.55.25:8081','10.211.55.25:8082']
labels:
group: 'client-golang'
- targets: ['10.211.55.25:9100']
labels:
group: 'client-node-exporter'
可以看到接⼝都⽣效了
prometheus还提供了各种exporter⼯具,感兴趣⼩伙伴可以去研究⼀下
三.安装pushgateway
pushgateway是为了允许临时作业和批处理作业向普罗⽶修斯公开他们的指标。
由于这类作业的存在时间可能不够长, ⽆法抓取到, 因此它们可以将指标推送到推⽹关中。
Prometheus采集数据是⽤的pull也就是拉模型,这从我们刚才设置的5秒参数就能看出来。但是有些数据并不适合采⽤这样的⽅式,对这样的数据可以使⽤Push Gateway服务。
它就相当于⼀个缓存,当数据采集完成之后,就上传到这⾥,由Prometheus稍后再pull过来。
我们来试⼀下,⾸先启动Push Gateway
看到已经可以搜索出刚刚推送的指标了
四.安装Grafana展⽰
Grafana是⽤于可视化⼤型测量数据的开源程序,它提供了强⼤和优雅的⽅式去创建、共享、浏览数据。Dashboard中显⽰了你不同metric数据源中的数据。
默认登录账户和密码都是admin,进⼊后界⾯如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论