目录
prometheus官网网站
Prometheus - Monitoring system & time series database
docker里面有一个命令也可以进行简单的监控
docker stats
1.prometheus是什么?
Prometheus是一个开源系统监控和警报工具包, 按照时序数据库
prometheus分数据收集和数据存储和数据展示及告警
有prometheus server和exporter和pushgateway和Aletmanger和相关出图和展示工具五大块组成,核心是prometheus server,由retrieval和TSDB和HTTP server组成,retrieval接收pull的消息,有两种pull类型,针对长作业是在上面部署exporters收集数据,针对短作业是用pushgetway拉取指标,而HTTP server支持可视化和告警
图片名词解释:
short-lived jobs :短时间作业
jobs:长时间作业
exporter:一直工作,是prometheus的代理,负责收集工作的指标数据给prometheus server:prometheus服务器
prometheus targets:被监控的服务器
pushgateway:拉取指标
TSDB:时序数据库
promql:prometheus语句
API clients:提供接口
Grafna:提供可视化界面
push alerts:推送
Alertmanager:告警功能
2.监控容器和真实服务器分别如何实现
容器里面 ——》要安装exporter
真实服务器 ——》docker自带容器可以收集数据
2.1安装
2.1.1docker安装promethues
使用容器安装
docker run --name prometheus-1 -p 9090:9090 -d prom/prometheus
接口
http://192.168.2.116:9090/graph --》访问图形界面
http://192.168.2.116:9090/metrics --》有接口数据,然后可以使用grafna出图展示
2.1.2二进制安装promethues
首先在官网下载一个压缩包,然后再用xftp传输进虚拟机里面
[ root@lb1 prom]# mkdir /prom专门新建一个目录存放
[root@1b1 prom]# ls
prometheus-2.29.1.linux-amd64 prometheus-2.29.1.linux-amd64.tar.gz[root@lb1 prom]# mv prometheus-2.29.1.linux-amd64/* / prom移动
[root@lb1 prom]# cd /prom
[root@lb1 prom]#
[root@lb1 prom]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool[ root@lb1 prom]# pwd
/prom
[ root@lb1 prom]# PATH=/prom: $PATH
修改环境变量[ root@lb1 prom]# which prometheus
/ prom/ prometheus
[ root@lb1 prom]#在后台启动prometheus
[root@lb1 prom]# nohup prometheus --config.file=/prom/prometheus.yml &[1]23051
[root@lb1 prom]# nohup:忽略输不并把输出追加到"nohup.out"
2.2.prometheus怎么监控容器?
Monitoring Docker container metrics using cAdvisor | Prometheus
依赖于一个容器 cAdvisor
cAdvisor:分析并公开来自运行容器的资源使用和性能数据
下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
给与可执行权限
chmod +x /usr/local/bin/docker-compose
mkdir compoes_way
创建prometheus.yml文件
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
创建docker-compose.yml文
version: '3.2' #版本 3.2
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
privileged: true
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
导入cadvisor镜像
.....
运行安装
docker-compose up -d
docker-compose ps#得到如下结构表示成功了
Name Command State Ports
----------------------------------------------------------------------------
cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
Docker-Compose.yml配置讲解
version: '2.0' # 版本号
services: #固定名称
redis-6374: #服务名称 可自定义如:elasticsearch,redis,mysql,abcd等
image: whayercloud.registry:5000/redis:5-alpine #从指定的镜像中启动容器,可以是存储仓库、标签
#以及镜像 ID 如果镜像不存在,Compose 会自动拉去镜像
container_name: sdqj-components-redis-6374 #确定app容器的命名
privileged: true #开启权限
network_mode: "host" #可以指定使用服务或者容器的网络 其他参数:bridge none等
restart: always
environment: #保存MY_HOST_IP变量到镜像里面,启动的容器也会包含这些变量设置
MY_HOST_IP: ${MY_HOST_IP} #后面要用到MY_HOST_IP参数
volumes:
# - /var/lib/mysql 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
# - ./cache:/tmp/cache 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器
# - /opt/data:/var/lib/mysql 使用绝对路径挂载数据卷
- ${SDQJ_COMPONENTS_DIR}/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf#容器外文件映射到容器内,修容器件外路径的redis.conf完成容器内的修改
command: > #可以覆盖容器启动后默认执行的命令
sh -c "echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
&& redis-server /usr/local/etc/redis/redis.conf --cluster-announce-ip ${MY_HOST_IP} --appendonly yes" #用了变量和创建的地址~
ports:
- "8080" #映射端口 端口小于60你可能会得到错误得结果
#- "8080:8080" 其他格式
#- "3000-3005" 随机端口
deploy: #配置资源限制 除下面两个 还有其他
resources:
limits:#限制不超过 50M 的内存和 0.50(50%)可用处理时间(CPU)
cpus: '0.50'
memory: 50M
reservations: #留 20M 了内存和 0.25 CPU时间
cpus: '0.25'
memory: 20M
networks: #加入指定网络
- front-tier
- back-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge