1. 简介
Prometheus
是SoundCloud开源的一款开源软件。它的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,你只需要在你的应用里面实现一个metrics
接口,然后把这个接口告诉Prometheus
就可以完成数据采集了。
区别:
Zabbix
- 图形页面友好
- 成熟,资料较多
- 告警,分级,完善
- 架构成熟
Prometheus
- 不是很友好,各种配置都需要手写
- 对docker、k8s监控有成熟解决方案
特点:
- 多为数据模型:由度量名称和键值对标识的时间序列数据
- PromQL :一种灵活的查询语言,可以利用多维数据完成复杂的查询
- 不依赖分布式存储,单个服务器节点可直接工作
- 基于HTTP的pull方式采集时间序列数据
- 推送时间序列数据通过PushGateway组件支持
- 通过服务发现或静态配置发现目标
- 多种图形模式及仪表盘支持模式(grafana)
架构图
Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
ClientLibrary:客户端库
Push Gateway:短期存储指标数据。主要用于临时性的任务
Exporters:采集已有的第三方服务监控指标并暴露metrics
Alertmanager:告警
Web UI:简单的Web控制台
2. 安装
Docker部署方式:https://prometheus.io/docs/prometheus/latest/installation/
prometheus配置文件解读:https://prometheus.io/docs/prometheus/latest/getting_started/
[root@k8s-master tmp]# cat /tmp/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: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
启动容器
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
image
image
3. cadvisor + prometheus + grafana
-
docker cadvisor监控 + influxdb + grafana
-
docker cadvisor监控 + prometheus + grafana
#添加cadvisor容器
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name cadvisor google/cadvisor:latest
#添加grafana容器
docker run -d \
--name grafana \
-p 3000:3000 \
grafana/grafana
image
在这里插入图片描述
#在/tmp目录下的prometheus.yml文件添加job
static_configs:
- targets: ['localhost:9090']
- job_name: "Linux_cadvisor"
static_configs:
- targets: ['192.168.0.10:8080']
- job_name: "Docker_grafana"
static_configs:
- targets: ['192.168.0.10:3000']
#重启下容器
docker restart prometheus
image
识别到cadvisor后即可查看数据
可以看出 prometheus 自身带的查询格式非常的难看
image我们使用grafana来做展示数据;使用创建好的grafana容器
访问地址 192.168.0.10:3000
第一步 添加数据源
image第二步 选择prometheus数据源
image第三步 配置prometheus的访问地址
imageimage
第四步 添加仪表盘
docker主机监控模板 193
linux主机监控模板 9276
image
image
第五步 监测Docker容器成功
image第六步 监测linux主机
下载一个exporter
[root@k8s-master prometheus]# cat node_exporter.sh
#!/bin/bash
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
mv node_exporter-0.17.0.linux-amd64 /usr/local/node_exporter
cat <<EOF >/usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable node_exporter
systemctl restart node_exporter
#默认启动9100端口
[root@k8s-master prometheus]# netstat -lntup|grep exporter
tcp6 0 0 :::9100 :::* LISTEN 61202/node_exporter
去prometheus的容器配置文件中添加上linux的exporter
[root@k8s-master tmp]# vim /tmp/prometheus.yml
...
- job_name: "Linux"
static_configs:
- targets: ['192.168.0.10:9100']
docker restart prometheus
image
然后就可以导入grafana模板 9276
image
网友评论