监控的意义
监控(monitor):监视公司的服务器或者服务,一旦出现问题,及时告诉运维人员去处理,将公司的损失减少到最小。
监控在公司里非常重要,监控的背后:收集数据,分析数据,可以提前预知一些问题,及时处理。
及时的发现问题,提醒工程师尽快的去解决问题,减少公司的损失,提升了产品的品质,增强了用户的信任。
Prometheus是什么
Prometheus 是一个监控软件(监控容器非常好,也可以监控其他的非容器的机器的业务,例如:MySQL,nginx,redis,系统等)。
Prometheus是一个开源系统监控和警报工具包,最初是在SoundCloud上构建的。
Prometheus于2016年加入了云原生计算基金会,成为继Kubernetes之后的第二个托管项目。
Prometheus 是一个时序数据库(time series database):按照事情发生的时间记录数据的数据库。
Prometheus 收集其指标并将其存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。
Prometheus 架构图
采集数据:exporter pushgateway 中间件(代理)
存储数据:tsdb
提供数据:http server
显示数据: grafana
告警、报警:alertmanager
exporter : 是prometheus的客户端程序,需要安装到被监控的服务器上。exporter是一个程序,需要去定制,但是prometheus平台给我们开发了很多通用的或者定制的exporter
exporter会到客户机(被监控的服务器上)收集指定的指标数据,例如:cpu的使用率,内存的使用率,磁盘的使用情况,网络的带宽使用情况等等数据
promQL 是Prometheus里的SQL语句--》可以实现增删改查等操作。
jobs --》作业,任务--》一个运行的程序对应进程 --》长作业:长时间的工作
长时间一直运行的程序产生的进程--》守护进程 --》一直运行,不退出的
short-lived jobs 短作业:短时间的工作 --》进程
Prometheus targets 被监控的目标--》被监控的服务器
pushgateway:短时间运行的程序可以主动将自己的数据push到pushgateway里存放,然后prometheus server到pushgateway去拉数据。
grafana 是出图工具,数据显示的工具。
grafana 比 Prometheus 自带的web界面出图工具要漂亮。
什么是指标?
指标(metric):是外行术语的数字度量。术语时间序列是指记录随时间的变化。用户想要测量的内容因应用程序而异。对于 Web 服务器,可能是请求时间;对于数据库,它可以是活动连接数或活动查询数。
指标在理解应用程序以某种方式工作的原因方面起着重要作用。假设您正在运行一个 Web 应用程序,并发现它很慢。要了解您的应用程序发生了什么,您将需要一些信息。例如,当请求数较高时,应用程序可能会变慢。如果您有请求计数指标,则可以确定原因并增加处理负载的服务器数。
什么是标签?
标签(Labels )启用 Prometheus 的维度数据模型:同一指标名称的任何给定标签组合都会标识该指标的特定维度实例化(例如:对处理程序使用该方法的所有 HTTP 请求)。查询语言允许基于这些维度进行筛选和聚合。更改任何标签值(包括添加或删除标签)都将创建新的时间序列。
标签名称可能包含 ASCII 字母、数字以及下划线。它们必须匹配正则表达式 .以(两个"_")开头的标签名称保留供内部使用。
标签值可以包含任何 Unicode 字符。
具有空标签值的标签被视为等效于不存在的标签。
push和pull 那个更加好?
1.数据的实时性--》得到最新鲜的数据 --》push
2.服务器的负载,网络的负载--》可控性 --》pull
安装Prometheus
一.使用容器安装
[root@docker ~]# docker run -d -p 9090:9090 --name sc-prometheus-1 prom/prometheus
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
3cb635b06aa2: Pull complete
34f699df6fe0: Pull complete
33d6c9635e0f: Pull complete
f2af7323bed8: Pull complete
c16675a6a294: Pull complete
827843f6afe6: Pull complete
3d272942eeaf: Pull complete
7e785cfa34da: Pull complete
05e324559e3b: Pull complete
170620261a59: Pull complete
ec35f5996032: Pull complete
5509173eb708: Pull complete
Digest: sha256:cb9817249c346d6cfadebe383ed3b3cd4c540f623db40c4ca00da2ada45259bb
Status: Downloaded newer image for prom/prometheus:latest
a5fe141746a6123ced3257b89244b1555c2728c31022ffe916b3ed970c79f6d7
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5fe141746a6 prom/prometheus "/bin/prometheus --c…" 19 seconds ago Up 18 seconds 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp sc-prometheus-1
http://192.168.102.137:9090/graph --》访问图形界面
http://192.168.102.137:9090/metrics --》Prometheus提供的数据的API
grafana 就是访问Prometheus的http://192.168.102.137:9090/metrics 接口获取数据,然后出图展示。
二.源码二进制安装
1.下载源码包,用xftp上传到Linux里。
wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz
[root@docker ~]# mkdir /prom
[root@docker ~]# cd /prom
[root@docker prom]# ls
prometheus-2.34.0.linux-amd64.tar.gz
2.解压
[root@docker prom]# tar xf prometheus-2.34.0.linux-amd64.tar.gz
[root@docker prom]# ls
prometheus-2.34.0.linux-amd64 prometheus-2.34.0.linux-amd64.tar.gz
[root@docker prom]# cd prometheus-2.34.0.linux-amd64
[root@docker prometheus-2.34.0.linux-amd64]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
3.修改环境变量
[root@docker prom]# PATH=/prom:$PATH
[root@docker prom]# which prometheus
/prom/prometheus
注意:先把容器启动的Prometheus停掉并且删除,否则会启动不起来。
[root@docker prom]# docker stop sc-prometheus-1
sc-prometheus-1
[root@docker prom]# docker rm sc-prometheus-1
sc-prometheus-1
4.在后台启动Prometheus
[root@docker prom]# nohup prometheus --config.file=/prom/prometheus.yml &
[1] 54097
[root@docker prom]# nohup: 忽略输入并把输出追加到"nohup.out"
[root@docker prom]# netstat -anplut|grep prom
tcp6 0 0 :::9090 :::* LISTEN 54097/prometheus
tcp6 0 0 ::1:9090 ::1:40076 ESTABLISHED 54097/prometheus
tcp6 0 0 ::1:40076 ::1:9090 ESTABLISHED 54097/prometheus
Prometheus.yml 是 Prometheus 的配置文件。
[root@docker prom]# vim prometheus.yml
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus" #监控的一个任务
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"] #具体被监控的服务器的访问接口
5.访问:http://192.168.102.137:9090
6.停止 Prometheus
[root@docker prom]# ps aux|grep prom
root 34842 0.7 2.8 981508 52412 pts/1 Sl 10:01 0:02 prometheus --config.file=/prom/prometheus.yml
root 37565 0.0 0.0 112824 988 pts/1 S+ 10:07 0:00 grep --color=auto prom
[root@docker prom]# kill -9 34842
[root@docker prom]# ps aux|grep prom
root 37740 0.0 0.0 112824 984 pts/1 S+ 10:07 0:00 grep --color=auto prom
[1]+ 已杀死 nohup prometheus --config.file=/prom/prometheus.yml