1、什么是prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。
Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。
Prometheus性能也足够支撑上万台规模的集群。
2、Prometheus的特点
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。
官网地址:https://prometheus.io/
3、基本原理
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。
4、服务过程
Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。
Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展示收集的数据。
Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。
Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
1、Grafana介绍
grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
参考资料就是官网(http://docs.grafana.org/)
2、基本概念
Grafana支持许多不同的数据源。
每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。
官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。
每个数据源的查询语言和能力都是不同的。
你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
三、部署流程
1、部署node-exporter服务:
docker run -d --name=node-exporter -p 9100:9100 prom/node-exporter
docker update --restart=always node-exporter #这一步一般不需要
2、部署cadvisor监控容器指标:
docker run -d --publish=9200:8080 --name cadvisor -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro google/cadvisor:latest
docker update --restart=always cadvisor #这一步一般不需要
3、监控GPU指标
git clone https://github.com/kevin7674/nvidia_smi_exporter.git
cd nvidia_smi_exporter
./nvidia_smi_exporter 9101 &
可以添加自启
修改 vi /etc/rc.local
添加一行: ./nvidia_smi_exporter 9101 &
—这是最简单的启动,容器方面就不介绍了。 可以访问项目地址去看。
4、部署Prometheus工具:
i、新建文件夹,并编辑内容
mkdir /opt/prometheus
cd /opt/prometheus/
touch prometheus.yml
chmod 775 prometheus.yml
vim prometheus.yml
ii、编辑文件夹内容,最简单化部署
global:
scrape_interval: 30s # 设定抓取数据的周期,默认为1min
evaluation_interval: 30s # 设定更新rules文件的周期,默认为1min
scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090'] #主机
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['{$IP}:9100','{$IP}:8080','{$IP}:9101'] #数据源、采集数据。即:启动的node-exporter容器和cadvisor容器端口。 {$IP}请填写实际IP
labels:
instance: {$IP}
iii、启动容器
docker run -d \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus
prom/prometheus
PS:新建文件的目录自己决定。启动容器时相对应的链接替换下就好。
5、部署可视化工具 grafana
docker run -d -p 3000:3000 --name grafana grafana/grafana
四、验证是否成功
访问方式: http://{$IP}:port
grafana视图可视化应用,可网上搜索下网络教程。 部署grafana成功后,第一次访问页面,默认账号密码是 admin/admin
客户端提供metrics接口有不少软件可提供,这边只写常用到的 node-exporter和cadvisor 的metrics接口。
五、客户端部署
1、客户端只要部署下面2个服务即可:
部署node-exporter服务
部署cadvisor监控容器指标
PS:部署步骤上面有介绍
2、再到服务端更改 prometheus.yml 文件。 PS:上面第 三.3步骤建立文件
```ruby
#vim prometheus.yml
#文件最下面再加上,下面的代码。 注意:job_name不要与上面的重复
- job_name: linux
static_configs:
- targets: ['{$IP}:9100','{$IP}:8080','{$IP}:9101'] #数据源、采集数据。即:启动的node-exporter容器和cadvisor容器端口。 {$IP}请填写实际IP
labels:
instance: {$IP}
注意事项:
部署任务之前,最好查看下要启动的端口是否有占用的情况。若是占用了,启动容器时请换个端口号。
```python
查看端口命令:netstat -tunlp | grep $port