架构图:

基本原理: Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口 就可以接入监控。不需要任何SDK或者其他的集成过程
特征:
多维度数据模型
方便的部署和维护,采用去中心化架构,可以独立部署,不依赖于外部的分布式存储
灵活的数据采集,可以通过基于HTTP的pull方式采集时序数据,也可以通过中间网关进行时序列数据推送
强大的查询语言,
关键组件: Prometheus server:主要负责数据采集和存储,提供PromQL查询语言的支持 Push gateway:支持临时性Job主动推送指标的中间网关 Exporters:提供被监控组件信息的 HTTP 接口被叫做 exporter Alertmanager:警告管理器,用来进行报警 Web UI:图标可视化
服务过程:
Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取,支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。
Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展示收集的数据,支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
运行node_exporter: # docker pull liyupei/node_exporter # docker run -d --name node_exporter -p 9100:9100 liyupei/node_exporter
运行prometheus server: # docker pull liyupei/prometheus # docker run -d --name prom -p 9090:9090 -v /home/prom/prometheus.yml:/etc/prometheus/prometheus.yml liyupei/prometheus
prometheus.yml: # my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # 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: 'node' static_configs: - targets: ['192.168.0.16:9100','192.168.0.2:9100']

node_exporter和prometheus都运行之后,在“Status”--“Targets”可以看到监控的服务器信息:

运行grafana: # docker pull liyupei/grafana # docker run -d --name grafana -p 30003:3000 liyupei/grafana 如果需要数据持久化,可使用-v参数挂载数据目录: # docker run -d --name grafana -p 30003:3000 -v /data/grafana:/var/lib/grafana liyupei/grafana 或者下载rpm安装 # wget https://dl.grafana.com/oss/release/grafana-7.3.1-1.x86_64.rpm # yum install grafana-7.3.1-1.x86_64.rpm 默认账号/密码:admin/admin

配置数据源:

导入服务器监控的Dashboard模板,模板id是8919:



至此,Prometheus+Grafana安装配置完成!
若想监控docker,可以运行cadvisor,并且在prometheus.yml中新增关于cadvisor的job配置即可。 # docker pull liyupei/cadvisor # docker run -d --name=cadvisor -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 --detach=true --restart=always liyupei/cadvisor
若想监控mysql,可以运行mysqld_exporter,并且在prometheus.yml中新增关于mysqld_exporter的job配置即可。 # docker pull liyupei/mysqld_exporter # docker run -d --name mysqld_exporter -p 9104:9104 -v /home/mysqld-exporter/my.cnf:/etc/mysql/my.cnf liyupei/mysqld-exporter --config.my-cnf=/etc/mysql/my.cnf