正文
Prometheus介绍
Prometheus(普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。 不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。 目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。 具体支持的源看:https://github.com/prometheus
与其他监控系统相比,Prometheus的主要特点是:
- 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
- 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
- 灵活的查询语言。
- 不依赖分布式存储,单个服务器节点。
- 通过基于HTTP的pull方式采集时序数据。
- 可以通过中间网关进行时序列数据推送。
- 通过服务发现或者静态配置来发现目标服务对象。
- 支持多种多样的图表和仪表板展示支持,比如Grafana等。
服务过程
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和Grafana对本机服务器性能进行监控。
监控本机,只需要一个exporter。 node_exporter,用于机器系统数据收集。
下面选择用docker实现Prometheus和Grafana。
node_exporter安装
node_exporter可以查看本机Linux服务相关内容。
下载镜像包:
sudo docker pull prom/node-exporter
启动node-exporter:
sudo docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter
单行格式:
sudo docker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter
其中目录映射的:/proc
正在运行的内核信息映射,主要输出 进程信息、内存资源信息、磁盘分区信息等等;/sys
硬件设备的驱动程序信息。
等待几秒,查看端口是否起来:
netstat -anpt
访问url:http://127.0.0.1:9100/metrics
,可以看到收集到数据,有了它就可以做数据展示了。
Prometheus安装
下载镜像包:
sudo docker pull prom/prometheus
新建目录prometheus,编辑配置文件prometheus.yml:
mkdir ~/worksoft/prometheus
vim ~/worksoft/prometheus/prometheus.yml
写入配置并保存:
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.44.171:9100']
labels:
instance: linux
注意:这里的192.168.44.171是本机ip地址。如果不知道,可以通过 ip addr
或 ifconfig
查看。
另外格式要格外注意,空格等不要错位。
启动prometheus:
sudo docker run -d \
-p 9090:9090 \
-v /home/baiyang/worksoft/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
单行格式:
sudo docker run -d -p 9090:9090 -v /home/baiyang/worksoft/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
查看容器有没有运行起来:
sudo docker ps -a
查看端口状态:
netstat -anpt
访问url:http://127.0.0.1:9090/graph
、 http://127.0.0.1:9090/targets
查看效果。
如果状态没有UP起来,等待一会,就会UP了。
Grafana安装
下载镜像包:
sudo docker pull grafana/grafana
新建空文件夹grafana-storage,用来存储数据:
mkdir ~/worksoft/grafana-storage
设置权限,因为grafana用户会在这个目录写入文件,直接设置777,比较简单:
chmod 777 -R ~/worksoft/grafana-storage
启动grafana:
sudo docker run -d \
-p 3000:3000 \
--name=grafana \
-v /home/baiyang/worksoft/grafana-storage:/var/lib/grafana \
grafana/grafana
单行格式:
sudo docker run -d -p 3000:3000 --name=grafana -v /home/baiyang/worksoft/grafana-storage:/var/lib/grafana grafana/grafana
访问url:http://127.0.0.1:3000
, 查看效果,账号和密码都是admin。
然后添加数据源,添加图表 就可以用了。
在 配置 -> Data Sources -> Add data source 中选择具体数据源,有 Prometheus、 Elasticsearch、 MySQL 等。
连接Prometheus时不能用:http://127.0.0.1:9090
, 因为grafana在docker容器中,要用docker内访问Prometheus的地址(上面配置过):http://192.168.44.171:9090
。
Linux监控
Linux监控模板,我们可以从网络上导入现成的,点击 Import , 输入 11074,导入Linux监控模板. 并配置数据源为上面添加好的数据源。 配置完保存后即可看到系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。
RabbitMQ监控
在机子上安装rabbitmq_exporter:
tar -xvf rabbitmq_exporter-0.20.0.linux-amd64.tar.gz
cd rabbitmq_exporter-0.20.0.linux-amd64
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &
prometheus配置prometheus.yml:
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.44.171:9100']
labels:
instance: localhost
- job_name: rabbitmq
static_configs:
- targets: ['192.168.76.125:9099']
labels:
instance: rabbitmq
192.168.76.125:9099 是刚才配置的数据源。
重启服务(id是prometheus容器id):
sudo docker restart id
grafana中 + Import导入dashboards:
https://grafana.com/dashboards/2121
然后就可以看效果了:
百分位监控
看一下Es中的 实现原理 , 然后用grafana中的 Metric 的 Percentiles 实现。
grafana接入钉钉报警机器人
跟着 示例 配置。
参考资料
Prometheus+Grafana监控与报警 https://www.cnblogs.com/miaocbin/p/12009974.html
基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html
linux下 /proc 和 /sys 详解 https://blog.csdn.net/z1026544682/article/details/98092139
grafana文档 https://grafana.com/docs/grafana/latest/
prometheus + grafana部署RabbitMQ监控 https://www.cnblogs.com/shhnwangjian/p/6879683.html
Using Elasticsearch in Grafana https://grafana.com/docs/grafana/latest/datasources/elasticsearch/
Grafana/Kibana搜索语句-Lucene查询语法详解(Lucene query syntax) https://blog.csdn.net/qq_23598037/article/details/99849781
使用 ElasticSearch Aggregations 进行统计分析 https://blog.csdn.net/zxjiayou1314/article/details/53837719
Grafana 的一些使用技巧 https://zhuanlan.zhihu.com/p/34005738
Lucene Query + ES + Grafana 资料搬运 https://zhuanlan.zhihu.com/p/66593935
Elasticsearch: 权威指南 » 聚合 » 近似聚合 » 百分位计算 https://www.elastic.co/guide/cn/elasticsearch/guide/current/percentiles.html
grafana接入钉钉报警机器人 https://zhuanlan.zhihu.com/p/141083658