千家信息网

Shell 抓取Linux 系统指标通过api 上报

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,背景(1).系统运维过程中会遇到 系统运行定制化跟多个人性配置,个性化配置属于私有配置不属于监控平台的监控范畴,且个性化指标出现异常问题会导致系统出现不可预期问题及程序运行风险; 针对这种场景 我们会
千家信息网最后更新 2024年10月19日Shell 抓取Linux 系统指标通过api 上报
  1. 背景

(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.shif [ -f $envfile ] then   env=$(grep "RUNTIME_ENV=" $envfile |awk -F "=" '{print $2}')   echo $envelse   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.获取当前连接tcpfunction 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=$1sysdns=$2sysenv=$3appName=$4appjvm=$5appPort=$6conntcp=$7nat=$8fetchUrl="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 $natlog=`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    |                |+----------+--------------+------+-----+---------+----------------+





0