自动安装部署
https://gitee.com/yuanhuanliang/Prometheus
当前自动部署尚未完成,需要手动安装
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker。
Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。
与其他监控系统相比,Prometheus的主要特点是:
一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
一种灵活的查询语言。
不依赖分布式存储,单个服务器节点。
时间集合通过HTTP上的PULL模型进行。
通过中间网关支持推送时间。
通过服务发现或静态配置发现目标。
多种模式的图形和仪表板支持。
下面介绍如何使用Prometheus、Grafana、CAdvisor、node-exporter、mysqld-exporter对本机服务器性能、Docker容器、MySQL数据库进行监控。
监控本机,只需要一个exporter
node_exporter – 用于机器系统数据收集
mysqld-exporter 用于MySQL数据库数据收集
Cadvisor 用于收集宿主机上的docker容器数据
Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化。它内置了以下数据源的支持:
下面是我们安装时用到的架构图:
注意:本文使用的是CentOS 7 x64,只需要一台服务器即可!
官网
#yum install -y yum-utils
#yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#yum -y install docker-ce
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d
yum clean all
yum makecache
mkdir -p /root/docker
yum install --downloadonly --downloaddir=/root/docker docker-ce-19.03.9-3.el7 #只下载文件不安装
docker pull prom/node-exporter
docker pull prom/mysqld-exporter
docker pull google/cadvisor
docker pull prom/prometheus
docker pull grafana/grafana
为离线环境及网络延迟较高的用户使用
链接:https://pan.baidu.com/s/1gO-FjlsuIOmXuQKXvPE5Gw 提取码:uzww
离线安装包的docker版本为19.03,对应的镜像为当前hub.docker.com的最新版本
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
cd images_prometheus
for i in `ls`
do
docker load -i $i
done
docker run -d --name node-exporter --restart=always -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
等待几秒钟,查看端口是否起来了
[root@docker01 ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11549/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 922/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1351/master
tcp 0 0 192.168.1.31:22 192.168.1.1:50920 ESTABLISHED 11087/sshd: root@no
tcp 0 36 192.168.1.31:22 192.168.1.1:50919 ESTABLISHED 11080/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63031 ESTABLISHED 10454/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63032 ESTABLISHED 10463/sshd: root@no
tcp6 0 0 :::9100 :::* LISTEN 11553/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 922/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1351/master
http://192.168.1.31:9100/metrics
效果如下:
这些都是收集到数据,有了它就可以做宿主机Linux数据展示了
docker run -d --name mysqld_exporter --restart=always -p 9104:9104 -e DATA_SOURCE_NAME="root:Password123@(172.17.0.2:3306)/" prom/mysqld-exporter
等待几秒钟,查看端口是否起来了
[root@docker01 ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11549/docker-proxy
tcp 0 0 0.0.0.0:9104 0.0.0.0:* LISTEN 11636/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 922/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1351/master
tcp 0 0 192.168.1.31:22 192.168.1.1:50920 ESTABLISHED 11087/sshd: root@no
tcp 0 0 192.168.1.31:22 192.168.1.1:50919 ESTABLISHED 11080/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63031 ESTABLISHED 10454/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63032 ESTABLISHED 10463/sshd: root@no
tcp6 0 0 :::9100 :::* LISTEN 11553/docker-proxy
tcp6 0 0 :::9104 :::* LISTEN 11640/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 922/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1351/master
http://192.168.1.31:9104/metrics
这些都是收集到数据,有了它就可以做MySQL数据库数据展示了
docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 -d --name=cadvisor --restart=always google/cadvisor:latest
等待几秒钟,查看端口是否起来了
[root@docker01 ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11549/docker-proxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11746/docker-proxy
tcp 0 0 0.0.0.0:9104 0.0.0.0:* LISTEN 11636/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 922/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1351/master
tcp 0 0 192.168.1.31:22 192.168.1.1:50920 ESTABLISHED 11087/sshd: root@no
tcp 0 0 192.168.1.31:22 192.168.1.1:50919 ESTABLISHED 11080/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63031 ESTABLISHED 10454/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63032 ESTABLISHED 10463/sshd: root@no
tcp6 0 0 :::9100 :::* LISTEN 11553/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 11750/docker-proxy
tcp6 0 0 :::9104 :::* LISTEN 11640/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 922/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1351/master
http://192.168.1.31:8080/metrics
效果如下:
这些都是收集到数据,有了它就可以做Docker容器数据展示了
新建目录prometheus,编辑配置文件prometheus.yml
mkdir /opt/prometheus
cd /opt/prometheus/
vim 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: ['172.17.0.2:9100']
labels:
instance: localhost
# - targets: ['192.168.1.22:9100']
#这里添加targets,可以使用Prometheus监控其他装有node_exporter的节点,单节点则不需要
# labels:
# instance: 192.168.1.22
- job_name: cadvisor
static_configs:
- targets: ['172.17.0.4:8080']
labels:
instance: cAdvisor
- job_name: mysqld
static_configs:
- targets: ['172.17.0.3:9104']
labels:
instance: mysql-exporter
注意:修改IP地址,这里的172.17.0. xx就是docker容器内的私网,需要自行查询
docker run -d --name prometheus --restart=always -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
注意:宿主机的路径必须是绝对路径:/opt/prometheus/prometheus.yml,否者报错
等待几秒钟,查看端口状态
[root@docker01 prometheus]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 12175/docker-proxy
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11549/docker-proxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11746/docker-proxy
tcp 0 0 0.0.0.0:9104 0.0.0.0:* LISTEN 11636/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 922/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1351/master
tcp 0 0 192.168.1.31:22 192.168.1.1:50920 ESTABLISHED 11087/sshd: root@no
tcp 0 36 192.168.1.31:22 192.168.1.1:50919 ESTABLISHED 11080/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63031 ESTABLISHED 10454/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63032 ESTABLISHED 10463/sshd: root@no
tcp6 0 0 :::9090 :::* LISTEN 12179/docker-proxy
tcp6 0 0 :::9100 :::* LISTEN 11553/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 11750/docker-proxy
tcp6 0 0 :::9104 :::* LISTEN 11640/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 922/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1351/master
http://192.168.1.31:9090/graph
效果如下:
访问targets,url如下:
http://192.168.1.31:9090/targets
效果如下:
如果状态没有UP起来,等待一会,就会UP了
新建空文件夹grafana-storage,用来存储数据
#mkdir /opt/grafana-storage
添加权限
#chmod 777 -R /opt/grafana-storage
因为grafana用户会在这个目录写入文件,直接设置777,比较简单粗暴!
启动grafana
#docker run -d --name grafana --restart=always -p 3000:3000 --name=grafana -v /opt/grafana-storage:/var/lib/grafana grafana/grafana
等待几秒钟,查看端口状态
[root@docker01 grafana-storage]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 12175/docker-proxy
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11549/docker-proxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11746/docker-proxy
tcp 0 0 0.0.0.0:9104 0.0.0.0:* LISTEN 11636/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 922/sshd
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 12428/docker-proxy
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1351/master
tcp 0 0 192.168.1.31:22 192.168.1.1:50920 ESTABLISHED 11087/sshd: root@no
tcp 0 0 192.168.1.31:22 192.168.1.1:50919 ESTABLISHED 11080/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63031 ESTABLISHED 10454/sshd: root@pt
tcp 0 0 192.168.1.31:22 192.168.1.1:63032 ESTABLISHED 10463/sshd: root@no
tcp6 0 0 :::9090 :::* LISTEN 12179/docker-proxy
tcp6 0 0 :::9100 :::* LISTEN 11553/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 11750/docker-proxy
tcp6 0 0 :::9104 :::* LISTEN 11640/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 922/sshd
tcp6 0 0 :::3000 :::* LISTEN 12432/docker-proxy
tcp6 0 0 ::1:25 :::* LISTEN 1351/master
访问url:
http://192.168.1.31:3000/
默认会先跳转到登录页面,默认的用户名和密码都是admin
登录之后,它会要求你重置密码。你还可以再输次admin密码!
点击Setting——Add data source,由于使用的是镜像方式,所以版本比较新。和网络上的文章展示的图片不一样
name名字写Prometheus
type 选择Prometheus,因为数据都从它那里获取
url 输入Prometheus的ip(docker容器私网ip)+端口
点击下面的Save & Test,如果出现绿色的,说明ok了
回到首页,导入grafana监控模板,mysql监控模板id为7362,填入如下输入框内
报存就可以进行数据可视化展示
导入主机的监控模板,模板id为8919,以相同方式导入即可
导入容器的监控模板,模板id为179,以相同方式导入即可
更多监控模板