基于Prometheus的机房监控系统

        摘要:本文主要结合容器和Prometheus等监控技术开展的一个实验部署,主要应用于机房的运维工作,对信息化设备进行监控。主要监控机器的物理参数、系统状态、网络状态、数据库等信息。未来会将监控范围会持续扩大,并加入告警及自动化的功能,本文只限于监控的部署。

目录

一、机房情况及部署技术选型

二、离线部署docker服务

三、运行封装好的docker镜像---Prometheus&&Grafana

四、部署Node_exporter服务

五、离线部署Chrome应用


一、机房情况及部署技术选型

        机房情况说明,机房的系统全部是基于红帽Linux,数据库使用的是Oracle。本次监控系统主要是对Linux系统的监控和数据库的监控。首先,事先搞清楚机房是否存在部署的空间,是否可以使用监控技术进行监控,在向领导提交了技术方案和得到首肯后开始编写部署方案。

        关于本次监控系统的技术选型问题。本次监控系统选用Prometheus作为监控的核心,Grafana作为监控的展示,两者封装在docker镜像里面。通过容器技术可以一定程度的减少对物理环境的影响,尽量不要对现有系统产生不必要的波动,维持环境的稳定运行。

二、离线部署docker服务

        首先我们在有外网环境的服务器上下载docker的离线安装包,选择好docker的版本后下载下来。这是docker的下载链接,下载完成后在linux上事先编写好安装和卸载的shell脚本和服务脚本。

以下是安装脚本和卸载脚本,仅供参考:

#安装脚本install.sh
#!/bin/sh
echo '解压tar包...'
tar -xvf $1
echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/
echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
echo 'docker安装成功...'
docker -v

#卸载脚本uninstall.sh
#!/bin/sh
echo '删除docker.service...'
rm -f /etc/systemd/system/docker.service
echo '删除docker文件...'
rm -rf /usr/bin/docker*
echo '重新加载配置文件'
systemctl daemon-reload
echo '卸载成功...'

编写服务脚本让docker每次开机能够自启动,脚本docker.sevice如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

因为本次环境的网络出于安全考虑是完全独立的,做到了物理隔离,所以没有写daemon.json的需求,如果在有网络的环境可以更改daemon.json的脚本,把docker的镜像库变成国内的会快很多。

{
 "registry-mirrors" : [
   "https://mirror.ccs.tencentyun.com",
   "http://registry.docker-cn.com",
   "http://docker.mirrors.ustc.edu.cn",
   "http://hub-mirror.c.163.com"
 ],
 "insecure-registries" : [
   "registry.docker-cn.com",
   "docker.mirrors.ustc.edu.cn"
 ],
 "debug" : true,
 "experimental" : true
}

        执行完以上操作后,我们把以上的文件,包括docker的安装包、install.sh、uninstall.sh、docker.service、daemon.json放在同一个目录下拷贝进U盘中。到机房找到一个空置的Linux服务器终端,在上面完成部署。

#进root挂载U盘
fdisk -l
mount /dev/sdb1 /mnt
#拷贝部署文件
cp -r /mnt/docker/* /opt/monitor/docker/
#执行部署脚本
cd /opt/monitor/docker/
sh install.sh

 

三、运行封装好的docker镜像---Prometheus&&Grafana

        在办公外网上事先部署好docker环境的机器中,先把prometheus和grafana的镜像拉取下来,然后启动容器,开始配置prometheus的配置文件。

外网环境操作如下:

#拉取镜像文件
docker pull prometheus
docker pull grafana

#生成容器
docker run --name prometheus -p 9090:9090 -d image/prometheus:laster  //此处镜像名称可能不一样
docker run --name grafana -p 3000:3000 -d image/grafana:laster

#查看容器运行是否正常
docker ps -a     //查看容器状态为up时正常

        操作完成后,我们可以打开浏览器输入http://本机IP:9090和http://本机IP:3000验证prometheus和grafana启动是否正常。注意,运行环境下我们要放开防火墙对这两个端口的访问限制。

接下来我们要配置prometheus容器的配置文件,配置为文件服务发现的形式,把机房各个固定的服务器IP地址录入配置中。

#进入prometheus容器
docker exec -it --user=root prometheus /bin/sh

#去编辑prometheus的配置文件
cd /etc/prometheus/
mkdir target
cd target 
touch nodes-linux.yaml prometheus-server.yaml

以下分别是prometheus.yml、nodes-linux.yaml、prometheus-server.yaml的配置文件需要更改的地方。

#vi nodes-linux.yaml进入配置文件
- targets:
  - IP1:9100
  - IP2:9100
  ...
  - IPn:9100
  labels:
    app: node_exporter


#vi prometheus-server.yaml进入配置文件
- targets:
  - prometheusIP:9090
  labels:
    app: prometheus

#vi ../prometheus.yml进入普罗米修斯的主配置文件
#在scrape_configs:栏目下加两个job
- job_name: "prometheus"
  file_sd_configs:
  - files:
    - target/prometheus-*.yaml
    refresh_interval: 1m

- job_name: "node"
  file_sd_configs:
  - files:
    - target/nodes-*.yaml
    refresh_interval: 1m

配置完成后我们对prometheus和grafana的容器进行打包,变成镜像文件。

#将docker容器打包为镜像
docker commit grafana grafana:v1
docker commit prometheus prometheus:v1

#导出镜像文件
docker save 镜像ID > grafanaV1.tar
docker save 镜像ID > prometheusV1.tar

把镜像文件导出存放到U盘中,到机房环境进行部署。

#导入镜像文件
docker load < prometheusV1.tar
docker load < grafanaV1.tar

#生成容器
docker run --name prometheus_rad -p 9090 -d image/prometheus:v1
docker run --name grafana_rad -p 3000 -d image/grafana:v1

#验证容器并使容器开机自启动
docker ps -a
docker update --restart=always grafana_rad prometheus_rad

       到这里基本已经部署完成了。还需要部署的是收集监控信息的客户端,因为是侵入式安装所以在生产环境请注意判断是否可行。 最后要验证是否可以使用,因为浏览器版本不够,需要部署新版本的浏览器,后面在进行展示。

四、部署Node_exporter服务

        Node_exporter服务是一个对linux系统进行监控信息收集的客户端,一般安装在linux服务器上为我们收集数据,然后prometheus server在通过定时pull的形式得到监控数据。这里部署分为两种,一种是单机进行部署,另一种是固定IP分发部署。在部署前,我们需要到prometheus的官网上下载node_exporter这个包,然后和脚本,启动服务脚本放在同一个目录下。

node_exporter.service的脚本和安装脚本如下:

#node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

#install.sh
#!/bin/bash
tar -xvf node_exporter.tar.gz
mv node_exporter-1.5.0.linux-amd64 node_exporter
sudo cp -r node_exporter /usr/local/
cp node_exporter.service /etc/systemd/system/
systemctl daemon-reload
systemctl start node_exporter.service
systemctl enable node_exporter.service

 

五、离线部署Chrome应用

        因为机房的服务器和外网隔绝,所以火狐浏览器的部分图表样式展示不出来,所以更新以下浏览器。在chrome for linux的官网下载安装包和依赖包,编写安装脚本后直接安装即可。

这是安装chrome官网

这是下载依赖包网站

脚本如下:

#!/bin/bash
rpm -ivh 
google-chrome-stable_current_x86_64.rpm liberation-fonts-1.07.2-16.el7.noarch.rpm liberation-narrow-fonts-1.07.2-16.el7.noarch.rpm vulkan-1.1.97.0-1.el7.x86_64.rpm vulkan-filesystem-1.1.97.0-1.el7.noarch.rpm

安装完成后,因为莱斯的启动界面系统经过编辑,所以我想让浏览器界面每次自动启动,可以在启动的用户家目录下编辑.bashrc文件,在末尾加上一条指令,

/usr/bin/google-chrome http://localhost:3000 &

即可自启动。

到这里整个部署流程就完成了,可以打开grafana的网页选择模板进行监控展示。如果有错误可以自行查各自的日志解决。

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值