服务器管理平台开发(4)- 信息采集上报

信息采集上报

  1. 通过Shell脚本实现服务器CPU、内存、PCI设备、登录日志等信息定时采集和自主上报
  2. Shell脚本比Agent更加轻量化,无侵入式实现定时采集、自主上报,对业务几乎无影响,用户侧无感知

1、定时上报

搭建httpd文件服务器后,将采集脚本上传至对应目录,待采集服务器下载执行即可实现自主上报

  • 被采集服务器可使用curl或者wget进行脚本文件下载和执行
  • 被采集服务器可使用crontab进行定时任务,指定每天12点定时执行脚本,并把执行脚本的日志写入指定文件
  • crontab使用方式可自行Google
# 脚本下载方式
wget http://101.43.144.88/get_info.sh | bash
或curl –O http://101.43.144.88/get_info.sh | bash

# 打开定时任务配置文件
crontab -e

# 指定每天12点定时执行脚本,并把执行脚本的日志写入对应文件 test.log
0 12 * * * sh demo.sh > result.log

2、数据采集

2.1、系统基础信息采集

#!/bin/bash
# 用于开发测试环境操作系统相关信息采集

# 获取系统基础信息
function getSystemInfo() {

    Brand=$(dmidecode -s system-manufacturer | tail -n 1)     # 品牌    Tencent Cloud
    Model=$(dmidecode -s system-product-name | tail -n 1)     # 型号    CVM
    SN=$(dmidecode -s system-serial-number | tail -n 1)       # 序列号  8541d005-a671-4736-902a-bd9b3e9a1afd
    #    UseFor="xxx产品"                  # 用户填写
    CpuModel=$(cat /proc/cpuinfo | grep -i "model name"| head -n 1 | awk -F':' '{print $2}' | sed 's/ //g')     # CPU型号 Intel(R)Xeon(R)Platinum8255CCPU@2.50GHz
    CpuNumber=$(cat /proc/cpuinfo | grep -i "model name" | wc -l)                        # CPU数量 2
    free -h
    if [ $? -eq 0 ]; then
        Memory=$(free -h |grep Mem| awk -F ":  *" '{print $2}'|awk -F "  *" '{print $1}')       # 最大内存
    else
        # 适配Centos6
        number=$(free | grep Mem| awk -F ":  *" '{print $2}'| awk -F "  *" '{print $1}')       # 最大内存
        Reverse ${number} > temp.ini
        Memory=$(cat temp.ini)
    fi
    dmidecode -s system-product-name | tail -n 1 | grep -i "VM"                          # 平台类型 KVM


    # 2. 上报基础环境信息
    body="{\"SN\":\"$SN\", \"Brand\":\"$Brand\", \"Model\":\"$Model\", \"Memory\":\"$Memory\", \"PlatformType\":\"$PlatformType\", \"CpuModel\":\"$CpuModel\", \"CpuNumber\":\"$CpuNumber\"}"
#    echo "JSON body :" $body

    ret=$(curl -H "System:api-gateway" -H "Token:czc27be93ecsz53a53fc2a8443aeebe0" "http://127.0.0.1:8000/api/v1/config/esunny/meta/info" -XPOST -d "$body" -H "Content-Type: application/json")
#    echo "MetaInfo result:" $ret

    # 错误码不是0就表示失败,0代表成功
    ErrCode=$(echo $ret  | sed 's/,/\n/g' | grep "ErrCode" | sed 's/:/\n/g' | sed '1d')
    if [[ x"0" != x"$ErrCode" ]]; then
        echo "error| up MetaInfo to server error $ret"
        exit 1
    fi
}

2.2、登陆日志采集

# 获取设备登录日志
function getLoginINfo() {
    SN=$(dmidecode -s system-serial-number | tail -n 1)  # 序列号  8541d005-a671-4736-902a-bd9b3e9a1afd
    last -f /var/log/wtmp | head -3 | sed -e '/reboot/d' > temp.ini          #  root  pts/1   123.149.240.130  Mon May 29 13:48 - 16:07  (02:18)
    cat temp.ini | while read line
    do
        UserName=$(echo ${line} | awk '{print $1}')                                     # 登录用户名
        UserIp=$(echo ${line} | awk '{print $3}')                                       # 登录源IP
        StartTime=$(echo ${line} | awk '{print $5,$6,$7}' | sed 's/:/ /g')              # 登录时间
        EndTime=$(echo ${line} | awk '{print $5,$6,$9}' | sed 's/:/ /g')                # 结束时间
        Duration=$(echo ${line} | awk '{print $10}' | sed 's/(//g' | sed 's/)//g')      # 持续时长

        body="{\"SN\":\"$SN\", \"UserName\":\"$UserName\", \"UserIp\":\"$UserIp\", \"StartTime\":\"$StartTime\", \"EndTime\":\"$EndTime\", \"Duration\":\"$Duration\"}"
#        echo "JSON body :" $body

        ret=$(curl -H "System:api-gateway" -H "Token:czc27be93ecsz53a53fc2a8443aeebe0" "http://127.0.0.1:8000/api/v1/config/esunny/loginInfo" -XPOST -d "$body" -H "Content-Type: application/json")
#        echo "result:" $ret

        ErrCode=$(echo $ret  | sed 's/,/\n/g' | grep "ErrCode" | sed 's/:/\n/g' | sed '1d')
        if [[ x"0" != x"$ErrCode" ]]; then
            echo "error| up Login Info to server error $ret"
            exit 1
        fi
    done
}

2.3、PCI设备信息采集

# 获取PCI设备信息
function getPCINfo() {
    SN=$(dmidecode -s system-serial-number | tail -n 1)   # 序列号  8541d005-a671-4736-902a-bd9b3e9a1afd
    lspci -nn
    if [ $? -ne 0 ]; then
        echo "skip lspci info "
    else
        lspci -nn > temp.ini                      # PCI设备 00:00.0 Host bridge [0600]: Intel Corporation 440FX - 82441FX PMC [Natoma] [8086:1237] (rev 02)
        cat temp.ini | while read line
        do
            PCIDevice=${line}
            body="{\"SN\":\"$SN\", \"PCIDevice\":\"$PCIDevice\"}"
    #        echo "JSON body :" $body

            ret=$(curl -H "System:api-gateway" -H "Token:czc27be93ecsz53a53fc2a8443aeebe0" "http://127.0.0.1:8000/api/v1/config/esunny/pciDevice" -XPOST -d "$body" -H "Content-Type: application/json")
    #        echo "result:" $ret

            ErrCode=$(echo $ret  | sed 's/,/\n/g' | grep "ErrCode" | sed 's/:/\n/g' | sed '1d')
            if [[ x"0" != x"$ErrCode" ]]; then
                echo "error| up PCIDevice Info to server error $ret"
                exit 1
            fi
            sleep 0.1
        done
    fi

}

2.4、逻辑磁盘信息采集

# 获取逻辑磁盘信息
function getLogicDiskInfo() {
    SN=$(dmidecode -s system-serial-number | tail -n 1)    # 序列号  8541d005-a671-4736-902a-bd9b3e9a1afd
    df -h
    if [ $? -ne 0 ]; then
        echo "skip logicDisk info "
    else
        df -h  > temp.ini                          # 逻辑磁盘 /dev/vda1        59G   16G   42G  28% /
        sed -i '1d' temp.ini

        cat temp.ini | while read line
        do

            Filesystem=$(echo ${line} | awk '{print $1}')
            Size=$(echo ${line} | awk '{print $2}')
            Used=$(echo ${line} | awk '{print $3}')
            Avail=$(echo ${line} | awk '{print $4}')
            UsePercent=$(echo ${line} | awk '{print $5}')
            Mounted=$(echo ${line} | awk '{print $6}')
            body="{\"SN\":\"$SN\", \"Filesystem\":\"$Filesystem\", \"Size\":\"$Size\", \"Used\":\"$Used\", \"Avail\":\"$Avail\", \"UsePercent\":\"$UsePercent\", \"Mounted\":\"$Mounted\"}"
    #        echo "JSON body :" $body

            ret=$(curl -H "System:api-gateway" -H "Token:czc27be93ecsz53a53fc2a8443aeebe0" "http://127.0.0.1:8000/api/v1/config/esunny/logicDisk" -XPOST -d "$body" -H "Content-Type: application/json")
    #        echo "result:" $ret

            ErrCode=$(echo $ret  | sed 's/,/\n/g' | grep "ErrCode" | sed 's/:/\n/g' | sed '1d')
            if [[ x"0" != x"$ErrCode" ]]; then
                echo "error| up LogicalDisk Info to server error $ret"
                exit 1
            fi
            sleep 0.1
        done
    fi
}

2.5、Centos6老旧系统适配

# dmidecode 显示格式适配
dmidecode -s system-manufacturer | tail -n 1

# /dev/mem访问权限问题
sudo chmod 777 /dev/mem

# 内存显示
free 得到数值后进行换算

3、功能测试

  • sh执行采集脚本文件,出现success标志,同时数据库中多个表出现对应数据,create时间和脚本执行时间一致

End

公众号平台更改了推送规则,如果不想错过内容,请点击 “在看” 和 “赞”,感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/331403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gateway网关限流

在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止恶意网络攻击 文章目录 一、常见限流场景1.1 限流的对象1.2 限流的处理1.3 限流的架构 二、常见的限流算法2…

华为网络设备文件传输FTP配置

R2配置 ftp server enable aaa local-user ftp-client password cipher Huawei123local-user ftp-client privilege level 15local-user ftp-client ftp-directory flash:/local-user ftp-client service-type ftpinterface GigabitEthernet0/0/0ip address 10.0.12.2 255.255.…

【VMware】安装和卸载VMware的Ubuntu

安装视频:(全程无废话) https://www.bilibili.com/video/BV1W34y1k7ge/?spm_id_from333.337.search-card.all.click&vd_sourcefb8dcae0aee3f1aab700c21099045395

如何使用VNC实现Win系统远程桌面Ubuntu图形化界面【内网穿透】

文章目录 推荐前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 …

k8s-kubectl常用命令

一、基础命令 1.1 get 查询集群所有资源的详细信息,resource包括集群节点、运行的Pod、Deployment、Service等。 1.1.1 查询Pod kubectl get po -o wid 1.1.2 查询所有NameSpace kubectl get namespace 1.1.3 查询NameSpace下Pod kubectl get po --all-namespaces…

第二百七十三回

文章目录 1. 概念介绍2. 方法与信息2.1 获取方法2.2 详细信息 3. 示例代码4. 内容总结 我们在上一章回中介绍了"蓝牙综合示例"相关的内容,本章回中将介绍如何获取设备信息.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中获…

Power Designer 连接 PostgreSQL 逆向工程生成pd表结构操作步骤以及过程中出现的问题解决

一、使用PowerDesigner16.5 链接pg数据库 1.1、启动PD.选择Create Model…。 1.2、选择Model types / Physical Data Model Physical Diagram:选择pgsql直接【ok】 1.3、选择connect 在工具栏选择Database-Connect… 快捷键:ctrlshiftN.如下图&#xff…

C语言——大头记单词

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 每一发奋努力的背后,必有加…

Flink1.17 基础知识

Flink1.17 基础知识 来源:B站尚硅谷 目录 Flink1.17 基础知识Flink 概述Flink 是什么Flink特点Flink vs SparkStreamingFlink的应用场景Flink分层API Flink快速上手创建项目WordCount代码编写批处理流处理 Flink部署集群角色部署模式会话模式(Session …

解密PGSQL数据库引擎:探索数据世界的秘密

目录 1、引言 1.1 什么是PGSQL数据库引擎 1.2 数据库引擎的重要性 1.3 解密PGSQL数据库引擎的意义 2、PGSQL数据库引擎的基础知识 2.1 什么是数据库引擎 2.2 PGSQL数据库引擎的历史和发展 2.3 PGSQL数据库引擎的特点和优势 2.4 PGSQL数据库引擎的架构和组件 3、PGSQL…

数据库(基础理论+MySQL安装和部署)

目录 基础理论 1.1 什么是数据库? 1.2 DBMS数据库管理系统 1.3 数据库与文件系统的区别 1.4 数据库的发展和规划 1.5 常见的数据库 1.5.1 关系型数据库 1.5.2 非关系型数据库 1.6 DBMS支持的数据模型 层次模型 网状模型 关系模型 面向对象模型&#xf…

【每日一题】2171. 拿出最少数目的魔法豆-2024.1.18

题目: 2171. 拿出最少数目的魔法豆 给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一…

【华为 ICT HCIA eNSP 习题汇总】——题目集2

1、交换机某个端口配置信息如下,则此端口的PVID为()。 A、100 B、2 C、4 D、1 # interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 to 3 100 port hybrid unatgged vlan 4 6 #考点:VLAN(虚拟局域网&#xff…

精通Discord营销:多账号注册与管理,高效打造矩阵

Discord虽然是一个海外小众平台,但在Z世代群体来说却非常受欢迎。通常在游戏行业、年轻化的电商特定品类、软件等业务中,Discord的社群营销可以起到非常卓越的效果。但是,您必须学会管理不同的帐户,以构成矩阵打造社区&#xff0c…

ubuntu开放ssh服务

📑前言 本文主要是【ubuntu】——ubuntu开放ssh服务的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…

PXE——高效批量网络装机

目录 部署PXE远程安装服务 1.PXE概述 2.实现过程 3.实验操作 3.1安装dhcp、vsftpd、tftp-server.x86_64、syslinux服务 3.2修改配置文件——DHCP 3.3修改配置文件——TFTP 3.4kickstart——无人值守安装 3.4.1选择程序 3.4.2修改基础配置 3.4.3修改安装方法 3.4.4…

C++核心编程之通过类和对象的思想对文件进行操作

目录 ​​​​​​​一、文件操作 1. 文件类型分类: 2. 操作文件的三大类 二、文本文件 1.写文件 2.读文件 三、二进制文件 1.写二进制文件 2.读二进制文件 一、文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件可以将…

XXL-Job的搭建接入Springboot项目(详细)

一、XXL-Job介绍 XXL-Job 是一款开源的分布式任务调度平台,由 Xuxueli(徐雪里)开发。它基于 Java 技术栈,提供了一套简单易用、高可靠性的任务调度解决方案。 XXL-Job 的主要作用是帮助开发者实现定时任务的调度和执行。它可以用…

一、VTK 9.0.0 编译安装步骤 VS2019 CMake3.26.0

零基础开始学习VTK ,请跟我进行第一步,配置好开放环境! 首先,你时间比较紧急,想直接使用VTK ,而无需编译、那么请使用 PCL-1.12.0-AllInOne-msvc2019-win64.exe 它已经帮你编译好VTK 9 了,直…

Defi安全--Orion Protocol攻击事件分析

其它相关文章可见个人主页 1. Orion Protocol攻击事件相关信息 2023年2月2日,在ETH和BSC上的Orion Protocol项目被攻击,这里以ETH上攻击为例: 攻击合约地址:Attacker Contract Address | Etherscan攻击者地址:Orion…