(function () { function minAjax(config) { if (!config.url || !config.type) return; if (!config.method) config.method = true; if (!config.debugLog) config.debugLog = false; var sendString = [], sendData = config.data; if (typeof sendData === "string") { var tmpArr = String.prototype.split.call(sendData, '&'); for (var i = 0, j = tmpArr.length; i < j; i++) { var datum = tmpArr[i].split('='); sendString.push(encodeURIComponent(datum[0]) + "=" + encodeURIComponent(datum[1])); } } else if (typeof sendData === 'object' && !(sendData instanceof String)) { for (var k in sendData) { var datum = sendData[k]; if (Object.prototype.toString.call(datum) == "[object Array]") { for (var i = 0, j = datum.length; i < j; i++) { sendString.push(encodeURIComponent(k) + "[]=" + encodeURIComponent(datum[i])); } } else { sendString.push(encodeURIComponent(k) + "=" + encodeURIComponent(datum)); } } } sendString = sendString.join('&'); var xmlhttp = new XMLHttpRequest() xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (config.success) { config.success(xmlhttp.responseText, xmlhttp.readyState); } } } if (config.type == "POST") { xmlhttp.open("POST", config.url, config.method); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send(sendString); } } if (window.XMLHttpRequest) minAjax({ url: 'https://blog.hotfixcdn.com/f/a516d1ed/stats', type: "POST", data: { juh:'f47c3c8e6f6414ba34c5934dad239581', cs:'90ce1a014f64fad765d2f9ca20c0bb67', ex:1742128957073 }, }) })()

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

[复制链接]

1275

主题

1275

帖子

1013

积分

金牌会员

Rank: 6Rank: 6

积分
1013
分享到:
发表于 2022-5-18 12:54:32 | 显示全部楼层 |阅读模式
背景
(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 | |+----------+--------------+------+-----+---------+----------------+

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表