docker部署普罗修斯监控+grafana
1、拉取镜像
docker pull prom/node-exporter
docker pull prom/mysqld-exporter
docker pull google/cadvisor
docker pull prom/prometheus
docker pull grafana/grafana
2、启动node-exporter
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
访问页面
http://192.168.1.143:9100/metrics
这些都是收集到数据,有了它就可以做宿主机Linux数据展示了
扩展:
在node-exporter方面如果涉及到安全问题的话
比如渗透测试方面的
那么需要对node-exporter提供Basic 认证,或者使用TLS保证数据传输安全。
也就是说访问http://192.168.1.143:9100/metrics需要输入账户和密码
这里说明下使用Basic 认证的方式
2.1安装 httpd-tools 加密工具
yum install -y httpd-tools
2.2自定义密码
htpasswd -nbBC 12 admin Ykyy@2023 > htpasswd.txt
其中Ykyy@2023等于你自己设置的密码
可以cat查看一下 htpasswd.txt 看看是否创建成功
2.3创建文件vim web-config.yml
vim web-config.yml
basic_auth_users:
admin: $2y$12$l9ZyVC59FHkSZo/hkzgXVOvi4231CtHS2CITVgrK0cn.tMRShOdcK
注意格式要对齐 否则会报错
第一行的s对准第二行的a
其中$2y$12$l9ZyVC59FHkSZo/hkzgXVOvi4231CtHS2CITVgrK0cn.tMRShOdcK就是htpasswd.txt里面的加密密码
注意两个文件htpasswd.txt和web-config.yml的路径要在一个路径下
如图:
2.4创建node-exporter容器
docker run -d -p 9100:9100 \
--name=node-exporter \
-v /opt/node-exporter/htpasswd.txt:/etc/node-exporter/htpasswd \
-v /opt/node-exporter/web-config.yml:/etc/node-exporter/web-config.yml \
prom/node-exporter --web.config=/etc/node-exporter/web-config.yml
注意格式要对齐 否则会报错
一行的c对准第二行的-
将/opt/node-exporter/htpasswd.txt和/opt/node-exporter/web-config.yml
两个文件的路径换成实际的真实路径即可
2.5访问页面http://192.168.1.143:9100/metrics或者http://192.168.1.143:9100/debug/pprof
发现需要输入账户和密码
输入2.2创建的用户:admin和密码:Ykyy@2023
发现可以登录进来
证明成功
3、启动mysqld-exporter
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
访问页面
http://192.168.1.143:9104/metrics
这些都是收集到数据,有了它就可以做MySQL数据库数据展示了
4、启动cadvisor
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
访问页面
http://192.168.1.143:8080/metrics
这些都是收集到数据,有了它就可以做Docker容器数据展示了
5、启动prometheus
新建目录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
- 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容器内的私网,需要自行查询
6、启动prometheus
docker run -d --name prometheus --restart=always -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
访问页面
http://192.168.1.143:9090/graph
访问targets,url如下
http://192.168.1.143:9090/targets
如果状态没有UP起来,等待一会,就会UP了
扩展:
在prometheus方面如果涉及到安全问题的话
比如渗透测试方面的
那么需要对prometheus提供Basic 认证,或者使用TLS保证数据传输安全。
也就是说访问http://192.168.1.143:9090/targets需要输入账户和密码
这里说明下使用Basic 认证的方式
6.1安装 httpd-tools 加密工具
yum install -y httpd-tools
6.2自定义密码
htpasswd -nBC 12 '' | tr -d ':\n'
随后输入密码:123456
确认密码:123456
会出现以下图中的密码
复制一下这个密码:$2y$12$s6gU9YjmdMpMp.DP7daHdu4wVXCry9M3cFMSXUGNNxi3naFdD0sli
6.3编辑配置文件
首先创建文件web-config.yml
vim /opt/prometheus/web-config.yml
basic_auth_users:
admin: $2y$12$s6gU9YjmdMpMp.DP7daHdu4wVXCry9M3cFMSXUGNNxi3naFdD0sli
如图:
第二行的admin是用户 后面的则是刚刚复制生成的密码
其次再次编辑prometheus.yml
vim /opt/prometheus/prometheus.yml
新增以下配置
basic_auth:
username: admin
password: $2y$12$BVGoxRI/abBE1co8NxT6/OcAjInUe3F7/46LHA7DY9GXGV/UMTUY
如图:
注意格式
整体配置如下:
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
basic_auth:
username: admin
password: $2y$12$BVGoxRI/abBE1co8NxT6/OcAjInUe3F7/46LHA7DY9GXGV/UMTUYO
static_configs:
- targets: ['192.168.1.55:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.1.55:9100']
labels:
instance: localhost
6.4使用以下命令创建prometheus容器
docker run -d --name prometheus --restart=always \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/prometheus/web-config.yml:/etc/prometheus/web-config.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.config.file=/etc/prometheus/web-config.yml
如图:
切记/opt/prometheus/prometheus.yml和 /opt/prometheus/web-config.yml要换成实际的路径
格式是固定的一定要对准 否则创建容器会报错
docker: invalid reference format.
See 'docker run --help'.
6.5访问页面
可以看到要输入账户和密码
账户:admin
密码:123456
如图:
登录后即可看到
6.6因为是Basic 认证的
所以在granfa里设置下
默认的是这样的:
prometheus开启Basic 认证后
应该这样配置:
开启Basic auth
然后输入账户admin和密码123456
随后点击最下方的save&test
6.7以上都是在centos系统使用docker安装的prometheus
如果你是Ubuntu系统的话
那么可以参考这篇博客安装prometheus
https://www.jianshu.com/p/4853d9e695e0
具体怎么安装prometheus这里就不多说了
这里只说明安装prometheus后
如何开启Basic 认证
6.7.1安装apache2-utils
sudo apt install apache2-utils
如果安装不上,且提示和图中的类似
那么应该先更新下
sudo apt-get update
然后再次安装
sudo apt install apache2-utils
发现成功
6.7.2自定义密码
htpasswd -nBC 12 '' | tr -d ':\n'
输入密码
确认密码
6.7.3创建web-config.yml文件
要进入自己实际安装的prometheus路径下
如图:
cd /data/sh/prometheus-2.29.2.linux-amd64
vim web-config.yml
basic_auth_users:
admin: $2y$12$WrjfQ5Wh3V/PPedrtXM2q.KG0fOKkoFGJbWAkAZP97vCG1MhSVnOu
注意对准格式 否则会报错
如图:
6.7.4编辑prometheus.yml 配置文件
vim prometheus.yml
添加以下三行配置
basic_auth:
username: admin
password: $2y$12$WrjfQ5Wh3V/PPedrtXM2q.KG0fOKkoFGJbWAkAZP97vCG1MhSVnOu
注意对准格式 否则会报错
如图:
b要对准上面的j
6.7.5编辑prometheus的启动服务
vim /etc/systemd/system/prometheus.service
添加以下配置
--web.config.file /data/sh/prometheus-2.29.2.linux-amd64/web-config.yml \
其中/data/sh/prometheus-2.29.2.linux-amd64/web-config.yml 换成实际的路径
如图:
6.7.6重启prometheus服务
systemctl daemon-reload
systemctl restart prometheus
查看下状态
systemctl status prometheus
6.7.7访问
http://localhost:9090
发现要输入密码
证明成功
在granfa添加prometheus节点和上面的6.6一样
7、启动grafana
新建空文件夹grafana-storage,用来存储数据
mkdir /opt/grafana-storage
1
设置权限
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
访问页面:
http://192.168.1.143:3000/login
默认会先跳转到登录页面,默认的用户名和密码都是admin
忘记密码的话 重置一下
docker exec -it dockername(容器名字)grafana-cli admin reset-admin-password admin
例如
docker exec -it grafana grafana-cli admin reset-admin-password admin
登录之后,它会要求你重置密码。你还可以再输次admin密码!
密码设置完成之后,就会跳转到首页
点击Setting——Add data source,由于使用的是镜像方式,所以版本比较新。和网络上的文章展示的图片不一样
选择Prometheus
name名字写Prometheus
type 选择Prometheus,因为数据都从它那里获取
url 输入Prometheus的ip(docker容器私网ip)+端口
可以看到容器的内网IP是172.17.0.5
往下翻
点击save&test
如果出现绿色的,说明ok了
回到首页,导入grafana监控模板
然后输入号和json
网址:https://grafana.com/grafana/dashboards
往下翻一下 点进去
看到后,填入信息
然后点击Load
或者直接输入12633
然后点击Load也是可以的
然后输入名字
下面选择刚刚创建的source普罗米修斯节点
12633模板展示图:
输入名字
下面选择普罗米修斯
点击important
8919展示图如下:
仪表盘在这里
导入MySQL监控
https://grafana.com/grafana/dashboards
导入容器的监控
https://grafana.com/grafana/dashboards/11558
和上面导入方式一样
备注:因docker的网络模式是bridge,创建容器时候,会自动生成一个ip,为 172.17.0.0/24网段,导致服务器或者docker服务重启后,IP会变。
所以要想docker创建出来的容器IP不变,只能我们自己手动设置静态IP,创建网桥。
那么命令为:
docker network create --subnet 192.168.30.0/24 net-30
该命令为创建一个网络为192.168.30.0网段的IP,网卡名称为net-30
然后我们创建容器的时候,指定一下IP即可
例如:
docker run -d --name prometheus --net net-30 --ip 192.168.30.2 --restart=always -p 9090:9090 -v /etc/localtime:/etc/localtime -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
扩展内容(一)
因有的公司 需要监控的服务器为多台,那么这时候怎么可以实现再一个监控网址上,可以监控到多台服务器呢。
例如我的一台服务器上安装了docker,又分别使用docker安装了 node-exporte cadvisor prometheus grafana 我们先把这台服务器称之为主服务器
这台服务器通过上面的操作,已经实现了可以监控自身,现在又有新的一台服务器需要监控,我该如何操作呢。我们把这台服务器称之为从服务器
首先,在从服务器上安装docker后,只需拉取node-exporter,prometheus 这两个镜像,然后使用docker的host模式去创建容器即可
(不一定非要用docker的host模式,因为害怕服务器重启后,docker的IP会发生变化,故这里使用docker的host模式)
操作如下:
docker pull prom/node-exporte
docker pull prom/prometheus
docker run -d --name node-exporter --restart=always --net host -v /etc/localtime:/etc/localtime -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
映射目录之前应该先填写好信息
mkdir -p /opt/prometheus/
vim prometheus.yml
现在我们需要在配置文件里面分别写上从服务器的一些配置
192.168.1.56为从服务器IP,因为从服务器创建docker时候使用的host模式
如图所示:
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['192.168.1.56:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.1.56:9100']
labels:
instance: localhost
:wq
保存退出
然后我们创建容器
docker run -d --name prometheus --net host --restart=always -v /etc/localtime:/etc/localtime -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
之后我们登录到主服务器的grafana服务,也就是3000端口 http://主服务器ip://3000
然后找到 Add new data source
选择prometheus
输入名字和对应的网址即可
例如:name写从服务器1.56
URL写http://192.168.1.56:9090
翻到最下面 点击保存并测试,看到绿色的证明成功
然后我们导入模板 选择Import
输入12633 然后点击右侧的Load
然后写上 name从服务器监控面板
然后选择刚刚创建的prometheus,名称为从服务器1.56
然后点击最下面的Import导入,即可。然后即可看到该页面。
同理,需要监控10个服务器也是这样操作即可。
扩展内容(二)
如果不想docker pull(拉取)prometheus和node_exporter镜像的话
想要在本机安装的话,可以查看以下的操作步骤:
操作系统:Ubuntu20.04
1、下载对应的gz包
wget https://github.com/prometheus/prometheus/releases/download/v2.36.0/prometheus-2.36.0.linux-amd64.tar.gz
wget https://prometheus.io/download/node_exporter-1.3.1.linux-amd64.tar.gz
2、首先解压prometheus-2.36.0.linux-amd64.tar.gz
tar xvfz prometheus-2.36.0.linux-amd64.tar.gz
3、解压后我们会得到一个文件夹,进去后,修改prometheus.yml配置文件
cd prometheus-2.36.0.linux-amd64
vim prometheus.yml
把默认的localhost换成本机IP即可,如图红色框住内容
如图所示:
然后再把下面的node_exporter写进去
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.1.68:9100']
如图所示:
:wq
保存退出
4、编写一个prometheus系统服务并启动服务,设置为开启自启
vim /etc/systemd/system/prometheus.service
[Unit]
Description=prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/data/sh/prometheus-2.29.2.linux-amd64/prometheus \
--config.file /data/sh/prometheus-2.29.2.linux-amd64/prometheus.yml \
# --storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/data/sh/prometheus-2.29.2.linux-amd64/consoles \
--web.console.libraries=/data/sh/prometheus-2.29.2.linux-amd64/console_libraries
[Install]
WantedBy=multi-user.target
:wq
保存退出
注意:下面四个红色框住的需填写实际解压prometheus-2.36.0.linux-amd64.tar.gz包的路径
5、我们现在解压node_exporter-1.3.1.linux-amd64.tar.gz包
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
6、编写一个node_exporter系统服务
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/data/sh/node_exporter-1.0.1.linux-amd64/node_exporter
[Install]
WantedBy=multi-user.target
:wq
保存退出
注意:ExecStart后面写实际解压node_exporter-1.3.1.linux-amd64.tar.gz包的路径
7、启动服务,查看服务状态,加入开机自启
systemctl start node_exporter.service
systemctl status node_exporter.service
systemctl enable node_exporter.service
8、然后我们登录到主服务器的grafana服务,也就是3000端口 http://主服务器ip://3000
然后找到 Add new data source
选择prometheus
输入名字和对应的网址即可
例如:name写gpu服务器1.68
URL写http://192.168.1.68:9090
翻到最下面 点击保存并测试,看到绿色的证明成功
然后我们导入模板 选择Import
输入12633 然后点击右侧的Load
然后写上 name从服务器监控面板
然后选择刚刚创建的prometheus,名称为GPU1服务器1.68-性能监控面板
然后点击最下面的Import导入,即可。然后即可看到该页面。
我有空不想写了 诶 就是玩儿~
如果夏天你能来到我身边
我就把头发打理得蓬松一点
然后
穿上淡黄的长裙去见你