Shell 抓取Linux 系统指标通过api 上报
admin
2023-02-03 05:20:03
0
  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.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    |                |
+----------+--------------+------+-----+---------+----------------+





相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...