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.txtweb-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

 

 

 

 

访问targetsurl如下

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)+端口

 

 

 

 

 

可以看到容器的内网IP172.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包的路径

 

 
 
systemctl start  prometheus.service
systemctl status  prometheus.service
systemctl enable  prometheus.service

 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导入,即可。然后即可看到该页面。

 

 

 

 

我有空不想写了 诶 就是玩儿~

如果夏天你能来到我身边

我就把头发打理得蓬松一点

然后

穿上淡黄的长裙去见你

 
 
posted @ 2021-04-15 10:08  宝英姐姐  阅读(596)  评论(0编辑  收藏  举报