189 8069 5689

Shell抓取Linux系统指标通过api上报-创新互联

  1. 背景

    创新互联建站是一家专业提供岳普湖企业网站建设,专注与成都网站设计、做网站、H5网站设计、小程序制作等业务。10年已为岳普湖众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

(1).系统运维过程中会遇到 系统运行定制化跟多个人性配置,个性化配置属于私有配置不属于监控平台的监控范畴,且个性化指标出现异常问题会导致系统出现不可预期问题及程序运行风险; 针对这种场景 我们会自己提供检查系统检查脚本或者agent 达到系统保障目的;  如下就是系统探测脚本;

2.系统收集实战脚本;

#!/bin/bash #系统信息抓取脚本 function current_date(){ start_current_date="`date "+%Y-%m-%d %H:%M:%S"`" echo ${start_current_date} }   function init_logs(){ log_dir="/chj/logs/" log_file="/chj/logs/pushData.log" if [ -f ${log_file} ] then    echo ${log_file} else    touch ${log_file}       echo  ${log_file} fi    }   #1.获取系统ip地址 function getSysIp(){ ipaddr=$(/bin/hostname -i) echo $ipaddr }   #2.解析dns检查是否存在有效dns; function getSysDns(){     domain="do.chj.cloud"     if dig @172.21.2.10 $domain +short |grep '[0-9]' >/dev/null;then         echo "True"     else         echo "False"     fi }    #3.获取系统env环境变量 function getSysEnv(){ envfile=/etc/profile.d/chj-common.sh if [ -f $envfile ]  then    env=$(grep "RUNTIME_ENV=" $envfile |awk -F "=" '{print $2}')    echo $env else    echo "none" fi }   #4.获取应用名称   function getJavaName(){ appname=$(ps -ef |grep java |grep -v "grep"|head -1|awk -F "-D" '{print $2}'|awk -F "=" '{print $2}') echo $appname }     #5.获取java应用jvm参数 function getJavaInfo(){ appinfo=$(ps -ef |grep java |grep -v "grep"|head -1|sed 's/[[:space:]]/-/g') echo "$appinfo" }     #6.获取应用端口 function getAppPort(){ apppid=$(ps -ef |grep java |grep -v "grep" | /bin/awk '{print $2}' |head -1) if [ ! -z "$apppid" ] then     appport=$(netstat -tulpn | grep "$apppid" | awk -F ":" '{print $2}'|/bin/awk -F " " '{print $1}')     echo "$appport"       else     echo "none" fi }    #7.获取当前连接tcp function getTcp(){ tcp=$(netstat -anplt  |grep -v tcp6 |grep -v "127.0.0.1"|grep "ESTABLISHED"|sort |awk '!a[$5]++{print}'|awk '{print $5,$7}'|sed 's/[[:space:]]/-/g'|sed 's/\///g'|sed 's/sshd:/sshd/'|sed s'/-.-//g') if [ ! -n "tcp" ] then      echo "none" else      echo $tcp|sed 's/[[:space:]]/,/g' fi }   #8.检查是否存在nat; function sysNat(){     local timeout="1"     local target="www.badu.com"     local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`     if [ "x$ret_code" = "x200" ]; then         echo "1"     else         echo "0"     fi }   #9.调用动态上传接口发送请求数据 function reqDynamicData(){ sysipaddr=$1 sysdns=$2 sysenv=$3 appName=$4 appjvm=$5 appPort=$6 conntcp=$7 nat=$8 fetchUrl="http://ops.chj.cloud/dynamic/api/v1" /bin/curl "$fetchUrl" -X POST -H "Content-Type: application/json" -d "{\"instance_ip\": \"$sysipaddr\",\"env\":\"$sysenv\",\"dns\":\"$sysdns\",\"appname\":\"$ppName\",\"appjvm\":\"$appjvm\",\"appport\":\"$appPort\",\"apptcp\":\"$conntcp\",\"nat\":\"$nat\"}" }   #10.发送数据 function main(){ ip=`getSysIp` dns=`getSysDns` env=`getSysEnv` name=`getJavaName` jvm=`getJavaInfo` port=`getAppPort` tcp=`getTcp` nat=`sysNat` reqDynamicData $ip $dns $env $name $jvm $port $tcp $nat log=`init_logs` runTime_date=`current_date` echo "上传数据时间:$runTime_date" >> $log     } main

3.数据库字段设计;

 3.1 创建数据库sql;    CREATE TABLE `dynamic_Check` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `ip` varchar(92) COLLATE utf8mb4_bin DEFAULT NULL,   `dns` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL,   `env` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL,   `appname` text COLLATE utf8mb4_bin,   `appport` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,   `appjvm` text COLLATE utf8mb4_bin,   `conn_tcp` text COLLATE utf8mb4_bin,   `snat` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,   `run_time` datetime DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin  3.2.数据库表结构 +----------+--------------+------+-----+---------+----------------+ | Field    | Type         | Null | Key | Default | Extra          | +----------+--------------+------+-----+---------+----------------+ | id       | int(11)      | NO   | PRI | NULL    | auto_increment | | ip       | varchar(92)  | YES  |     | NULL    |                | | dns      | varchar(128) | YES  |     | NULL    |                | | env      | varchar(64)  | YES  |     | NULL    |                | | appname  | text         | YES  |     | NULL    |                | | appport  | varchar(32)  | YES  |     | NULL    |                | | appjvm   | text         | YES  |     | NULL    |                | | conn_tcp | text         | YES  |     | NULL    |                | | snat     | varchar(32)  | YES  |     | NULL    |                | | run_time | datetime     | YES  |     | NULL    |                | +----------+--------------+------+-----+---------+----------------+

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:Shell抓取Linux系统指标通过api上报-创新互联
URL网址:http://cdxtjz.cn/article/doespc.html

其他资讯