1.普罗米修斯概述
Prometheus是一套开源的监控&报警&时间序列数据库的组合。适合监控Docker容器。因为Kubernetes的流行带动了Prometheus的发展
官网:https://prometheus.io/
2.时间序列数据
1.什么是序列数据
时间序列数据(TimeSeries Data):按照时间顺序记录系统、设备状态变化的数据被称为时序数据。
应用的场景很多:如
- 无人驾驶车辆运行中要记录的经度、纬度、速度、方向、旁边的距离等。
- 某一地区的各车辆的行驶轨迹数据
- 传统证券行业实时交易数据
- 实时运维监控数据等
2.时间序列数据特点
- 性能好
关系型数据库对于大规模数据的处理性能糟糕。NoSQL可以比较好的处理大规模数据,但依然比不上时间序列数据库。 - 存储成本低
高效的压缩算法,节省存储空间,有效降低IO
3.Prometheus的主要特征
- 多维度数据模型
- 灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过Pull模型拉取时间序列数据
- 也可以通过中间网关支持Push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图标和界面展示
4.Prometheus原理架构图
服务部署步骤 (基于docker环境,部署监控本机容器及跨本机监控容器资源)
需要两台虚拟机
第一台
root@ubuntu20:~# docker pull google/cadvisor
运行容器
root@ubuntu20:~# docker run \
> --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 \
> --privileged \
> --device=/dev/kmsg \
> google/cadvisor
查看端口状态
浏览器访问
来到第二台
root@ubuntu20:~# docker run --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 --privileged --device=/dev/kmsg google/cadvisor
下载镜像
两台主机都要进行的操作
root@ubuntu20:~# docker pull prom/node-exporter
第一台:
下载镜像
root@ubuntu20:~# docker pull prom/Prometheus
root@ubuntu20:~# docker pull grafana/grafana
root@ubuntu20:~# docker run -d -p 9100:9100 --volume /proc/:/host/proc --volume /sys:/host/sys --volume /:/roofs --name node-exporter prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($$|/)"
查看端口状态
第二台:
同样执行
docker run -d -p 9100:9100 --volume /proc/:/host/proc --volume /sys:/host/sys --volume /:/roofs --name node-exporter prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($$|/)"
查看端口
第一台
root@ubuntu20:~# vim prometheus.yml
添加:
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'
static_configs:
- targets: ['192.168.0.143:9090','192.168.0.143:9100','192.168.0.143:8080','192.168.0.141:8080','192.168.0.141:9100']
运行
root@ubuntu20:~# docker run -d -p 9090:9090 --volume /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus prom/Prometheus
查看端口
浏览器访问
http://192.168.0.143:9090/
构建成功
接下来我们继续部署图形化页面 (在第一台服务器上部署)
root@ubuntu20:~# docker run -d -p 3000:3000 -e "GF_SECURITY_ADMIN_PASSWORD=123456" grafana/grafana
查看一下端口状态
默认的账号:admin
密码为:123456
点击第一个prometheus进去配置
最底部保存
然后进入到grafana官网 去下载监控表盘json文件
Dashboards | Grafana Labs
搜索dashboards
下载json文件到本地
回到prometheus 上方搜索import,配置加入json文件
ok