Prometheus-grafana安装与使用
什么是Prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus的特点
- 多维度数据模型。
- 灵活的查询语言。
- 不依赖分布式存储,单个服务器节点是自主的。
- 通过基于HTTP的pull方式采集时序数据。
- 可以通过中间网关进行时序列数据推送。
- 通过服务发现或者静态配置来发现目标服务对象。
- 支持多种多样的图表和界面展示,比如Grafana等。
官网地址:https://prometheus.io/
架构图
图片引自官方网站https://prometheus.io/
基本原理
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
服务过程
- 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上抓取数据。
- Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
三大套件
- Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
- Alertmanager 警告管理器,用来进行报警。
- Push Gateway 支持临时性Job主动推送指标的中间网关。
安装与部署
从官网下载PrometheUS的包https://prometheus.io/download/
安装prometheus
tar xvfz prometheus-*.tar.gz
修改配置文件信息
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 it's 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']
浏览器登录localhost:9090查看prometheus界面,在选项里选择查看的监控指标
安装exporter
exporter是用来收集各种metrics指标数据,提供了输出被监控组件信息的HTTP接口。我们这里使用了node_exporter,用来收集主机的各种监控数据,包含Linux系统信息(包括磁盘、内存、CPU、网络等等)。
下载exporter https://prometheus.io/download/#node_exporter
下载之后安装完,执行./node_exporter -h
修改prometheus.yml配置,添加node_exproter的配置信息
- job_name: 'node_exporter'
static_configs:
- targets:
- '10.102.12.107:9100'
然后重启prometheus
关于相关的exporter可以在官网下载
安装grafana
下载grafana grafana-6.3.5.linux-amd64.tar.gz
wget https://dl.grafana.com/oss/release/grafana-6.3.5.linux-amd64.tar.gz
tar -zxvf grafana-6.3.5.linux-amd64.tar.gz
启动grafana nohup sh ./grafana-server &
默认端口为3000 浏览器登录界面,设置DataSource
选择prometheus做为数据源
把prometheus的地址配置到如下列表中
导入prometheus模板
左上角会显示已经选择的模板
导入的node_exporter的数据展示,显示了监控服务器的数据
参考文献
https://prometheus.io/docs/prometheus/latest/getting_started/ PrometheUS官网文档