首页 文章 精选 留言 我的

精选列表

搜索[诊断自动化],共10002篇文章
优秀的个人博客,低调大师

【论文解读】基于深度渐进收缩视角的机械复合故障诊断

在机械装备状态监测中,复合故障通常伴随多个单一故障特征的相互耦合,加之工况波动与强背景噪声的影响,容易导致特征空间内类内发散度过大、不同故障类别间严重重叠。针对这一工程问题,发表于期刊《Measurement》的论文《Mechanical compound fault diagnosis via suppressing intra-class dispersions: A deep progressive shrinkage perspective》提出了一种深度渐进收缩学习方法(DPSL)。该方法从特征层和决策层协同切入,通过渐进收缩机制滤除噪声干扰并抑制类内发散,从而实现复合故障与单一故障的有效解耦与辨识。

优秀的个人博客,低调大师

🚀Jarboot v2.2.1 服务管理、诊断平台完整示例更新🔥

🌈示例项目升级了Jarboot 2.2.1版本,业务服务根据Maven Central上最新的Jarboot重新编译,使用上一版本示例的可以下载最新的包覆盖。 GitHub主页:https://github.com/majianzheng/jarboot觉得不错的可以Star⭐️支持 Gitee主页:https://gitee.com/majz0908/jarboot 最佳实践Demo:https://github.com/majianzheng/jarboot-with-spring-cloud-alibaba-example 完整示例下载: 示例包含了Spring Cloud的典型服务(业务服务、API网关)、Nacos、Sentinel、Seata等。 由于是完整的可运行环境,文件较大放在了网盘中,下载后解压即可用,☀️注意Windows环境下Seata的服务配置中需要修改boot.vmoptions中的classpath为-classpath ./conf;./lib/*。 阿里云盘:https://www.aliyundrive.com/s/3oAWkRZgDtr 百度网盘:https://pan.baidu.com/s/1PvIIZP5LXjEJAM5uj4ye4w提取码: 8yh5 仪表盘监控进程信息 jad反编译Java类

优秀的个人博客,低调大师

SpringCloud 应用在 Kubernetes 上的最佳实践 — 诊断(线上联调)

作者 | 纳海 阿里巴巴高级开发工程师 导读:上篇我们介绍了应用成功上云后,面对应用的管理,如何做可灰度的线上发布,那么当云上的应用行为不符合预期的时候,您会怎么处理呢?修改代码,打包,部署,然后查看日志?或者开远程调试端口远程调试? 相关文章推荐: 《SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)》 前言 当云上的应用行为不符合预期的时候,您会怎么处理呢?修改代码,打包,部署,然后查看日志?或者开远程调试端口远程调试? 这些步骤都比较繁琐。现在 EDAS 提供了端云联调的工具,让您在本地就可以启动应用并且能跟云端服务联调。只需三个步骤,您就可以在本地获得跟云端服务联调的能力,下面我们一起来体验吧! 打开调试开关 默认情况下,EDAS 端云联调功能是关闭的,只有打开命名空间中的调试开关后,本地服务才能跟云端联调。您可以只对开发环境的命名空间开启端云联调,而对其他环境保持关闭,这样既方便本地开发,也保证其他环境服务稳定。 EDAS 命名空间的默认关闭状态如下所示,打开开关即可启用此功能: 准备可远程访问的节点 EDAS 端云联调只需一个可远程 SSH 的 Kubernetes 集群节点即可,如果您已具备这样的节点可跳过此节,否则可参考如下步骤来进行配置。 在 Kubernetes 集群内任意选择一个机器节点,进入 ECS 实例详情,绑定一个弹性公网 IP: 绑定弹性公网 IP 后,需要设置实例安全组规则以放通 SSH 端口的流量。进入实例安全组,设置入方向规则允许访问 SSH 的 22 端口: 上图中的授权对象 0.0.0.0/0 表示 22 端口对公网开放,您可以根据本地网络的公网出口 IP 来设置授权对象,只允许您所在的网络访问实例的 22 端口,进一步提升安全系数。 最后,设置实例登录密码并重启即可完成 SSH 配置: 配置插件 现在我们来配置 IDE 插件来启用端云联调。此功能支持 Intellij IDEA 和 Eclipse 两种 IDE ,配置流程相同,下面以 Intellij IDEA 来说明配置参数。 打开 IDE 配置页面,选择 Alibaba Cloud Toolkit -> EDAS 页面,勾选 Join EDAS Registry 选项,如下所示: 参数说明如下: Region:您的 Kubernetes 集群及服务所在区域; Namespace:EDAS命名空间,如未看到所需的命名空间,请参考上面的《打开调试开关》小节打开端云联调功能; Gateway Host:可远程 SSH 的节点,请参考上面的《准备可远程访问的节点》小节来配置; Username:可远程 SSH 的账号名。这里可填入一个不存在的账号,插件会进行检测,如不存在则进行创建; Password:可远程 SSH 的账号密码。如果账号不存在,则插件使用此密码来创建账号; Server Port:您的 Spring Cloud 项目服务端口。 填入以上信息后,点击页面上的 Add SSH Rule 按钮进行配置,插件会提示授予 root 权限来进行代理配置: 授予 root 权限,点击 Add 完成配置。至此,您已完成全部的配置流程,团队成员可直接复用上述配置的 SSH 的节点、账号和密码,无需重新配置。 启动应用进行联调 现在我们跟平常一样启动本地应用,IDE 会提示当前处于端云联调状态: 在此状态下,本地服务能正常调用云端服务,云端服务也能调用本地服务。另外,您也可以使用 IDE 的调试模式来启动本地应用,端云联调同样生效。 结语及后续 在本篇文章中,我们介绍了 EDAS 端云联调工具,借助此工具本地服务能跟云端服务进行联调。端云联调对于可重现的问题来说是一个非常高效的解决方案,但不适用于如下问题: 已发生的问题; 不能稳定重现的问题; 对于这样的问题,我们有更好用的解决方案:APM 监控。通过 APM 监控,您可以方便的查看分析系统异常、服务异常、接口异常等各种异常信息,下一讲我们将详细介绍《APM 监控》。 首届云原生微服务大会 首届云原生微服务大会 PC 端地址:https://developer.aliyun.com/topic/microservices2020#/ “阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

优秀的个人博客,低调大师

阿里云人工智能ET夺肺结节诊断世界冠军

7月14日最新消息,国际权威肺结节检测大赛LUNA16的世界纪录被一家中国企业打破。阿里云ET凭借89.7%的平均召回率夺得世界冠军。此项技术突破由阿里巴巴iDST视觉计算团队完成,并已集成到阿里云ET医疗大脑中。 LUNA16最新官网排行 大赛要求选手对888份肺部CT样本进行分析,寻找其中的肺结节。样本共包含1186个肺结节,75%以上为小于10mm的小结节。最终,ET在7个不同误报率下发现的肺结节平均召回率达到89.7%,超出第二名0.2%。 FROC曲线 召回率指在样本数据中成功发现的结节占比。上图显示了ET在不同误报次数下的召回率情况。 比赛中,阿里云ET医疗大脑克服了一系列挑战:结节模态复杂,早期的结节小(小于10mm),传统的机器学习和用于自然图像的深度学习网络通常难以凑效。 阿里巴巴iDST视觉计算团队负责人华先胜介绍,与常用

优秀的个人博客,低调大师

python自动化巡检

#!/usr/bin/envpython #-*-coding:utf-8-*- #__author__="chenhao" #Email:312779641@qq.com #Date:2017/8/22 importparamiko defsftp_exec_command(host,port,username,password,command): ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=host,port=port,username=username,password=password) stdin,stdout,stderr=ssh.exec_command(command) list=[] foriteminstdout.readlines(): list.append(item.strip()) returnlist ssh.close() defsftp_down_file(host,port,username,password,server_path,local_path): try: t=paramiko.Transport((host,port)) t.connect(username=username,password=password) sftp=paramiko.SFTPClient.from_transport(t) sftp.get(server_path,local_path) t.close() exceptExceptionase: print(e) if__name__=='__main__': hosts_file=open('./hosts/host.info','r') forlineinhosts_file.readlines(): ifline[0:1]=='#':continue line=line.strip('\n') items=line.split() port=22 host=items[0] username=items[1] password=items[2] sftp_exec_command(host,port,username,password,"sh/root/xunjian.sh") n=sftp_exec_command(host,port,username,password,"ls-t/root/log/|head-1") filename="/root/log/%s"%(n[0]) print(filename) sftp_down_file(host,port,username,password,filename,"D:/大数据数据/%s"%(n[0])) 执行后自动巡检python脚本 shell运维脚本 #!/bin/bash #主机信息每日巡检 IPADDR=$(ifconfigeth0|grep'inetaddr'|awk-F'[:]''{print$13}') #环境变量PATH没设好,在cron里执行时有很多命令会找不到 exportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin source/etc/profile [$(id-u)-gt0]&&echo"请用root用户执行此脚本!"&&exit1 centosVersion=$(awk'{print$(NF-1)}'/etc/redhat-release) VERSION="2017.08.22" #日志相关 PROGPATH=`echo$0|sed-e's,[\\/][^\\/][^\\/]*$,,'` [-f$PROGPATH]&&PROGPATH="." LOGPATH="$PROGPATH/log" [-e$LOGPATH]||mkdir$LOGPATH RESULTFILE="$LOGPATH/HostDailyCheck-$IPADDR-`date+%Y%m%d`.txt" #定义报表的全局变量 report_DateTime=""#日期ok report_Hostname=""#主机名ok report_OSRelease=""#发行版本ok report_Kernel=""#内核ok report_Language=""#语言/编码ok report_LastReboot=""#最近启动时间ok report_Uptime=""#运行时间(天)ok report_CPUs=""#CPU数量ok report_CPUType=""#CPU类型ok report_Arch=""#CPU架构ok report_MemTotal=""#内存总容量(MB)ok report_MemFree=""#内存剩余(MB)ok report_MemUsedPercent=""#内存使用率%ok report_DiskTotal=""#硬盘总容量(GB)ok report_DiskFree=""#硬盘剩余(GB)ok report_DiskUsedPercent=""#硬盘使用率%ok report_InodeTotal=""#Inode总量ok report_InodeFree=""#Inode剩余ok report_InodeUsedPercent=""#Inode使用率ok report_IP=""#IP地址ok report_MAC=""#MAC地址ok report_Gateway=""#默认网关ok report_DNS=""#DNSok report_Listen=""#监听ok report_Selinux=""#Selinuxok report_Firewall=""#防火墙ok report_USERs=""#用户ok report_USEREmptyPassword=""#空密码用户ok report_USERTheSameUID=""#相同ID的用户ok report_PasswordExpiry=""#密码过期(天)ok report_RootUser=""#root用户ok report_Sudoers=""#sudo授权ok report_SSHAuthorized=""#SSH信任主机ok report_SSHDProtocolVersion=""#SSH协议版本ok report_SSHDPermitRootLogin=""#允许root远程登录ok report_DefunctProsess=""#僵尸进程数量ok report_SelfInitiatedService=""#自启动服务数量ok report_SelfInitiatedProgram=""#自启动程序数量ok report_RuningService=""#运行中服务数ok report_Crontab=""#计划任务数ok report_Syslog=""#日志服务ok report_SNMP=""#SNMPOK report_NTP=""#NTPok report_JDK=""#JDK版本ok functionversion(){ echo"" echo"" echo"系统巡检脚本:Version$VERSION" } functiongetCpuStatus(){ echo"" echo"" echo"############################CPU检查#############################" Physical_CPUs=$(grep"physicalid"/proc/cpuinfo|sort|uniq|wc-l) Virt_CPUs=$(grep"processor"/proc/cpuinfo|wc-l) CPU_Kernels=$(grep"cores"/proc/cpuinfo|uniq|awk-F':''{print$2}') CPU_Type=$(grep"modelname"/proc/cpuinfo|awk-F':''{print$2}'|sort|uniq) CPU_Arch=$(uname-m) echo"物理CPU个数:$Physical_CPUs" echo"逻辑CPU个数:$Virt_CPUs" echo"每CPU核心数:$CPU_Kernels" echo"CPU型号:$CPU_Type" echo"CPU架构:$CPU_Arch" #报表信息 report_CPUs=$Virt_CPUs#CPU数量 report_CPUType=$CPU_Type#CPU类型 report_Arch=$CPU_Arch#CPU架构 } functiongetMemStatus(){ echo"" echo"" echo"############################内存检查############################" if[[$centosVersion<7]];then free-mo else free-h fi #报表信息 MemTotal=$(grepMemTotal/proc/meminfo|awk'{print$2}')#KB MemFree=$(grepMemFree/proc/meminfo|awk'{print$2}')#KB letMemUsed=MemTotal-MemFree MemPercent=$(awk"BEGIN{if($MemTotal==0){printf100}else{printf\"%.2f\",$MemUsed*100/$MemTotal}}") report_MemTotal="$((MemTotal/1024))""MB"#内存总容量(MB) report_MemFree="$((MemFree/1024))""MB"#内存剩余(MB) report_MemUsedPercent="$(awk"BEGIN{if($MemTotal==0){printf100}else{printf\"%.2f\",$MemUsed*100/$MemTotal}}")""%"#内存使用率% } functiongetDiskStatus(){ echo"" echo"" echo"############################磁盘检查############################" df-hiP|sed's/Mountedon/Mounted/'>/tmp/inode df-hTP|sed's/Mountedon/Mounted/'>/tmp/disk join/tmp/disk/tmp/inode|awk'{print$1,$2,"|",$3,$4,$5,$6,"|",$8,$9,$10,$11,"|",$12}'|column-t #报表信息 diskdata=$(df-TP|sed'1d'|awk'$2!="tmpfs"{print}')#KB disktotal=$(echo"$diskdata"|awk'{total+=$3}END{printtotal}')#KB diskused=$(echo"$diskdata"|awk'{total+=$4}END{printtotal}')#KB diskfree=$((disktotal-diskused))#KB diskusedpercent=$(echo$disktotal$diskused|awk'{if($1==0){printf100}else{printf"%.2f",$2*100/$1}}') inodedata=$(df-iTP|sed'1d'|awk'$2!="tmpfs"{print}') inodetotal=$(echo"$inodedata"|awk'{total+=$3}END{printtotal}') inodeused=$(echo"$inodedata"|awk'{total+=$4}END{printtotal}') inodefree=$((inodetotal-inodeused)) inodeusedpercent=$(echo$inodetotal$inodeused|awk'{if($1==0){printf100}else{printf"%.2f",$2*100/$1}}') report_DiskTotal=$((disktotal/1024/1024))"GB"#硬盘总容量(GB) report_DiskFree=$((diskfree/1024/1024))"GB"#硬盘剩余(GB) report_DiskUsedPercent="$diskusedpercent""%"#硬盘使用率% report_InodeTotal=$((inodetotal/1000))"K"#Inode总量 report_InodeFree=$((inodefree/1000))"K"#Inode剩余 report_InodeUsedPercent="$inodeusedpercent""%"#Inode使用率% } functiongetSystemStatus(){ echo"" echo"" echo"############################系统检查############################" if[-e/etc/sysconfig/i18n];then default_LANG="$(grep"LANG="/etc/sysconfig/i18n|grep-v"^#"|awk-F'"''{print$2}')" else default_LANG=$LANG fi exportLANG="en_US.UTF-8" Release=$(cat/etc/redhat-release2>/dev/null) Kernel=$(uname-r) OS=$(uname-o) Hostname=$(uname-n) SELinux=$(/usr/sbin/sestatus|grep"SELinuxstatus:"|awk'{print$3}') LastReboot=$(who-b|awk'{print$3,$4}') uptime=$(uptime|sed's/.*up\([^,]*\),.*/\1/') echo"系统:$OS" echo"发行版本:$Release" echo"内核:$Kernel" echo"主机名:$Hostname" echo"SELinux:$SELinux" echo"语言/编码:$default_LANG" echo"当前时间:$(date+'%F%T')" echo"最后启动:$LastReboot" echo"运行时间:$uptime" #报表信息 report_DateTime=$(date+"%F%T")#日期 report_Hostname="$Hostname"#主机名 report_OSRelease="$Release"#发行版本 report_Kernel="$Kernel"#内核 report_Language="$default_LANG"#语言/编码 report_LastReboot="$LastReboot"#最近启动时间 report_Uptime="$uptime"#运行时间(天) report_Selinux="$SELinux" exportLANG="$default_LANG" } functiongetServiceStatus(){ echo"" echo"" echo"############################服务检查############################" echo"" if[[$centosVersion>7]];then conf=$(systemctllist-unit-files--type=service--state=enabled--no-pager|grep"enabled") process=$(systemctllist-units--type=service--state=running--no-pager|grep".service") #报表信息 report_SelfInitiatedService="$(echo"$conf"|wc-l)"#自启动服务数量 report_RuningService="$(echo"$process"|wc-l)"#运行中服务数量 else conf=$(/sbin/chkconfig|grep-E":on|:启用") process=$(/sbin/service--status-all2>/dev/null|grep-E"isrunning|正在运行") #报表信息 report_SelfInitiatedService="$(echo"$conf"|wc-l)"#自启动服务数量 report_RuningService="$(echo"$process"|wc-l)"#运行中服务数量 fi echo"服务配置" echo"--------" echo"$conf"|column-t echo"" echo"正在运行的服务" echo"--------------" echo"$process" } functiongetAutoStartStatus(){ echo"" echo"" echo"############################自启动检查##########################" conf=$(grep-v"^#"/etc/rc.d/rc.local|sed'/^$/d') echo"$conf" #报表信息 report_SelfInitiatedProgram="$(echo$conf|wc-l)"#自启动程序数量 } functiongetLoginStatus(){ echo"" echo"" echo"############################登录检查############################" last|head } functiongetNetworkStatus(){ echo"" echo"" echo"############################网络检查############################" if[[$centosVersion<7]];then /sbin/ifconfig-a|grep-vpackets|grep-vcollisions|grep-vinet6 else #ipa foriin$(iplink|grepBROADCAST|awk-F:'{print$2}');doipaddshow$i|grep-E"BROADCAST|global"|awk'{print$2}'|tr'\n''';echo"";done fi GATEWAY=$(iproute|grepdefault|awk'{print$3}') DNS=$(grepnameserver/etc/resolv.conf|grep-v"#"|awk'{print$2}'|tr'\n'','|sed's/,$//') echo"" echo"网关:$GATEWAY" echo"DNS:$DNS" #报表信息 IP=$(ip-finetaddr|grep-v127.0.0.1|grepinet|awk'{print$NF,$2}'|tr'\n'','|sed's/,$//') MAC=$(iplink|grep-v"LOOPBACK\|loopback"|awk'{print$2}'|sed'N;s/\n//'|tr'\n'','|sed's/,$//') report_IP="$IP"#IP地址 report_MAC=$MAC#MAC地址 report_Gateway="$GATEWAY"#默认网关 report_DNS="$DNS"#DNS } functiongetListenStatus(){ echo"" echo"" echo"############################监听检查############################" TCPListen=$(ss-ntul|column-t) echo"$TCPListen" #报表信息 report_Listen="$(echo"$TCPListen"|sed'1d'|awk'/tcp/{print$5}'|awk-F:'{print$NF}'|sort|uniq|wc-l)" } functiongetCronStatus(){ echo"" echo"" echo"############################计划任务检查########################" Crontab=0 forshellin$(grep-v"/sbin/nologin"/etc/shells);do foruserin$(grep"$shell"/etc/passwd|awk-F:'{print$1}');do crontab-l-u$user>/dev/null2>&1 status=$? if[$status-eq0];then echo"$user" echo"--------" crontab-l-u$user letCrontab=Crontab+$(crontab-l-u$user|wc-l) echo"" fi done done #计划任务 find/etc/cron*-typef|xargs-ils-l{}|column-t letCrontab=Crontab+$(find/etc/cron*-typef|wc-l) #报表信息 report_Crontab="$Crontab"#计划任务数 } functiongetHowLongAgo(){ #计算一个时间戳离现在有多久了 datetime="$*" [-z"$datetime"]&&echo"错误的参数:getHowLongAgo()$*" Timestamp=$(date+%s-d"$datetime")#转化为时间戳 Now_Timestamp=$(date+%s) Difference_Timestamp=$(($Now_Timestamp-$Timestamp)) days=0;hours=0;minutes=0; sec_in_day=$((60*60*24)); sec_in_hour=$((60*60)); sec_in_minute=60 while(($(($Difference_Timestamp-$sec_in_day))>1)) do letDifference_Timestamp=Difference_Timestamp-sec_in_day letdays++ done while(($(($Difference_Timestamp-$sec_in_hour))>1)) do letDifference_Timestamp=Difference_Timestamp-sec_in_hour lethours++ done echo"$days天$hours小时前" } functiongetUserLastLogin(){ #获取用户最近一次登录的时间,含年份 #很遗憾last命令不支持显示年份,只有"last-tYYYYMMDDHHMMSS"表示某个时间之间的登录,我 #们只能用最笨的方法了,对比今天之前和今年元旦之前(或者去年之前和前年之前……)某个用户 #登录次数,如果登录统计次数有变化,则说明最近一次登录是今年。 username=$1 :${username:="`whoami`"} thisYear=$(date+%Y) oldesYear=$(last|tail-n1|awk'{print$NF}') while(($thisYear>=$oldesYear));do loginBeforeToday=$(last$username|grep$username|wc-l) loginBeforeNewYearsDayOfThisYear=$(last$username-t$thisYear"0101000000"|grep$username|wc-l) if[$loginBeforeToday-eq0];then echo"从未登录过" break elif[$loginBeforeToday-gt$loginBeforeNewYearsDayOfThisYear];then lastDateTime=$(last-i$username|head-n1|awk'{for(i=4;i<(NF-2);i++)printf"%s",$i}')"$thisYear"#格式如:SatNov220:332015 lastDateTime=$(date"+%Y-%m-%d%H:%M:%S"-d"$lastDateTime") echo"$lastDateTime" break else thisYear=$((thisYear-1)) fi done } functiongetUserStatus(){ echo"" echo"" echo"############################用户检查############################" #/etc/passwd最后修改时间 pwdfile="$(cat/etc/passwd)" Modify=$(stat/etc/passwd|grepModify|tr'.'''|awk'{print$2,$3}') echo"/etc/passwd最后修改时间:$Modify($(getHowLongAgo$Modify))" echo"" echo"特权用户" echo"--------" RootUser="" foruserin$(echo"$pwdfile"|awk-F:'{print$1}');do if[$(id-u$user)-eq0];then echo"$user" RootUser="$RootUser,$user" fi done echo"" echo"用户列表" echo"--------" USERs=0 echo"$( echo"用户名UIDGIDHOMESHELL最后一次登录" forshellin$(grep-v"/sbin/nologin"/etc/shells);do forusernamein$(grep"$shell"/etc/passwd|awk-F:'{print$1}');do userLastLogin="$(getUserLastLogin$username)" echo"$pwdfile"|grep-w"$username"|grep-w"$shell"|awk-F:-vlastlogin="$(echo"$userLastLogin"|tr'''_')"'{print$1,$3,$4,$6,$7,lastlogin}' done letUSERs=USERs+$(echo"$pwdfile"|grep"$shell"|wc-l) done )"|column-t echo"" echo"空密码用户" echo"----------" USEREmptyPassword="" forshellin$(grep-v"/sbin/nologin"/etc/shells);do foruserin$(echo"$pwdfile"|grep"$shell"|cut-d:-f1);do r=$(awk-F:'$2=="!!"{print$1}'/etc/shadow|grep-w$user) if[!-z$r];then echo$r USEREmptyPassword="$USEREmptyPassword,"$r fi done done echo"" echo"相同ID的用户" echo"------------" USERTheSameUID="" UIDs=$(cut-d:-f3/etc/passwd|sort|uniq-c|awk'$1>1{print$2}') foruidin$UIDs;do echo-n"$uid"; USERTheSameUID="$uid" r=$(awk-F:'ORS="";$3=='"$uid"'{print":",$1}'/etc/passwd) echo"$r" echo"" USERTheSameUID="$USERTheSameUID$r," done #报表信息 report_USERs="$USERs"#用户 report_USEREmptyPassword=$(echo$USEREmptyPassword|sed's/^,//') report_USERTheSameUID=$(echo$USERTheSameUID|sed's/,$//') report_RootUser=$(echo$RootUser|sed's/^,//')#特权用户 } functiongetPasswordStatus{ echo"" echo"" echo"############################密码检查############################" pwdfile="$(cat/etc/passwd)" echo"" echo"密码过期检查" echo"------------" result="" forshellin$(grep-v"/sbin/nologin"/etc/shells);do foruserin$(echo"$pwdfile"|grep"$shell"|cut-d:-f1);do get_expiry_date=$(/usr/bin/chage-l$user|grep'Passwordexpires'|cut-d:-f2) if[[$get_expiry_date='never'||$get_expiry_date='never']];then printf"%-15s永不过期\n"$user result="$result,$user:never" else password_expiry_date=$(date-d"$get_expiry_date""+%s") current_date=$(date"+%s") diff=$(($password_expiry_date-$current_date)) letDAYS=$(($diff/(60*60*24))) printf"%-15s%s天后过期\n"$user$DAYS result="$result,$user:$DAYSdays" fi done done report_PasswordExpiry=$(echo$result|sed's/^,//') echo"" echo"密码策略检查" echo"------------" grep-v"#"/etc/login.defs|grep-E"PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" } functiongetSudoersStatus(){ echo"" echo"" echo"############################Sudoers检查#########################" conf=$(grep-v"^#"/etc/sudoers|grep-v"^Defaults"|sed'/^$/d') echo"$conf" echo"" #报表信息 report_Sudoers="$(echo$conf|wc-l)" } functiongetInstalledStatus(){ echo"" echo"" echo"############################软件检查############################" rpm-qa--last|head|column-t } functiongetProcessStatus(){ echo"" echo"" echo"############################进程检查############################" if[$(ps-ef|grepdefunct|grep-vgrep|wc-l)-ge1];then echo"" echo"僵尸进程"; echo"--------" ps-ef|head-n1 ps-ef|grepdefunct|grep-vgrep fi echo"" echo"内存占用TOP10" echo"-------------" echo-e"PID%MEMRSSCOMMAND $(psaux|awk'{print$2,$4,$6,$11}'|sort-k3rn|head-n10)"|column-t echo"" echo"CPU占用TOP10" echo"------------" topb-n1|head-17|tail-11 #报表信息 report_DefunctProsess="$(ps-ef|grepdefunct|grep-vgrep|wc-l)" } functiongetJDKStatus(){ echo"" echo"" echo"############################JDK检查#############################" java-version2>/dev/null if[$?-eq0];then java-version2>&1 fi echo"JAVA_HOME=\"$JAVA_HOME\"" #报表信息 report_JDK="$(java-version2>&1|grepversion|awk'{print$1,$3}'|tr-d'"')" } functiongetSyslogStatus(){ echo"" echo"" echo"############################syslog检查##########################" echo"服务状态:$(getStatersyslog)" echo"" echo"/etc/rsyslog.conf" echo"-----------------" cat/etc/rsyslog.conf2>/dev/null|grep-v"^#"|grep-v"^\\$"|sed'/^$/d'|column-t #报表信息 report_Syslog="$(getStatersyslog)" } functiongetFirewallStatus(){ echo"" echo"" echo"############################防火墙检查##########################" #防火墙状态,策略等 if[[$centosVersion<7]];then /etc/init.d/iptablesstatus>/dev/null2>&1 status=$? if[$status-eq0];then s="active" elif[$status-eq3];then s="inactive" elif[$status-eq4];then s="permissiondenied" else s="unknown" fi else s="$(getStateiptables)" fi echo"iptables:$s" echo"" echo"/etc/sysconfig/iptables" echo"-----------------------" cat/etc/sysconfig/iptables2>/dev/null #报表信息 report_Firewall="$s" } functiongetSNMPStatus(){ #SNMP服务状态,配置等 echo"" echo"" echo"############################SNMP检查############################" status="$(getStatesnmpd)" echo"服务状态:$status" echo"" if[-e/etc/snmp/snmpd.conf];then echo"/etc/snmp/snmpd.conf" echo"--------------------" cat/etc/snmp/snmpd.conf2>/dev/null|grep-v"^#"|sed'/^$/d' fi #报表信息 report_SNMP="$(getStatesnmpd)" } functiongetState(){ if[[$centosVersion<7]];then if[-e"/etc/init.d/$1"];then if[`/etc/init.d/$1status2>/dev/null|grep-E"isrunning|正在运行"|wc-l`-ge1];then r="active" else r="inactive" fi else r="unknown" fi else #CentOS7+ r="$(systemctlis-active$12>&1)" fi echo"$r" } functiongetSSHStatus(){ #SSHD服务状态,配置,受信任主机等 echo"" echo"" echo"############################SSH检查#############################" #检查受信任主机 pwdfile="$(cat/etc/passwd)" echo"服务状态:$(getStatesshd)" Protocol_Version=$(cat/etc/ssh/sshd_config|grepProtocol|awk'{print$2}') echo"SSH协议版本:$Protocol_Version" echo"" echo"信任主机" echo"--------" authorized=0 foruserin$(echo"$pwdfile"|grep/bin/bash|awk-F:'{print$1}');do authorize_file=$(echo"$pwdfile"|grep-w$user|awk-F:'{printf$6"/.ssh/authorized_keys"}') authorized_host=$(cat$authorize_file2>/dev/null|awk'{print$3}'|tr'\n'','|sed's/,$//') if[!-z$authorized_host];then echo"$user授权\"$authorized_host\"无密码访问" fi letauthorized=authorized+$(cat$authorize_file2>/dev/null|awk'{print$3}'|wc-l) done echo"" echo"是否允许ROOT远程登录" echo"--------------------" config=$(cat/etc/ssh/sshd_config|grepPermitRootLogin) firstChar=${config:0:1} if[$firstChar=="#"];then PermitRootLogin="yes"#默认是允许ROOT远程登录的 else PermitRootLogin=$(echo$config|awk'{print$2}') fi echo"PermitRootLogin$PermitRootLogin" echo"" echo"/etc/ssh/sshd_config" echo"--------------------" cat/etc/ssh/sshd_config|grep-v"^#"|sed'/^$/d' #报表信息 report_SSHAuthorized="$authorized"#SSH信任主机 report_SSHDProtocolVersion="$Protocol_Version"#SSH协议版本 report_SSHDPermitRootLogin="$PermitRootLogin"#允许root远程登录 } functiongetNTPStatus(){ #NTP服务状态,当前时间,配置等 echo"" echo"" echo"############################NTP检查#############################" if[-e/etc/ntp.conf];then echo"服务状态:$(getStatentpd)" echo"" echo"/etc/ntp.conf" echo"-------------" cat/etc/ntp.conf2>/dev/null|grep-v"^#"|sed'/^$/d' fi #报表信息 report_NTP="$(getStatentpd)" } functionuploadHostDailyCheckReport(){ json="{ \"DateTime\":\"$report_DateTime\", \"Hostname\":\"$report_Hostname\", \"OSRelease\":\"$report_OSRelease\", \"Kernel\":\"$report_Kernel\", \"Language\":\"$report_Language\", \"LastReboot\":\"$report_LastReboot\", \"Uptime\":\"$report_Uptime\", \"CPUs\":\"$report_CPUs\", \"CPUType\":\"$report_CPUType\", \"Arch\":\"$report_Arch\", \"MemTotal\":\"$report_MemTotal\", \"MemFree\":\"$report_MemFree\", \"MemUsedPercent\":\"$report_MemUsedPercent\", \"DiskTotal\":\"$report_DiskTotal\", \"DiskFree\":\"$report_DiskFree\", \"DiskUsedPercent\":\"$report_DiskUsedPercent\", \"InodeTotal\":\"$report_InodeTotal\", \"InodeFree\":\"$report_InodeFree\", \"InodeUsedPercent\":\"$report_InodeUsedPercent\", \"IP\":\"$report_IP\", \"MAC\":\"$report_MAC\", \"Gateway\":\"$report_Gateway\", \"DNS\":\"$report_DNS\", \"Listen\":\"$report_Listen\", \"Selinux\":\"$report_Selinux\", \"Firewall\":\"$report_Firewall\", \"USERs\":\"$report_USERs\", \"USEREmptyPassword\":\"$report_USEREmptyPassword\", \"USERTheSameUID\":\"$report_USERTheSameUID\", \"PasswordExpiry\":\"$report_PasswordExpiry\", \"RootUser\":\"$report_RootUser\", \"Sudoers\":\"$report_Sudoers\", \"SSHAuthorized\":\"$report_SSHAuthorized\", \"SSHDProtocolVersion\":\"$report_SSHDProtocolVersion\", \"SSHDPermitRootLogin\":\"$report_SSHDPermitRootLogin\", \"DefunctProsess\":\"$report_DefunctProsess\", \"SelfInitiatedService\":\"$report_SelfInitiatedService\", \"SelfInitiatedProgram\":\"$report_SelfInitiatedProgram\", \"RuningService\":\"$report_RuningService\", \"Crontab\":\"$report_Crontab\", \"Syslog\":\"$report_Syslog\", \"SNMP\":\"$report_SNMP\", \"NTP\":\"$report_NTP\", \"JDK\":\"$report_JDK\" }" #echo"$json" curl-l-H"Content-type:application/json"-XPOST-d"$json""$uploadHostDailyCheckReportApi"2>/dev/null } functioncheck(){ version getSystemStatus getCpuStatus getMemStatus getDiskStatus getNetworkStatus getListenStatus getProcessStatus getServiceStatus getAutoStartStatus getLoginStatus getCronStatus getUserStatus getPasswordStatus getSudoersStatus getJDKStatus getFirewallStatus getSSHStatus getSyslogStatus getSNMPStatus getNTPStatus getInstalledStatus } #执行检查并保存检查结果 check>$RESULTFILE echo"检查结果:$RESULTFILE" 添加host.info信息 192.168.2.30 root root 192.168.2.28 root root 192.168.2.27 root root 192.168.2.29 root root 执行python脚本生成文件 #使用exe执行python脚本 安装pyinstaller E:\python新版学习\pyinstaller-develop>PyInstaller E:\python新版学习\3.6.2\inspe ction.py

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册